Как параметризовать функцию теста: Pytest? - PullRequest
0 голосов
/ 02 мая 2018

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

import pytest

@pytest.fixture
def List_of_Numbers():
    list = [1,2,3,4,5,6,7,8]


@pytest.parametrize("number", [i for item in list])
def test_eval(number):
    assert eval(number%2) == 0

pytest выход:

==================================== ERRORS ====================================
_________________________ ERROR collecting sample4.py __________________________
sample4.py:8: in <module>
@pytest.parametrize("number", [i for item in list])
E   AttributeError: module 'pytest' has no attribute 'parametrize'
 !!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!
=========================== 1 error in 0.30 seconds ============================

1 Ответ

0 голосов
/ 15 февраля 2019

У вас проблема с кодом:

  1. Светильник должен быть не @pytest.parametrize, а @pytest.mark.parametrize:
    @pytest.mark.parametrize("number", [i for item in list])
    def test_eval(number):
        assert eval(number%2) == 0
  1. Вы пытаетесь достичь переменной list, определенной в локальной области видимости другой функции. Лучше не использовать имена переменных и функций, зарезервированные для встроенных переменных и функций в Python в соответствии со здравым смыслом и PEP-8 . Вам не нужен дополнительный прибор только для списка чисел без какой-либо логики. Я предлагаю вам использовать константу вместо:

    TEST_NUMBERS = [1, 2, 3, 4, 5, 6, 7, 8]

Собираем все вместе:

import pytest


TEST_NUMBERS = [1, 2, 3, 4, 5, 6, 7, 8]


@pytest.parametrize("number", TEST_NUMBERS)
def test_eval(number):
    assert eval(number % 2) == 0

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