Code Monkey home page Code Monkey logo

Comments (68)

pupssman avatar pupssman commented on August 18, 2024

Действительно, такой баг есть.

from allure-pytest.

FuriousDuck avatar FuriousDuck commented on August 18, 2024

Не хочу показаться навязчивым. Есть какие-то сдвиги? Если нет, могу попробовать разобраться

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

Привет! Пока сдвигов нет, но есть понимание проблемы.
Есть два варианта решения:

  1. складывать все в один аллюрный отчет, полагаясь на передачу событий через pytest'овый механизм
  2. складывать все в разные отчеты для каждого потока/треда и полагаться на то, что аллюр соберет их все вместе правильно.

Гипотетически, второй вариант более предпочтителен. Но стоит уточнить, как работает сборка этих штук в самом аллюре.

from allure-pytest.

just-boris avatar just-boris commented on August 18, 2024

Отвечю про сборку этих штук в allure. У вас получатся свои xml в разном потоке? Каждая xml отразится отдельным сьютом, если параллеливание тоже ведется по сьютам, то все ок.

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

Хм, т.е. xml-ки никак не объединяются? А если в них сьюты с одинаковым именем? Или вроде того?

from allure-pytest.

just-boris avatar just-boris commented on August 18, 2024

Сейчас проверил. Два отдельных файла нарисовались отдельными одноименными сьютами.
Нам не нужна была merge-логика, вот мы ее и не писали.
Нужен @baev, чтобы узнать насколько трудно и нужно ли вообще мерджить сьюты при генерации.

from allure-pytest.

baev avatar baev commented on August 18, 2024

Казалось бы не трудно, а про нужно ли и как это лучше сделать я подумаю

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

@baev есть ли перспективы на фичу объединения XML-к?

from allure-pytest.

baev avatar baev commented on August 18, 2024

мы идем к этому, но обещать в ближайших версиях не могу

from allure-pytest.

VladimirSorokin avatar VladimirSorokin commented on August 18, 2024

Не хочу показаться навязчивым, но есть ли какие то сдвиги?

from allure-pytest.

baev avatar baev commented on August 18, 2024

@eroshenkoam призываю тебя в комментарии

from allure-pytest.

FuriousDuck avatar FuriousDuck commented on August 18, 2024

@baev +1, а то Артём разогрел интерес на Selenium Camp'e, а поработать не выходит

from allure-pytest.

eroshenkoam avatar eroshenkoam commented on August 18, 2024

Я не понимаю в чем проблема, господа.
У нас есть структура данных (тобишь набор xml-ек, по которым нам удобно генерировать отчет. Это модель, она используется во многих языка: PHP, Java, Python). По этому набору xml-ек мы генерируем отчет, опять же для любого языка. Задача адаптера заключается как раз в том, чтобы подготовить эти xml-ки. Я так понимаю, что при распараллеливании, у вас возникает какая-то проблема в адаптере. Давайте ее решим.

from allure-pytest.

baev avatar baev commented on August 18, 2024

Насколько я понял, проблема в том, что расспараллеливание идет по кейсам

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

Да, именно так, по кейсам

from allure-pytest.

eroshenkoam avatar eroshenkoam commented on August 18, 2024

Для нагладняости приведу пример:
Суита "A" содержит несколько тесткейсов (1, 2).
Эти тесткейсы 1 и 2 запускаются на разных машинах.

При этом. Запуск каждого из них проходит следующие этапы:

  1. Подготовка окружения (задача тест суита).
  2. Выполнение теста
  3. Очитчка окружения.

В результате мы получим 2 разные xml-ки, которые мы уже можем отображать (нужно разобраться с id).

Проблема:

А.1 упал на этапе "подготовка окружения", если интерпретировать это правильно, то тест А.1 вообще не запустился.
A.2 упал на самом тесте.

Нужно понять как мы будем отображать данную ситуацию.

from allure-pytest.

eroshenkoam avatar eroshenkoam commented on August 18, 2024

Как только решим этот вопрос, можно будет раскидать задачи на имплементацию.

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

Хм, поглядел на 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.

eroshenkoam avatar eroshenkoam commented on August 18, 2024

Я имею в виду, что мержить таки xml-ки - это неопределенность. Например,

к нам пришли xml-ки А.1 и А.2, у которых разные тайтлы, дескрипшены, лейблы и стар-стоп таймы, но одинаковые id-шники суита. Как смержить эти xml-ки в одну суиту А, с двумя тесткейсами?

from allure-pytest.

eroshenkoam avatar eroshenkoam commented on August 18, 2024

есть идеи?

from allure-pytest.

baev avatar baev commented on August 18, 2024

Ну, казалось бы, это некорректная ситуация. Если одинаковые id, то возьмем всю инфу из последнего найденного суита

from allure-pytest.

baev avatar baev commented on August 18, 2024

Притом я логику никакую писать не буду - просто в xsl добавлю group-by и все само

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

В котором xslt? Если это прям реально не сложно -- может, бранч с прототипом, кто-нибудь поиграется?

from allure-pytest.

eroshenkoam avatar eroshenkoam commented on August 18, 2024

это некорретная ситуация, которую мы имеем возможность поймать. Уже сейчас в Java есть API, который позволяет на лету добавлять информацию в тесты.

from allure-pytest.

eroshenkoam avatar eroshenkoam commented on August 18, 2024

т.е в этом случае мы будем хоронить отчет с ошибкой?

from allure-pytest.

baev avatar baev commented on August 18, 2024

Не понял про хоронить

Я имею в виду, что если нам сгенерируют две xml с одинаковым id и при этом разными тайтлами - сами себе злобные буратины.

from allure-pytest.

eroshenkoam avatar eroshenkoam commented on August 18, 2024

Дима, сделай прототип в отдельном бранче, давай попробуем на это посмотреть.
Ваня, адаптер уже пишет разные xml-ки?

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

Нет, но это не сложно прикрутить -- скоро запилю

from allure-pytest.

eroshenkoam avatar eroshenkoam commented on August 18, 2024

скоро? :) назови дату :)

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

Сегодня, но чуть позже, чем "прямо сейчас")
Кстати, вот тут есть дискуссия про xdist и варианты управления распределением: https://bitbucket.org/hpk42/pytest/issue/175/way-to-control-how-pytest-xdist-runs-tests
Можно, в качестве временной альтернативы, запилить туда патч, который позволит запускать тесты пер-файл.

from allure-pytest.

baev avatar baev commented on August 18, 2024

отвел 1.3.10-SNAPSHOT от 1.3.9
https://github.com/baev/allure-core/tree/testcase-grouping
группируются по имени суита. Если есть несколько суитов с одинаковым именем, то берется первый (какой-то), и к нему в кейсы добавляются кейсы отсальных суитов с тем же именем

from allure-pytest.

eroshenkoam avatar eroshenkoam commented on August 18, 2024

Ваня? Ты поправил адаптер?

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

Квест несколько подвис =(
Но могу сказать, что нужно сделать, чтобы так работало -- на https://github.com/allure-framework/allure-python/blob/master/allure/pytest_plugin.py#L44 есть явная проверка не включаться в XDIST-слейве -- нужно убрать ее и убрать очистку каталога с отчетами при создании объекта AllureImpl

from allure-pytest.

alvassin avatar alvassin commented on August 18, 2024

@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.

pupssman avatar pupssman commented on August 18, 2024

ого, похоже, что тут падает из-за того, что logdir == None получается. @avasin Можешь это проверить и понять, отчего так?

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

Похоже, что когда xdist создает еще один процесс он не все cmdline-аргументы ему передает. Хмм.

from allure-pytest.

FuriousDuck avatar FuriousDuck commented on August 18, 2024

@pupssman , например?

from allure-pytest.

bayandin avatar bayandin commented on August 18, 2024

Друзья, хотим активно начать использовать allure и сильно мешает эта проблема с xdist. Есть подвижки?

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

@bayandin похоже, пора это дело починить -- нам самим мешает)
Займемся в ближнее время)

from allure-pytest.

FuriousDuck avatar FuriousDuck commented on August 18, 2024

@pupssman , лучшая новость за понедельник!

from allure-pytest.

FuriousDuck avatar FuriousDuck commented on August 18, 2024

Немного подебажил. Имеем, что нарушен порядок выполнения методов AllureImpl.
Если запустить простейший сьют без плагина, имеем:
star_suite > start_case > attach > stop_case > stop_suite
С плагином же вообще ничего не вызывается кроме attach
Постараюсь покурить, отчего это....

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

Ясное дело, отчего. xdist работает так:
исходный процесс pytest ничего не делает и хуки не вызывает, вместо этого запускаются слейвы (локальные или удаленные), которым передаются Item'ы, на которых они и вызывают некоторые хуки.
Вот эта штука работает на удаленной стороне: https://bitbucket.org/hpk42/pytest-xdist/src/4c6c3926603135015691bcf537ed8dfe15b59874/xdist/remote.py?at=default
После работы Item'а его тестовый отчет сериализуется и передается в мастер-процесс, где на нем вызывается хук построения отчета.
Это достаточно фундаментально ломает логику работы адаптера)

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

Да, хуки -- pytest'овые хуки, вроде pytest_runtest_protocol или pytest_makereport.
Мы их и слушаем в pytest_adapter'е

from allure-pytest.

FuriousDuck avatar FuriousDuck commented on August 18, 2024

И всё равно странно. Если зарядить хуком pytest_runtest_protocol, например, conftest.py в соответствующей директории, ведёт себя верно. Но не в адаптере

from allure-pytest.

FuriousDuck avatar FuriousDuck commented on August 18, 2024

@pupssman , кажется, я вижу, как малой кровью всё можно исправить. К вечеру попытаюсь что-то придумать

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

Хммм, интересно. В двух словах?

from allure-pytest.

FuriousDuck avatar FuriousDuck commented on August 18, 2024

Если совсем кратко, то супер-хитрой подменой хука pytest_runtest_protocol
Если сурово к вопросу подойти, то его отдельно можно прокинуть в слэйв процессы, но это чуть ли не отдельный плагин делать надо
UPDATED

from allure-pytest.

FuriousDuck avatar FuriousDuck commented on August 18, 2024

@pupssman , я окончательно сломал #34, но зато пофиксил, кажется, это безобразие :) По крайней мере выхлоп получаю такой же, как без xdist в первозданном виде. Привожу код в порядок

update: заминка небольшая. Сгенеренный id_testsuite.xml наполняется не теми кейсами пока что

from allure-pytest.

FuriousDuck avatar FuriousDuck commented on August 18, 2024

@pupssman
Вопрос на миллион. allure научился склеивать два файла сьюта с одинаковым именем в один? Если да, то пофикшу окончательно

from allure-pytest.

bayandin avatar bayandin commented on August 18, 2024

Пинг?

from allure-pytest.

FuriousDuck avatar FuriousDuck commented on August 18, 2024

Вот жду ответа от господ. На данном этапе я заставил его работать и строить xml-ки. Проблему описал выше.

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

Склеивать, кажется, не научилось -- это было где-то в экспериментальной ветке у них

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

@FuriousDuck а где-то есть твой форк, который умеет уже генериться правильно?

from allure-pytest.

FuriousDuck avatar FuriousDuck commented on August 18, 2024

Пока нет :( Сегодня точно не обещаю, к завтрашнему вечеру выдам. Нет доступа к машине с кодом пока

from allure-pytest.

elhe avatar elhe commented on August 18, 2024

пофиксите уже окончательно, ну пожалуйста!:)

from allure-pytest.

movax01h avatar movax01h commented on August 18, 2024

будет отличный подарок на новый год :)

from allure-pytest.

bayandin avatar bayandin commented on August 18, 2024

Ребята, с наступающим вас! ⛄ 🎄 🎁 🎁 🎁

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

@FuriousDuck есть новости?

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

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.

FuriousDuck avatar FuriousDuck commented on August 18, 2024

@pupssman , есть, не очень хорошие пока что, сорри, что выпал надолго. Продолжаю воевать, вылезли дополнительные проблемы. Будет что показать - выдам

from allure-pytest.

pluxak88 avatar pluxak88 commented on August 18, 2024

Есть какие-либо новости?

from allure-pytest.

braunman avatar braunman commented on August 18, 2024

Очень хочется использовать xdist и allure. Пока нет вариантов?

from allure-pytest.

 avatar commented on August 18, 2024

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.

mavlyutov avatar mavlyutov commented on August 18, 2024

appreciate any help you can provide

from allure-pytest.

dimonb avatar dimonb commented on August 18, 2024

Есть какие-либо новости?

from allure-pytest.

pupssman avatar pupssman commented on August 18, 2024

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.

pupssman avatar pupssman commented on August 18, 2024

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.

pupssman avatar pupssman commented on August 18, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.