自动化测试之 pytest 的使用03
1.6 使用parametrize实现参数化
parametrize(argsnames , argsvalues)
主要参数说明:
argsnames :参数名,是个字符串,如中间用逗号分隔则表示为多个参数名。
argsvalues :参数值,参数组成的列表,列表中有几个元素,就会生成几条用例。
使用方法:
使用 @pytest.mark.paramtrize(‘data’, param) 装饰测试方法, 将值param传给data, 测试用例中就可以使用data.
示例:
# 创建文件test_parametrize.py
import pytest
@pytest.mark.parametrize('x,y,z',[('tom','jack','rose'),(
'嘿嘿','哈哈','嘻嘻')])
def test_case18(x,y,z):
print('执行test_case18')
print('get data:x={0},y={1},z={2}'.format(x,y,z))
assert x!='smith'
assert y!='呵呵'
if __name__== '__main__':
args=['-s','-q','test_parametrize.py']
pytest.main(args)
运行结果:
每个字符串有对应的值。
测试用例接收字符串参数,字符串参数个数要与列表中元素个数相同
执行test_case18
get data:x=tom,y=jack,z=rose
.执行test_case18
get data:x=嘿嘿,y=哈哈,z=嘻嘻
.
2 passed in 0.01s
1.7 多次使用parametrize
同一个测试用例同时添加多个 @pytest.mark.parametrize 装饰器, 多个 parametrize 的所有元素互相组合(类似笛卡儿乘积),生成大量测试用例。
场景:比如登录场景,用户名输入情况有 n 种,密码的输入情况有 m 种,希望验证用户名和密码,就会涉及到 n*m 种组合的测试用例,如果把这些数据一一的列出来,工作量巨大。pytest 提供了一种参数化的方式,将多组测试数据自动组合,生成大量的测试用例。
示例:
6个用户名,5个密码,共有30种不同的组合,可以通过装饰器完成这种组合测试。
@pytest.mark.parametrize('username',[
'tom','smith','jack','lilei','danny','siri'])
@pytest.mark.parametrize('password',[
'a123','aaab','1123','a11b','6325'])
def test_case19(username,password):
print('\n 执行test_case19')
print('用户名= {0},密码= {1}'.format(username,password))
assert username != 'tom'
assert password != 'aaab'
if __name__== '__main__':
args=['-s','-q','test_parametrize.py']
pytest.main(args)
运行结果:
通过20个用例,10个未通过。
执行test_case19
用户名= tom,密码= a123
F
执行test_case19
用户名= smith,密码= a123
.
执行test_case19
用户名= jack,密码= a123
.
执行test_case19
用户名= lilei,密码= a123
.
执行test_case19
用户名= danny,密码= a123
.
执行test_case19
用户名= siri,密码= a123
.
执行test_case19
用户名= tom,密码= aaab
F
执行test_case19
用户名= smith,密码= aaab
F
执行test_case19
用户名= jack,密码= aaab
F
执行test_case19
用户名= lilei,密码= aaab
F
执行test_case19
用户名= danny,密码= aaab
F
执行test_case19
用户名= siri,密码= aaab
F
执行test_case19
用户名= tom,密码= 1123
F
执行test_case19
用户名= smith,密码= 1123
.
执行test_case19
用户名= jack,密码= 1123
.
执行test_case19
用户名= lilei,密码= 1123
.
执行test_case19
用户名= danny,密码= 1123
.
执行test_case19
用户名= siri,密码= 1123
.
执行test_case19
用户名= tom,密码= a11b
F
执行test_case19
用户名= smith,密码= a11b
.
执行test_case19
用户名= jack,密码= a11b
.
执行test_case19
用户名= lilei,密码= a11b
.
执行test_case19
用户名= danny,密码= a11b
.
执行test_case19
用户名= siri,密码= a11b
.
执行test_case19
用户名= tom,密码= 6325
F
执行test_case19
用户名= smith,密码= 6325
.
执行test_case19
用户名= jack,密码= 6325
.
执行test_case19
用户名= lilei,密码= 6325
.
执行test_case19
用户名= danny,密码= 6325
.
执行test_case19
用户名= siri,密码= 6325
.
================================== FAILURES ===================================
____________________________ test_case19[a123-tom] ____________________________
username = 'tom', password = 'a123'
@pytest.mark