Параметризованный порядок выполнения метода класса pytest - PullRequest
0 голосов
/ 05 сентября 2018

Например, у меня есть такой файл pytest:

@pytest.mark.parametrize("param",[1,2])
class TestTest():
    def test_1(self, param):
        pass
    def test_2(self,param):
        pass

когда я запускаю его как вывод, я получаю:

test_tmp.py::TestTest::test_1[1]
test_tmp.py::TestTest::test_1[2]
test_tmp.py::TestTest::test_2[1]
test_tmp.py::TestTest::test_2[2]

Это не тот порядок, которого я ожидаю. Есть ли способ запустить тесты в следующем порядке:

test_tmp.py::TestTest::test_1[1]
test_tmp.py::TestTest::test_2[1]
test_tmp.py::TestTest::test_1[2]
test_tmp.py::TestTest::test_2[2]

например. запустить все методы класса с первым параметром, а затем запустить со вторым параметром.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

В вашем случае речь идет о порядке применения разных параметров к разным тестам. Pytest запускает каждый тест со всеми параметрами и после этого следующего теста и т. Д.

Если по каким-либо причинам вам нужно запустить два теста с одним и тем же параметром, после этого запустить их с другим параметром и т. Д., Я думаю, это означает, что на самом деле это всего лишь один сложный тест с параметрами, вы не должны писать это как два отдельных теста pytest.

Как правило, вы можете использовать pytest-ordering для заказа самих тестов. Или реализуйте ту же функциональность самостоятельно в pytest hook

pytest_collection_modifyitems(session, config, items)

(переставить элементы).

Но не стоит ожидать, что тесты будут выполняться в определенном порядке. Они должны быть лицами без гражданства и независимыми. В конце концов, возможно, вам понадобится параллельное выполнение теста или использование некоторого подмножества ваших тестов. В любом случае, если тесты зависят от порядка выполнения, их трудно поддерживать.

Если вам нужны только упорядоченные результаты, используйте инструменты отчетности (например, yandex allure ).

0 голосов
/ 06 сентября 2018

Вам не нужно писать классы в py.test:

@pytest.mark.parametrize("param",[1,2])
def test_1(param):
    pass

@pytest.mark.parametrize("param",[1,2])
def test_2(param):
    pass

запустит тесты в требуемом порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...