Форум сайта python.su
Падение хотя бы одного теста в кейсе, запускаемом в параллельных процессах, дает в результате пустой xml-файл для генератора allure-отчета
————————————————————————————
команда запуска кейса в нескольких процессах выглядит так:
pytest -n 3 “my_script.py” –alluredir=“d:\\my_report\\my_script\\”
my_script.py - скрипт с параллельно запускаемыми тестами
————————————————————————————
Когда все тесты проходят успешно, xml-файл формируется корректно
и генерируется в allure-отчет. В случае падения одного или нескольких
тестов - файл создается пустой (0 байт)
Кто нибудь решал такую задачу? Что сделать, что бы при падении тестов
файл всё-таки формировался, как следует?
Офлайн
alexgreg1) Сделай экспериментальный тестовый файл без параллельных процессов. Сделай там специальный сбой теста и посмотри, генерируется ли xml-файл.
Падение хотя бы одного теста в кейсе, запускаемом в параллельных процессах
Офлайн
тот же самый скрипт в последовательном запуске отрабатывает, т.е. если падает хотябы один тест, то это отражается в xml-файле и в allure-отчете
тех.данные:
————————————————————————————
platform win32 – Python 3.6.2, pytest-3.2.2, py-1.4.34, pluggy-0.4.0
rootdir: D:\pro\pypro\…
plugins: xdist-1.20.0, forked-0.2, allure-adaptor-1.7.8
————————————————————————————
Отредактировано alexgreg (Окт. 16, 2017 12:01:38)
Офлайн
При параллельном запуске, в случае падения хотя бы одного теста…..
File "D:\pf\PyCharm\helpers\pycharm\_jb_pytest_runner.py", line 31, in <module> pytest.main(args, plugins_to_load) File "D:\pf\python36\lib\site-packages\_pytest\config.py", line 58, in main return config.hook.pytest_cmdline_main(config=config) File "D:\pf\python36\lib\site-packages\_pytest\vendored_packages\pluggy.py", line 745, in __call__ return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs) File "D:\pf\python36\lib\site-packages\_pytest\vendored_packages\pluggy.py", line 339, in _hookexec return self._inner_hookexec(hook, methods, kwargs) File "D:\pf\python36\lib\site-packages\_pytest\vendored_packages\pluggy.py", line 334, in <lambda> _MultiCall(methods, kwargs, hook.spec_opts).execute() File "D:\pf\python36\lib\site-packages\_pytest\vendored_packages\pluggy.py", line 614, in execute res = hook_impl.function(*args) File "D:\pf\python36\lib\site-packages\_pytest\main.py", line 139, in pytest_cmdline_main return wrap_session(config, _main) File "D:\pf\python36\lib\site-packages\_pytest\main.py", line 133, in wrap_session exitstatus=session.exitstatus) File "D:\pf\python36\lib\site-packages\_pytest\vendored_packages\pluggy.py", line 745, in __call__ return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs) File "D:\pf\python36\lib\site-packages\_pytest\vendored_packages\pluggy.py", line 339, in _hookexec return self._inner_hookexec(hook, methods, kwargs) File "D:\pf\python36\lib\site-packages\_pytest\vendored_packages\pluggy.py", line 334, in <lambda> _MultiCall(methods, kwargs, hook.spec_opts).execute() File "D:\pf\python36\lib\site-packages\_pytest\vendored_packages\pluggy.py", line 613, in execute return _wrapped_call(hook_impl.function(*args), self.execute) File "D:\pf\python36\lib\site-packages\_pytest\vendored_packages\pluggy.py", line 250, in _wrapped_call wrap_controller.send(call_outcome) File "D:\pf\python36\lib\site-packages\_pytest\terminal.py", line 406, in pytest_sessionfinish outcome.get_result() File "D:\pf\python36\lib\site-packages\_pytest\vendored_packages\pluggy.py", line 279, in get_result raise ex[1].with_traceback(ex[2]) File "D:\pf\python36\lib\site-packages\_pytest\vendored_packages\pluggy.py", line 265, in __init__ self.result = func() File "D:\pf\python36\lib\site-packages\_pytest\vendored_packages\pluggy.py", line 614, in execute res = hook_impl.function(*args) File "d:\pf\python36\lib\site-packages\allure\pytest_plugin.py", line 494, in pytest_sessionfinish self.impl._write_xml(f, s) File "d:\pf\python36\lib\site-packages\allure\common.py", line 254, in _write_xml xmlfied.toxml(), File "d:\pf\python36\lib\site-packages\allure\rules.py", line 129, in toxml manys = sum([[(m[0], v) for v in m[1]] for m in entries(Many)], []) File "d:\pf\python36\lib\site-packages\allure\rules.py", line 123, in entries for (name, rule) in items File "d:\pf\python36\lib\site-packages\allure\rules.py", line 124, in <listcomp> if isinstance(rule, clazz) and rule.check(getattr(self, name))] File "d:\pf\python36\lib\site-packages\allure\rules.py", line 109, in value values = super(WrappedMany, self).value(name, what) File "d:\pf\python36\lib\site-packages\allure\rules.py", line 103, in value return [self.rule.value(name, x) for x in what] File "d:\pf\python36\lib\site-packages\allure\rules.py", line 103, in <listcomp> return [self.rule.value(name, x) for x in what] File "d:\pf\python36\lib\site-packages\allure\rules.py", line 92, in value return what.toxml() File "d:\pf\python36\lib\site-packages\allure\rules.py", line 128, in toxml nested = entries(Nested) File "d:\pf\python36\lib\site-packages\allure\rules.py", line 123, in entries for (name, rule) in items File "d:\pf\python36\lib\site-packages\allure\rules.py", line 124, in <listcomp> if isinstance(rule, clazz) and rule.check(getattr(self, name))] File "d:\pf\python36\lib\site-packages\allure\rules.py", line 92, in value return what.toxml() File "d:\pf\python36\lib\site-packages\allure\rules.py", line 126, in toxml elements = entries(Element) File "d:\pf\python36\lib\site-packages\allure\rules.py", line 123, in entries for (name, rule) in items File "d:\pf\python36\lib\site-packages\allure\rules.py", line 124, in <listcomp> if isinstance(rule, clazz) and rule.check(getattr(self, name))] File "d:\pf\python36\lib\site-packages\allure\rules.py", line 80, in value return element_maker(self.name or name, self.namespace)(legalize_xml(unicodify(what))) File "d:\pf\python36\lib\site-packages\allure\utils.py", line 126, in unicodify return text_type(something) # @UndefinedVariable File "D:\pf\python36\lib\site-packages\_pytest\_code\code.py", line 694, in __str__ s = self.__unicode__() File "D:\pf\python36\lib\site-packages\_pytest\_code\code.py", line 704, in __unicode__ self.toterminal(tw) File "D:\pf\python36\lib\site-packages\_pytest\_code\code.py", line 735, in toterminal element[0].toterminal(tw) File "D:\pf\python36\lib\site-packages\_pytest\_code\code.py", line 764, in toterminal if entry.style == "long": AttributeError: 'dict' object has no attribute 'style'
Отредактировано alexgreg (Окт. 16, 2017 08:53:22)
Офлайн
Если бы бы ты сделал минимальный проект повторяющий ошибку, чтобы быстро развернуть и посмотреть, я думаю, многие бы посмотрели, а так придется ждать того, кто натыкался на грабли.
Офлайн
Винни, я тебя услышал.
Офлайн
вот проект.
перед использованием прочитайте read.me.txt и chromedriver.txt
Прикреплённый файлы:
my_pro.zip (4,1 KБ)
Офлайн