这是我编写测试的方式:
**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 ....]
我希望能够根据ID列表中ID的数目自动触发运行以test_
开头的所有测试的运行。如下图
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
我要:
我该怎么做?
我不知道ID的列表,因为ID的变化并且不是恒定的,因此在每次测试之前都要做pytest.mark.parameterize()。
答案 0 :(得分:0)
答案 1 :(得分:0)
您可以使用@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)