testit-tms / adapters-python

Apache License 2.0
11 stars 11 forks source link

При запуске параметризованных тестов из тест плана создаётся никогда не заканчивающийся тест ран #43

Open gennadii-borodin opened 1 year ago

gennadii-borodin commented 1 year ago

Как воспроизвести

  1. Создать ручной тест в интерфейсе
  2. Привязать к созданному ручной тесту автоматический переметризованный тест (например тест из examples)
  3. Добавить тест в тест план
  4. Запустить автотесты из тест плана. Прогнать автотесты с tmsTestRunId из запуска

Актуальное поведение

  1. Создаются пустые сущности успешных тестов.
  2. В процессе остаётся висеть тест в ожидании результатов
  3. Тест ран никогда не заканчивается image

Ожидаемое поведение

  1. Тесты закончены
  2. Результаты автотестов привязаны к тесту
  3. Тест ран закончен
  4. Тест план получил статус прогона тестов
testit-owner commented 1 year ago

просьба указать версии пакетов, которые используются и какой параметр указывается в AdapterMode.

gennadii-borodin commented 1 year ago

Версии пакетов:

testit-adapter-pytest 2.0.8 testit-api-client 2.0.3 testit-python-commons 2.0.8

adapterMode = 0

testit-owner commented 1 year ago

добавьте входные параметры к тесткейсу https://docs.testit.software/user-guide/sekcii/ispolzovanie-parametrov.html и попробуйте запустить еще раз

gennadii-borodin commented 1 year ago

Добавил входные параметры в тест image

Добавил тест в план (их стало 2 по количеству параметров) image

Запустил прогон автотестов Раскрыл один инстанс теста image Раскрыл второй инстанс теста image

Darktel commented 1 year ago

В случае есть тесты помечены декоратором: @testit.externalId("test_checkstatus[{users}]") При этом ручной тест-кейс корректно связывается с автоматизированными. Но есть выполнять запуск через CI (Например GitLab). В результате запуска тестов ни одного теста не запускается. Версия библиотеки testit-adapter-pytest==2.0.8 testit-api-client==2.0.2 testit-python-commons==2.0.8

... INTERNALERROR> File "/usr/local/lib/python3.9/site-packages/testit_adapter_pytest/listener.py", line 94, in pytest_collection_modifyitems INTERNALERROR> raise SystemExit INTERNALERROR> SystemExit ============================ no tests ran in 3.40s =============================

При этом если в выполняется запуск тестов в связке 1:1. то все завершается успешно. В чем может быть проблема ? Не распарсивается параметр в декораторе?

testit-owner commented 1 year ago

Добавил входные параметры в тест image

Добавил тест в план (их стало 2 по количеству параметров) image

Запустил прогон автотестов Раскрыл один инстанс теста image Раскрыл второй инстанс теста image

В вашем случая я рекомендую не использовать параметры в декораторах externalId и displayName. В этом случае у вас будет создана только одна карточка автотеста, которая будет прилинкована к тест кейсу. В тест кейсе вы должны задать все параметры, которые принимает тест. И после этого у вас все успешно сопоставится

testit-owner commented 1 year ago

В случае есть тесты помечены декоратором: @testit.externalId("test_checkstatus[{users}]") При этом ручной тест-кейс корректно связывается с автоматизированными. Но есть выполнять запуск через CI (Например GitLab). В результате запуска тестов ни одного теста не запускается. Версия библиотеки testit-adapter-pytest==2.0.8 testit-api-client==2.0.2 testit-python-commons==2.0.8

... INTERNALERROR> File "/usr/local/lib/python3.9/site-packages/testit_adapter_pytest/listener.py", line 94, in pytest_collection_modifyitems INTERNALERROR> raise SystemExit INTERNALERROR> SystemExit ============================ no tests ran in 3.40s =============================

При этом если в выполняется запуск тестов в связке 1:1. то все завершается успешно. В чем может быть проблема ? Не распарсивается параметр в декораторе?

Пришлите тестовый проект и как в системе это у вас отображается

OddanN commented 1 year ago

А дайте скриншот со страницы https:///projects//autotests/library с отображением проблемных автотестов и обязательно что бы видно было внешний ID и название, а так же страницу проблемного тестрана.

И еще вопрос, у вас только externalID параметризирован или displayName тоже? Попробуйте оба параметризировать.

У меня похожая проблема была на ранних версиях адаптера из-за того, что в в ТМС из адаптера не уходило параметризированное название.

gennadii-borodin commented 1 year ago

В вашем случая я рекомендую не использовать параметры в декораторах externalId и displayName. В этом случае у вас будет создана только одна карточка автотеста, которая будет прилинкована к тест кейсу. В тест кейсе вы должны задать все параметры, которые принимает тест. И после этого у вас все успешно сопоставится

При такой организации тестраны стали заканчиваться и в них записываются результаты тестов. Однако, при таком подходе из интерфейса ТМС не видно какой именно параметр упал пока не пойдешь смотреть и разбирать приложенный код.

gennadii-borodin commented 1 year ago

Ну и попутно мелкий бажок в ui

В плашке тест рана зелёный индикатор горит для упавшего теста

image

testit-owner commented 1 year ago

Да, тут вы правы. Мы планируем переработать данный функционал и выпустить в следующих версиях TMS.

testit-owner commented 1 year ago

Этот индикатор относится к тестрану.

atsyatkovskiy commented 1 year ago

Коллеги и все-таки, как побороть зависший тест-ран (запущенный из тест-плана) с параметризацией?

В моем случае я не добавляю каких либо параметров в декораторы библиотеки testit workItemIds, externalId и тд. Там везде str и нет никаких переменных. Но стоит добавить хоть один параметр через декоратор @pytest.mark.parametrize("var", ["1"]), то в тест-плане происходит зависание теста в статусе "В процессе". Прочитал всю ветку, и по советам в предыдущих ответах добавил параметр в тест-кейс, назвал его так же как и в коде, но и это не помогло, тест виснет.

Работаю на таких версиях:

testit-adapter-pytest==2.0.10
testit-python-commons==2.0.10
testit-api-client==2.0.4
OddanN commented 1 year ago

@atsyatkovskiy у меня сейчас два почти одинаковых теста, оба с параметризацией один корректно работает, другой зависает в тестране и для него с Pytest приходит законченный прогон

vladpogrom commented 1 year ago

Ребят, а есть в итоге адекватное решение этой проблемы с параметризированными тестами? У меня на Java + Selenide тоже аналогичная проблема сейчас.

TatianaKlimova91 commented 12 months ago

Чтобы запускать и получать результаты для параметризованных тестов из тест-плана вам необходимо в ручной тест передать те же параметры. Подробнее можно в документации testit посмотреть как параметры создать

iromanchenko-cyrm commented 1 week ago

Уважаемые коллеги, почините, пожалуйста, баг, чтобы заявленный функционал заработал хотя бы с вышепредложенными костылями https://github.com/testit-tms/adapters-python/issues/43#issuecomment-1357471636 , так как в видеоинструкции в разделе документации https://docs.testit.software/user-guide/autotests/launch-autotests-from-ui.html у вас четко заявлена возможность запускать параметризованные тесты с декоратором @pytest.mark.parametrize, но это уже очень давно не работает. У нас большая часть тестов написана с параметризацией буквально в каждом из десятков проектов. Данный функционал оказался критически важным.

Мой кейс: Окружение: testit-adapter-pytest==3.2.2 └── testit-python-commons [required: ==3.2.2, installed: 3.2.2] └── testit-api-client [required: ==4.0.0, installed: 4.0.0]

Шаги:

  1. Тест написан согласно рекомендациям без параметров в @displayName и @externalID :

    class TestCreateAutotagFilterMode:
    @pytest.mark.parametrize(
        "save_btn_func",
        [
            ("save_and_create_autotag",),
            ("click_save_btn",),
        ],
    )
    @pytest.mark.autocoll_ui_psi
    @pytest.mark.autocoll_ui_debug
    @pytest.mark.usefixtures("open_main_page", "add_autotag")
    @displayName(f"Выбор опции {SAVE_CREATE_NEW_AUTOTAG_BTN} при создании автотега")
    @workItemIds("195842")
    @externalID("test_external_id_for_195842")
    def test_create_autotag_save_options(
        self,
        autotag_page,
        save_btn_func,
        create_new_tag,
    ):
        with step("Заполнение полей формы корректными данными."):
           ...
  2. Ручной тест 195842 с добавлением параметров из параметрайз

    image
  3. Ручной тест связан с автотестом 218763

    image
  4. В тестплан добавлен набор и один ручным тестом 195842, который после добавления превратился в 2, как вроде и должно быть, так как он параметризован двумя наборами данных

    image
  5. При запуске из гитлаба пайплайн имеет такой маркер, что запускаются 10 автотестов , в которые входит параметризованный 195842, указанный в шаге 1. Все тесты проливаются в прогон. Параметризованный тест 195842 имеет два автотеста с айди 218763 (2 верхних в списке)

    image
  6. После запуска набора из одного теста (сделанного на шаге 4) из вебинтерфейса путем отправки вебхука, стартует пайплайн с точно таким же маркером, как при запуске на шаге 5 (10 тестов в числе которых 195842) Ожидаемый результат: Прогон завершился, результаты пролились в тестплан. Актуальный результат: После завершения пайплайны запуск в testIT не завершается, навечно остается "В процессе", результаты автотестов заливаются, но не связываются с добавленным в тесплан тестом 195842. Самый верхние в списке автотесты искомые, а те с которыми результаты должны были связаться самые нижние 2 с крутящимися прелоадерами.

    image