使用场景
当待测试的输入输出是一组数据时,可以将测试数据组织起来调用相同的测试方法。
即:将不同的参数,写入集合中,程序自动调用集合中的数据,直到集合为空。
parametrize()使用方法
单次使用
同一个测试用例只添加一个@pytest.mark.parametrize()。
@pytest.mark.parametrize("test_input,expected",[("3+5",8),("2+5",7)])
def test_eval(self,test_input,expected):
# eval 将字符串当成表达式执行
assert eval(test_input) == expected
使用@pytest.mark.parametrize装饰器实现参数化。
parametrize(‘data’, param):"test_input,expected"是自定义的参数名,多个参数名之前以逗号隔开;
[(“3+5”,8),(“2+5”,7)]是传入的参数列表。
将自定义的参数名传入测试用例,即可调用参数。
运行结果:
多次使用
同一个测试用例只添加多个@pytest.mark.parametrize(),多个parametrize之间的元素互相组合(类似笛卡尔乘积),生成大量的测试用例。
@pytest.mark.parametrize("x", [1,3])
@pytest.mark.parametrize("y", [2, 4, 6])
def test_eval(self, x, y):
print(f"测试数据组合x:{x},y:{y}")
运行结果:
@pytest.fixture与@pytest.mark.parametrize结合
使用场景
测试数据需要在fixture方法中使用,同时也需要在测试用例中使用
使用方法
添加参数indirect=True
@pytest.mark.parametrize(‘login_r’,test_user_data,indirect=True)
test_user_data = ['xiaoming','wangmeimei']
@pytest.fixture(scope='module')
def login_r(request):
# 使用request.par接收参数
user = request.test_user_data
print(f"\n用户为:{user}")
return user
# 当indirect=True时,将test_user_data作为参数传入函数login_r中
@pytest.mark.parametrize('login_r',test_user_data,indirect=True)
def test_login(self,login_r):
a = login_r
print(f"login返回值是:{a}")
执行结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。