Найти - Пользователи
Полная версия: [pytets-xdist + pytest-allure-adaptor] Падение хотя бы одного теста в кейсе, запускаемом в параллельных процессах, дает в результате пустой xml-файл для генератора allure-отчета
Начало » Python для экспертов » [pytets-xdist + pytest-allure-adaptor] Падение хотя бы одного теста в кейсе, запускаемом в параллельных процессах, дает в результате пустой xml-файл для генератора allure-отчета
1
alexgreg
Падение хотя бы одного теста в кейсе, запускаемом в параллельных процессах, дает в результате пустой xml-файл для генератора allure-отчета
————————————————————————————
команда запуска кейса в нескольких процессах выглядит так:

pytest -n 3 “my_script.py” –alluredir=“d:\\my_report\\my_script\\”
my_script.py - скрипт с параллельно запускаемыми тестами
————————————————————————————
Когда все тесты проходят успешно, xml-файл формируется корректно
и генерируется в allure-отчет. В случае падения одного или нескольких
тестов - файл создается пустой (0 байт)

Кто нибудь решал такую задачу? Что сделать, что бы при падении тестов
файл всё-таки формировался, как следует?
py.user.next
alexgreg
Падение хотя бы одного теста в кейсе, запускаемом в параллельных процессах
1) Сделай экспериментальный тестовый файл без параллельных процессов. Сделай там специальный сбой теста и посмотри, генерируется ли xml-файл.
2) Если xml-файл генерируется, добавь в этот тестовый файл параллельный запуск тестов. Сделай там специальный сбой теста и посмотри, генерируется ли xml-файл.

Нужно выяснить таким образом: 1) действительно ли дело не в настройках проекта; 2) действительно ли дело в многопроцессном запуске.
alexgreg
тот же самый скрипт в последовательном запуске отрабатывает, т.е. если падает хотябы один тест, то это отражается в 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
При параллельном запуске, в случае падения хотя бы одного теста…..

  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'



….. вываливается вот такая гадость
PooH
Если бы бы ты сделал минимальный проект повторяющий ошибку, чтобы быстро развернуть и посмотреть, я думаю, многие бы посмотрели, а так придется ждать того, кто натыкался на грабли.
alexgreg
Винни, я тебя услышал.
alexgreg
вот проект.
перед использованием прочитайте read.me.txt и chromedriver.txt
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB