Генерация метода динамического pytest только с произвольным именем

Привет, я пробую следующий пример, упомянутый в документации по pytest,

# content of test_expectation.py
@pytest.mark.parametrize("test_input,expected", [
("3+5", 8),
("2+4", 6),
("6*9", 42),
])
def test_eval(test_input, expected):
    assert eval(test_input) == expected

Когда я запускаю с помощью py.test -v, это дает мне вывод, как показано ниже,

test_code.py::test_eval[3+5-8] PASSED
test_code.py::test_eval[2+4-6] PASSED
test_code.py::test_eval[6*9-42] FAILED

Здесь, когда я генерирую html-отчеты, имена слишком длинные, когда я использую очень длинные входные данные.

В приведенном выше примере, чтобы не брать 1-й результат, имя метода будет [3+5-8]. то есть он взял кортеж (3+5,8) и прикрепил его к фактическому имени метода тестового примера.

Теперь в моем случае кортеж ("короткое имя", "очень длинная строка") вместо (3+5,8), поэтому в моем html-отчете показывается очень долго. Можно ли показать только "короткое имя", а не 2-е значение?

1 ответ

Решение

Не могли бы вы вставить текущее отображаемое длинное имя и ожидаемое короткое имя, чтобы ваш вопрос прояснился. На всякий случай, если это поможет, вы можете использовать поле "ids" в @ pytest.mark.parametrize для настройки отображаемого имени теста с параметризованными значениями.

для е, г

@pytest.mark.parametrize("test_input,expected", [
("3+5", 8), 
("2+4", 6),
("6*9", 42),
], ids=['cust_name_1', 'cust_name_2', 'cust_name_3'])
def test_eval(test_input, expected):
...

будет отображать ваше имя теста как

test_code.py::test_eval[cust_name_1] PASSED
test_code.py::test_eval[cust_name_1] PASSED
test_code.py::test_eval[cust_name_1] FAILED
Другие вопросы по тегам