Как запустить тест pytest для каждого элемента в списке аргументов - PullRequest
1 голос
/ 25 июня 2019

Предположим, у меня есть список URL-адресов HTTP, таких как

endpoints = ["e_1", "e_2", ..., "e_n"]

И я хочу запустить n тесты, по одному для каждой конечной точки.Как я могу это сделать?

Простой способ протестировать все конечные точки одновременно:

def test_urls():
    for e in endpoints:
        r = get(e)
        assert r.status_code < 400

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

Я попытался использовать прибор, такой как

@fixture
def endpoint():
    for e in endpoints:
        yield e

но, по-видимому, Pytest на самом деле не любит «множественные выходы» в фиксаторе и возвращает yield_fixture function has more than one 'yield' error

1 Ответ

1 голос
/ 26 июня 2019

Следуя примеру в Параметризация приборов и функций тестирования , вы можете выполнить тест следующим образом:

import pytest

endpoints = ['e_1', 'e_2', ..., 'e_n']

@pytest.mark.parametrize('endpoint', endpoints)
def test_urls(endpoint):
    r = get(endpoint)
    assert r.status_code < 400

Это будет выполнено test_urls n раз, один раз для конечной точки:

test_spam::test_urls[e_1] PASSED
test_spam::test_urls[e_2] PASSED
...
test_spam::test_urls[e_n] PASSED
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...