Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Запуск теста в несколько потоков Py.test + Selenium

pytest
parallel
selenium
Теги: #<Tag:0x00007f7b68c4c490> #<Tag:0x00007f7b68c4c0d0> #<Tag:0x00007f7b68c57d68>

(Vadim Kovrizhkin) #1

Сегодня посмотрел доклад Михаила “От идеи до Selenium теста всего лишь один шаг — Python”

На 39-й минуте было показано, как запускать тесты в несколько потоков.

Такой командой py.test -n2 test.py запустить тест в 2 потока не получается. Запускаются последовательно тесты (сначала один, потом другой)

В самом тесте я использую unittest(т.е. наследуюсь от unittest.TestCase). Запускаю через selenium grid (создал два инстанса firefox)

Вот мой BaseTestCase.py https://github.com/Vadim-Kovrizhkin/Test_Portfolio/blob/master/BaseTestCase.py

Запускаю вот такой тест https://github.com/Vadim-Kovrizhkin/Test_Portfolio/blob/master/Test_Portfolio.py
py.test -n2 Test_Portfolio.py
И этот тест идет 2 раза по очереди.

Что не так делаю? :frowning:

Это уже второй доклад, где я вижу про использование такой команды, для запуска тестов в несколько потоков


(Bolatbek) #2

У вас стоит?


(Vadim Kovrizhkin) #3

да, конечно


(Виталий Коряков) #4

В последнее время тема стала звучать довольно часто. Может стоит написать кому то мануал по распараллеливанию тестов?


(Vadim Kovrizhkin) #5

Я могу))
Только нужно узнать как это сделать))


(Alexander Petrovich) #6

А скажите версии pytest, pytest-xdist и приложите содержимое Pages.BaseClass плиз
Да и вообще интересно, зачем вы наследуетесь от BaseClass


(Vadim Kovrizhkin) #7

pytest(2.9.1) и pytest-xdist поставил буквально 3 дня назад.
Вот baseclass http://prntscr.com/ax23s1


(Виталий Коряков) #8

Только что поставил всю эту связку py.test + pytest-xdist, проверил на своих тестах, работает - агонь, параллелит как надо ))


(Vadim Kovrizhkin) #9

как так:)
А есть пример теста?


(Виталий Коряков) #10

Может у вас проблема в том, что вы запускаете 1 тест в 2 потока, он и срабатывает 2 раза последовательно.
Хотя я для теста запустил один тест в 2 потока, сработал 1 раз в 1 поток )
Попробуйте запустить 2 теста.


(Vadim Kovrizhkin) #11

Да, я пытаюсь запустить 1 тест в 2 потока, ожидая что у меня запустится два инстанса браузера. Т.е. например запустить 1 тест сразу на нескольких браузерах.
Пока я пытаюсь делать все на FireFox, предполагая, что запустится 2 инстанса FF.


(Виталий Коряков) #12

Нет, так 2 инстанса не запустится. Для разных браузеров скорее надо ковырять Selenium Grid. В данной ситуации попробуйте сделать еще один простенький тест и запустить в 2 потока. Должно работать.


(Vadim Kovrizhkin) #13

Таки да. Запустилось 2 теста, не совсем одновременно, но все же не по очереди:)
Спасибо большое.

Я все же надеялся, что это решит проблему с запуском теста сразу на нескольких браузерах.
У Вас нет случайно предположений, как это можно сделать?
например нельзя ли как-то сделать так, чтобы например такой командой запускать тест
py.test -n2 test1.py platform = WINDOWS, browser = CHROME, FIREFOX, SAFARI, IE – 1 команда
py.test -n2 test1.py platform = MAC, browser = CHROME, FIREFOX, SAFARI - 2 команда

затем создать две джобы в дженкинсе, чтобы каждая запускала тест на 1 платформе для нескольких браузеров:)


(Vadim Kovrizhkin) #14

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


(Alexander Petrovich) #15

И тут на сцену выходит отказ от unittest.TestCase (вообще не вижу причин вам его использовать, он накладывает некоторые ограничения на функционал pytest), и использование фикстур/параметризации тестов. Много-много чтива на этот счёт, например, здесь http://pytest.org/latest/example/parametrize.html

Я вам не могу привести простой пример своего когда из-за очень брутального взаимосвязанного огорода :slight_smile: Но на пальцах, я использую параметризованную фикстуру driver, и тесты выглядят так

def test_something(driver):
    driver.get(myurl)
    # lot's of code here

всё, что делается в ваших сетап и тиардаун методах спрятано как раз в driver. Ну и запускаю тесты с нужными параметрами командной строки (в том числе браузеры и платформы)


(Vadim Kovrizhkin) #16

Спасибо большое
Буду исследовать)

А unittest понравился тем, что похож на джавовский Junit. И после джавы было удобней переместиться на него.