Pytest: запуск всех тестов на основе количества раз, указанного в config.ini - PullRequest
0 голосов
/ 18 января 2019

Вот как у меня написаны тесты:

**config.ini**
idlist: 1

Class MyConfig:
   def __init__(self):
      self.id = config.idlist
      ....

**conftest.py**
@pytest.fixture(scope='module')
def obj()
    myobj = new MyConfig()
    yield myobj

@pytest.fixture(scope='module')
def get_id(obj)
    yield obj.id

**test_mytests.py**
def test_a_sample_test(get_id):
     assert get_id == 1

def test_a_sample_even test(get_id):
     assert get_id % 2 == 0

Теперь я хочу изменить idlist (из config.ini) на список номеров, как показано ниже idlist = [1, 2, 3, 4, ....]

Я хочу иметь возможность автоматически запускать прогон для запуска всех тестов, которые начинаются с test_ в зависимости от количества идентификаторов в idlist. как показано ниже

new config.ini
idlist: id1, id2, id3, id4, ... idN

def get_id(obj):
    for anId in obj.id
        yield anId          **<--- notice that the id's change.**

наконец тесты ..

**test_mytests.py**
def test_a_sample_test(get_id):
     assert get_id == 1

def test_a_sample_even test(get_id):
     assert get_id % 2 == 0

Я хочу:

  1. Вызывать get_id, чтобы каждый раз выдавать мне новый идентификатор
  2. 2 теста должны выполняться для каждого идентификатора, «полученного» get_id, так как идентификатор изменился. (в основном, повторите весь набор тестов / сессию для каждого идентификатора)

Как я могу это сделать?

Я не знаю список идентификаторов, чтобы сделать pytest.mark.parameterize () перед каждым тестом, так как идентификатор изменяется и не является постоянным.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Вы можете использовать параметризационные тестовые функции @pytest.mark.parametrize:

Встроенный декоратор pytest.mark.parametrize обеспечивает параметризацию аргументов для тестовой функции.Вот типичный пример тестовой функции, которая реализует проверку того, что определенный ввод приводит к ожидаемому выводу

# take the following example and adjust to your needs

import pytest
@pytest.mark.parametrize("_id,expected", [
    (1, False),
    (2, True),
    (3, False),
])
def test_a_sample_even(_id, expected):
    assert expected == is_even(_id)
0 голосов
/ 18 января 2019

pytest.fixtures занимает список params:

params - необязательный список параметров, который вызывает многократные вызовы функции фикстуры и всех тестов, использующих ее.

Примеры здесь

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