Comments (68)
Действительно, такой баг есть.
from allure-pytest.
Не хочу показаться навязчивым. Есть какие-то сдвиги? Если нет, могу попробовать разобраться
from allure-pytest.
Привет! Пока сдвигов нет, но есть понимание проблемы.
Есть два варианта решения:
- складывать все в один аллюрный отчет, полагаясь на передачу событий через pytest'овый механизм
- складывать все в разные отчеты для каждого потока/треда и полагаться на то, что аллюр соберет их все вместе правильно.
Гипотетически, второй вариант более предпочтителен. Но стоит уточнить, как работает сборка этих штук в самом аллюре.
from allure-pytest.
Отвечю про сборку этих штук в allure. У вас получатся свои xml в разном потоке? Каждая xml отразится отдельным сьютом, если параллеливание тоже ведется по сьютам, то все ок.
from allure-pytest.
Хм, т.е. xml-ки никак не объединяются? А если в них сьюты с одинаковым именем? Или вроде того?
from allure-pytest.
Сейчас проверил. Два отдельных файла нарисовались отдельными одноименными сьютами.
Нам не нужна была merge-логика, вот мы ее и не писали.
Нужен @baev, чтобы узнать насколько трудно и нужно ли вообще мерджить сьюты при генерации.
from allure-pytest.
Казалось бы не трудно, а про нужно ли и как это лучше сделать я подумаю
from allure-pytest.
@baev есть ли перспективы на фичу объединения XML-к?
from allure-pytest.
мы идем к этому, но обещать в ближайших версиях не могу
from allure-pytest.
Не хочу показаться навязчивым, но есть ли какие то сдвиги?
from allure-pytest.
@eroshenkoam призываю тебя в комментарии
from allure-pytest.
@baev +1, а то Артём разогрел интерес на Selenium Camp'e, а поработать не выходит
from allure-pytest.
Я не понимаю в чем проблема, господа.
У нас есть структура данных (тобишь набор xml-ек, по которым нам удобно генерировать отчет. Это модель, она используется во многих языка: PHP, Java, Python). По этому набору xml-ек мы генерируем отчет, опять же для любого языка. Задача адаптера заключается как раз в том, чтобы подготовить эти xml-ки. Я так понимаю, что при распараллеливании, у вас возникает какая-то проблема в адаптере. Давайте ее решим.
from allure-pytest.
Насколько я понял, проблема в том, что расспараллеливание идет по кейсам
from allure-pytest.
Да, именно так, по кейсам
from allure-pytest.
Для нагладняости приведу пример:
Суита "A" содержит несколько тесткейсов (1, 2).
Эти тесткейсы 1 и 2 запускаются на разных машинах.
При этом. Запуск каждого из них проходит следующие этапы:
- Подготовка окружения (задача тест суита).
- Выполнение теста
- Очитчка окружения.
В результате мы получим 2 разные xml-ки, которые мы уже можем отображать (нужно разобраться с id).
Проблема:
А.1 упал на этапе "подготовка окружения", если интерпретировать это правильно, то тест А.1 вообще не запустился.
A.2 упал на самом тесте.
Нужно понять как мы будем отображать данную ситуацию.
from allure-pytest.
Как только решим этот вопрос, можно будет раскидать задачи на имплементацию.
from allure-pytest.
Хм, поглядел на xsd-ху, там написано вот что:
<xsd:complexType name="test-suite-result">
<xsd:all>
<xsd:element name="name" type="qa:name"/>
<xsd:element name="title" type="xsd:string" minOccurs="0"/>
<xsd:element name="description" type="qa:description" minOccurs="0"/>
<xsd:element name="test-cases" type="qa:test-cases-result" minOccurs="0"/>
<xsd:element name="labels" type="qa:labels" minOccurs="0"/>
</xsd:all>
<xsd:attribute name="start" type="xsd:long" use="required"/>
<xsd:attribute name="stop" type="xsd:long" use="required"/>
</xsd:complexType>
И тут нет падений этапа подготовки =(
Т.е. семантически -- сьют это именно "коробка с тестами" и мета-инфой.
Но эта та схема, которую мы используем сейчас -- 1.3.Х
from allure-pytest.
Я имею в виду, что мержить таки xml-ки - это неопределенность. Например,
к нам пришли xml-ки А.1 и А.2, у которых разные тайтлы, дескрипшены, лейблы и стар-стоп таймы, но одинаковые id-шники суита. Как смержить эти xml-ки в одну суиту А, с двумя тесткейсами?
from allure-pytest.
есть идеи?
from allure-pytest.
Ну, казалось бы, это некорректная ситуация. Если одинаковые id, то возьмем всю инфу из последнего найденного суита
from allure-pytest.
Притом я логику никакую писать не буду - просто в xsl добавлю group-by и все само
from allure-pytest.
В котором xslt? Если это прям реально не сложно -- может, бранч с прототипом, кто-нибудь поиграется?
from allure-pytest.
это некорретная ситуация, которую мы имеем возможность поймать. Уже сейчас в Java есть API, который позволяет на лету добавлять информацию в тесты.
from allure-pytest.
т.е в этом случае мы будем хоронить отчет с ошибкой?
from allure-pytest.
Не понял про хоронить
Я имею в виду, что если нам сгенерируют две xml с одинаковым id и при этом разными тайтлами - сами себе злобные буратины.
from allure-pytest.
Дима, сделай прототип в отдельном бранче, давай попробуем на это посмотреть.
Ваня, адаптер уже пишет разные xml-ки?
from allure-pytest.
Нет, но это не сложно прикрутить -- скоро запилю
from allure-pytest.
скоро? :) назови дату :)
from allure-pytest.
Сегодня, но чуть позже, чем "прямо сейчас")
Кстати, вот тут есть дискуссия про xdist и варианты управления распределением: https://bitbucket.org/hpk42/pytest/issue/175/way-to-control-how-pytest-xdist-runs-tests
Можно, в качестве временной альтернативы, запилить туда патч, который позволит запускать тесты пер-файл.
from allure-pytest.
отвел 1.3.10-SNAPSHOT от 1.3.9
https://github.com/baev/allure-core/tree/testcase-grouping
группируются по имени суита. Если есть несколько суитов с одинаковым именем, то берется первый (какой-то), и к нему в кейсы добавляются кейсы отсальных суитов с тем же именем
from allure-pytest.
Ваня? Ты поправил адаптер?
from allure-pytest.
Квест несколько подвис =(
Но могу сказать, что нужно сделать, чтобы так работало -- на https://github.com/allure-framework/allure-python/blob/master/allure/pytest_plugin.py#L44 есть явная проверка не включаться в XDIST-слейве -- нужно убрать ее и убрать очистку каталога с отчетами при создании объекта AllureImpl
from allure-pytest.
@pupssman убрал очистку директории... по поводу слейва, насколько я понимаю строчка либо обновилась, либо там ошибка (на 44 сейчас что-то другое).
Ctrl+F-ом нашел слово slave тут: https://github.com/allure-framework/allure-python/blob/master/allure/pytest_plugin.py#L72
но если я удаляю эту строку (и убираю дополнительный отступ, который требовался для обозначения if) все равно получаю ошибку:
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
C:\Users\Alexander\Desktop\allure>py.test test.py
INTERNALERROR> Traceback (most recent call last):
INTERNALERROR> File "C:\Python27\lib\site-packages\_pytest\main.py", line 80,
in wrap_session
INTERNALERROR> config.do_configure()
INTERNALERROR> File "C:\Python27\lib\site-packages\_pytest\config.py", line 61
8, in do_configure
INTERNALERROR> self.hook.pytest_configure(config=self)
INTERNALERROR> File "C:\Python27\lib\site-packages\_pytest\core.py", line 413,
in __call__
INTERNALERROR> return self._docall(methods, kwargs)
INTERNALERROR> File "C:\Python27\lib\site-packages\_pytest\core.py", line 424,
in _docall
INTERNALERROR> res = mc.execute()
INTERNALERROR> File "C:\Python27\lib\site-packages\_pytest\core.py", line 315,
in execute
INTERNALERROR> res = method(**kwargs)
INTERNALERROR> File "C:\Python27\lib\site-packages\xdist\plugin.py", line 62,
in pytest_configure
INTERNALERROR> __multicall__.execute()
INTERNALERROR> File "C:\Python27\lib\site-packages\_pytest\core.py", line 315,
in execute
INTERNALERROR> res = method(**kwargs)
INTERNALERROR> File "C:\Python27\lib\site-packages\allure\pytest_plugin.py", l
ine 73, in pytest_configure
INTERNALERROR> config._allurelistener = AllureTestListener(reportdir, config
)
INTERNALERROR> File "C:\Python27\lib\site-packages\allure\pytest_plugin.py", l
ine 237, in __init__
INTERNALERROR> self.impl = AllureImpl(logdir)
INTERNALERROR> File "C:\Python27\lib\site-packages\allure\common.py", line 82,
in __init__
INTERNALERROR> self.logdir = os.path.normpath(os.path.abspath(os.path.expand
user(os.path.expandvars(logdir))))
INTERNALERROR> File "C:\Python27\lib\ntpath.py", line 330, in expandvars
INTERNALERROR> if '$' not in path and '%' not in path:
INTERNALERROR> TypeError: argument of type 'NoneType' is not iterable
C:\Users\Alexander\Desktop\allure>
from allure-pytest.
ого, похоже, что тут падает из-за того, что logdir == None
получается. @avasin Можешь это проверить и понять, отчего так?
from allure-pytest.
Похоже, что когда xdist создает еще один процесс он не все cmdline-аргументы ему передает. Хмм.
from allure-pytest.
@pupssman , например?
from allure-pytest.
Друзья, хотим активно начать использовать allure и сильно мешает эта проблема с xdist. Есть подвижки?
from allure-pytest.
@bayandin похоже, пора это дело починить -- нам самим мешает)
Займемся в ближнее время)
from allure-pytest.
@pupssman , лучшая новость за понедельник!
from allure-pytest.
Немного подебажил. Имеем, что нарушен порядок выполнения методов AllureImpl.
Если запустить простейший сьют без плагина, имеем:
star_suite > start_case > attach > stop_case > stop_suite
С плагином же вообще ничего не вызывается кроме attach
Постараюсь покурить, отчего это....
from allure-pytest.
Ясное дело, отчего. xdist работает так:
исходный процесс pytest ничего не делает и хуки не вызывает, вместо этого запускаются слейвы (локальные или удаленные), которым передаются Item'ы, на которых они и вызывают некоторые хуки.
Вот эта штука работает на удаленной стороне: https://bitbucket.org/hpk42/pytest-xdist/src/4c6c3926603135015691bcf537ed8dfe15b59874/xdist/remote.py?at=default
После работы Item'а его тестовый отчет сериализуется и передается в мастер-процесс, где на нем вызывается хук построения отчета.
Это достаточно фундаментально ломает логику работы адаптера)
from allure-pytest.
Да, хуки -- pytest'овые хуки, вроде pytest_runtest_protocol
или pytest_makereport
.
Мы их и слушаем в pytest_adapter'е
from allure-pytest.
И всё равно странно. Если зарядить хуком pytest_runtest_protocol
, например, conftest.py в соответствующей директории, ведёт себя верно. Но не в адаптере
from allure-pytest.
@pupssman , кажется, я вижу, как малой кровью всё можно исправить. К вечеру попытаюсь что-то придумать
from allure-pytest.
Хммм, интересно. В двух словах?
from allure-pytest.
Если совсем кратко, то супер-хитрой подменой хука pytest_runtest_protocol
Если сурово к вопросу подойти, то его отдельно можно прокинуть в слэйв процессы, но это чуть ли не отдельный плагин делать надо
UPDATED
from allure-pytest.
@pupssman , я окончательно сломал #34, но зато пофиксил, кажется, это безобразие :) По крайней мере выхлоп получаю такой же, как без xdist в первозданном виде. Привожу код в порядок
update: заминка небольшая. Сгенеренный id_testsuite.xml наполняется не теми кейсами пока что
from allure-pytest.
@pupssman
Вопрос на миллион. allure научился склеивать два файла сьюта с одинаковым именем в один? Если да, то пофикшу окончательно
from allure-pytest.
Пинг?
from allure-pytest.
Вот жду ответа от господ. На данном этапе я заставил его работать и строить xml-ки. Проблему описал выше.
from allure-pytest.
Склеивать, кажется, не научилось -- это было где-то в экспериментальной ветке у них
from allure-pytest.
@FuriousDuck а где-то есть твой форк, который умеет уже генериться правильно?
from allure-pytest.
Пока нет :( Сегодня точно не обещаю, к завтрашнему вечеру выдам. Нет доступа к машине с кодом пока
from allure-pytest.
пофиксите уже окончательно, ну пожалуйста!:)
from allure-pytest.
будет отличный подарок на новый год :)
from allure-pytest.
Ребята, с наступающим вас! ⛄ 🎄 🎁 🎁 🎁
from allure-pytest.
@FuriousDuck есть новости?
from allure-pytest.
Behold!
https://github.com/allure-framework/allure-core/releases/tag/allure-core-1.4.7
Group suites by name (from different files)
from allure-pytest.
@pupssman , есть, не очень хорошие пока что, сорри, что выпал надолго. Продолжаю воевать, вылезли дополнительные проблемы. Будет что показать - выдам
from allure-pytest.
Есть какие-либо новости?
from allure-pytest.
Очень хочется использовать xdist и allure. Пока нет вариантов?
from allure-pytest.
Hey guys, is there any update on where we are getting allure integrated with xdist? I have spoken to some other people recently in the Python testing community, and a lot of people are waiting for xdist support before they will look at using Allure for their pytest reporting.
Do you want a hand debugging this further?
from allure-pytest.
appreciate any help you can provide
from allure-pytest.
Есть какие-либо новости?
from allure-pytest.
Allure-core folks ( @eroshenkoam ) are currently working on some kind format rewamp (in 1.5 or something) and we are currently waiting for initial proposals to decide on proper way of fixing this and other issues.
from allure-pytest.
Still, the proper way of fixing this looks like attaching per-test allure result data to the test result itself (in a picklable format so it will get transmitted by the wire back to master) and aggregating / writing the report on the master side. That requires quite a bit of refactoring.
from allure-pytest.
So, anyone interested in delving into this? I am going to give it a kick soon -- but any help would be appreciated.
from allure-pytest.
Related Issues (20)
- Allure doesn't make a screenshot on a mobile device during the autotests with pyTest uiAutomator on Android HOT 8
- How to make allure plugin dependent on another plugin? HOT 2
- Can I see log trace of a passed test case, currently the debug trace is only for failed test cases HOT 2
- @Attachment for video having .webm is not attaching to the allure report in Ubuntu HOT 3
- seeing some os.error too many files.. any known issue here ? HOT 1
- Plugin already registered HOT 5
- I am looking to add a attachment in one of the tabs , not to a test case HOT 3
- Got ImportError: cannot import name 'unicodify' error after updating to version allure-pytest 2.0.0b2 HOT 31
- Unable to execute test cases specifying --allure_features or --allure stories attribute HOT 5
- Support tags: HOST, FEATURE and etc via LabelType class HOT 1
- Teardown function's logs not captured in allure report HOT 3
- Providing a responsive UI HOT 1
- Incompatible with pytest 3.2.0 HOT 1
- getting ValueError: option names set(['--alluredir']) already added" while trying to build a job on jenkins with allure-pytest plugin HOT 1
- Cyrillic symbols display like unicode in test's title HOT 1
- Multiple flow test xml-report counldn't be generated if one or more tests failed HOT 2
- Is it possible to rename test suits and test cases names? HOT 8
- why?How to solve this error? HOT 1
- Warnings during generating of allure report - RemovedInPytest4Warning HOT 3
- good!
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from allure-pytest.