2016-01-17 6 views
1

Я использую pytest в первый раз, в основном это замечательно, но иногда он просто заканчивается без завершения, без сообщения об ошибке.py.test завершает работу без завершения с терминалом%

=========================================================================================== test session starts ============================================================================================ 
platform darwin -- Python 3.5.1, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 
rootdir: /Users/dacre/mike_tools/python, inifile: 
collected 7 items 

test_pipeline.py ......F% 
+0

У меня есть ситуации, что я * думаю * Возможно, это, но я не знаю достаточно о том, как устранить его, чтобы убедиться, что это та же проблема. Как я могу сказать, может ли это произойти, если я тестирую чужой код, то есть лучше не прорывать все это? [Мучительная деталь] (https://markdownshare.com/view/21a0a63c-66bf-4fa5-91d1-7d3d0c283bc7), описанная здесь. – Philip

ответ

1

В то время как я был в процессе размещения на этот вопрос, я понял это, но я отправляю это здесь для кого-либо еще с той же проблемой.

Проблема заключается в том, что ваш код вызывает close() по адресу sys.stderr или sys.stdout случайно. Это произошло со мной, потому что у меня была функция регистрации, которая пыталась отличить sys.stderr от другого дескриптора файла атрибутом .name. py.test получает контроль над sys.stderr и перенаправляет его на объект _pytest.capture.EncodedFile. Таким образом, моя функция неверно истолковала его и вызвала close() на этом объекте. Это вызвало преждевременное завершение без ошибок.

Я просто переписал свой код, чтобы избежать этой проблемы, однако альтернативный вариант должен был бы импортировать модули из SYS, а затем тест на «pytest» в модулях:

from sys import modules 
if 'pytest' in modules: 
    do something... 
Смежные вопросы