Я использую py.test для несколько нетрадиционного приложения. В принципе, я хочу, чтобы взаимодействие с пользователем проводилось с помощью print() и input() (это Python 3.5). Конечной целью является полуавтоматическое тестирование аппаратного и многослойного программного обеспечения, которое не может быть автоматически проверено даже в принципе. В некоторых тестовых случаях попросите специалиста по тестированию что-то сделать (подтвердите, введите или нажмите любую клавишу или подобное на консоли) или попросите их сделать простое измерение или визуально подтвердить что-то (ввести его на консоль).Как я могу заставить тесты py.test принимать интерактивный вход?
Пример того, что я (по наивности) хочу сделать:
def test_thingie():
thingie_init('red')
print('Testing the thingie.')
# Ask the testing technician to enter info, or confirm that he has set things up physically
x = int(input('Technician: How many *RED* widgets are on the thingie? Enter integer:'))
assert x == the_correct_number
Это работает, когда тестовый файл вызывается с pytest -s, чтобы предотвратить стандартный ввод и стандартный вывод захвата, но документированные средства (with capsys.disabled()
) в документация py.test не работает, поскольку они влияют только на stdout и stderr.
Что можно сделать, используя код в модуле py.test, без параметров командной строки и в идеале для каждого теста?
платформа, для чего это стоит, это Windows, и я предпочел бы не иметь этот затирать или затерта оберткой стандартного ввода/из/все, что результатов от вложенных оболочек, редких раковин и т.д.
Какие испытания вы хотите сделать? Модульные тесты, интеграционные тесты, тесты поведения, тесты юзабилити, ...? Похоже, вы пытаетесь смешать все. Кстати, каждое программное обеспечение может быть протестировано в принципе. –
То, что я пытаюсь сделать * специально *, делает встроенную работу input() в корпусах Pytest так же, как в интерактивном питоне или скриптах. – ikrase