Передача значений прибора Pytest - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь передать значения в прибор, потому что у меня в основном один и тот же код для многих тестов, но меняются только некоторые значения, поскольку я понимаю, что приборы Pytest не принимают это, но не совсем уверены, как это решить, дляНапример, у меня есть это:

import pytest


@pytest.fixture
def option_a():
    a = 1
    b = 2
    return print(a + b)


@pytest.fixture
def option_b():
    a = 5
    b = 3
    return print(a + b)


def test_foo(option_b):
    pass

вместо того, чтобы выбирать между параметром прибора a или параметром b, добавлять и вносить изменения, и единственное, что меняется, - это значения, могу ли я иметь один прибор, где я могу установить, какие значения яхотите запустить на test_foo?

заранее спасибо.

1 Ответ

0 голосов
/ 08 июня 2018

Пример, который вы привели, настолько прост, что вам не нужны светильники.Вы просто сделаете:

import pytest

@pytest.mark.parametrize("a,b,expected", [
    (1,2,3),
    (5,3,8),
])
def test_foo(a, b, expected):
    assert a + b == expected

Подробнее см. https://docs.pytest.org/en/3.6.1/parametrize.html

Однако, я собираюсь предположить, вы просто упростили это так, как часть создания MCVE .В этом случае вы должны сделать следующее:

@pytest.fixture(params=[(1 , 2, "three"), (5,3,"eight")])
def option_a_and_b(request):
    a, b, word = request.param
    return a + b, word

def test_foo(option_a_and_b):
    total, word = option_a_and_b
    if total == 3:
        assert word == "three"
    elif total == 8:
        assert word == "eight"
    else:
        assert False

def test_bar(option_a_and_b):
    pass

Если вы запустите этот код, вы заметите 4 прохождения тестов, потому что каждый тест, который получает этот прибор, будет выполняться для каждого param.

Подробнее см. https://docs.pytest.org/en/3.6.1/fixture.html#fixture-parametrize.

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