Pytest: настроить автоматически сгенерированные имена тестов на основе смешанного приспособления и использования параметров - PullRequest
0 голосов
/ 28 апреля 2020

Вопрос: Могу ли я отсортировать использованные приборы и параметры?

Тест 1:

Допустим, у меня есть этот тест:

import pytest                                                                                                                          


@pytest.fixture(params=["a", "b"], ids=str)                                                                                            
def char(request):                                                                                                                     
    return request.param


@pytest.fixture(params=[1, 2], ids=int)
def number(request):
    return request.param


def test(char, number):
    print("fixture: {} - {}".format(char, number))

Вывод будет выглядеть так:

test_fixture.py::test[a-1] PASSED                                                                                               [ 25%]
test_fixture.py::test[a-2] PASSED                                                                                               [ 50%]
test_fixture.py::test[b-1] PASSED                                                                                               [ 75%]
test_fixture.py::test[b-2] PASSED                                                                                               [100%]

Тест 2:

Но если я смешаю использование приборов с такими параметрами:

import pytest


@pytest.fixture(params=[1, 2], ids=int)
def number(request):
    return request.param


@pytest.mark.parametrize("char", argvalues=["a", "b"], ids=str)
def test(char, number):
    print("mixed: {} - {}".format(char, number))

Тогда, вывод выглядит следующим образом:

test_mixed.py::test[1-a] PASSED                                                                                                 [ 25%]
test_mixed.py::test[1-b] PASSED                                                                                                 [ 50%]
test_mixed.py::test[2-a] PASSED                                                                                                 [ 75%]
test_mixed.py::test[2-b] PASSED                                                                                                 [100%]

Проблема в том, что в отчете о тесте неожиданно меняются символ и число. Я могу понять, что это связано с различными шагами, которые выполняет pytest для заполнения всех запрошенных параметров. Но есть ли способ форсировать определенный c ордер ?

Для некоторого фона у нас есть много существующих тестовых функций, адаптация одной функции с другим параметром не должна вызывать другое имя теста. Да, я также могу создать прибор для этого специфического теста c, но я хочу знать, какие есть другие варианты.

...