gpt4 book ai didi

python - 如何参数化测试函数 : Pytest?

转载 作者:行者123 更新时间:2023-11-28 20:13:41 25 4
gpt4 key购买 nike

如何使用 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. fixture 不应该是@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。根据常识和PEP-8,最好不要使用Python中为内置变量和函数保留的变量和函数名称。 .对于没有任何逻辑的数字列表,您不需要额外的固定装置。我建议您改用常量:

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

  2. 您需要将一个字符串传递给eval:

eval(f"{number} % 2")

综合起来:


import pytest


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


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

关于python - 如何参数化测试函数 : Pytest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50143217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com