pytest 参数化测试
使用的工具 pytest.mark.parametrize(argnames, argvalues)
。
- argnames表示参数名。
- argvalues表示列表形式的参数值。
使用以装饰器的形式使用。
只有一个参数的测试用例
import pytest
user_name = ['chenjiaxing', 'lijiacheng']
@pytest.mark.parametrize('user_name', user_name)
def test_login_01(user_name):
""" 通过用户名登录 """
print('注册用户名是: {}'.format(user_name))
运行结果
test.py::test_login_01[chenjiaxing] PASSED [ 50%]注册用户名是: chenjiaxing
test.py::test_login_01[lijiacheng] PASSED [100%]注册用户名是: lijiacheng
========================== 2 passed in 0.05 seconds ===========================
Process finished with exit code 0
多个参数的测试用例
方式一:
import pytest
user_name = ['chenjiaxing', 'lijiacheng']
pwd_list = ['D6YFH', 'ww5FK']
@pytest.mark.parametrize('user_name', user_name)
@pytest.mark.parametrize('pwd', pwd_list)
def test_login_02(user_name, pwd):
""" 通过手机号注册 """
print('注册手机号是: {} 验证码是: {}'.format(user_name, pwd))
运行结果
test.py::test_login_02[D6YFH-chenjiaxing] PASSED [ 25%]注册手机号是: chenjiaxing 验证码是: D6YFH
test.py::test_login_02[D6YFH-lijiacheng] PASSED [ 50%]注册手机号是: lijiacheng 验证码是: D6YFH
test.py::test_login_02[ww5FK-chenjiaxing] PASSED [ 75%]注册手机号是: chenjiaxing 验证码是: ww5FK
test.py::test_login_02[ww5FK-lijiacheng] PASSED [100%]注册手机号是: lijiacheng 验证码是: ww5FK
========================== 4 passed in 0.19 seconds ===========================
Process finished with exit code 0
方式二:
import itertools
import pytest
user_name = ['chenjiaxing', 'lijiacheng']
pwd_list = ['D6YFH', 'ww5FK']
@pytest.mark.parametrize('user_name,pwd', list(itertools.product(user_name, pwd_list)))
def test_login_03(user_name, pwd):
""" 通过用户名登录 """
print('注册用户名是: {} 密码是: {}'.format(user_name, pwd))
运行结果
test.py::test_login_03[chenjiaxing-D6YFH] PASSED [ 25%]注册用户名是: chenjiaxing 密码是: D6YFH
test.py::test_login_03[chenjiaxing-ww5FK] PASSED [ 50%]注册用户名是: chenjiaxing 密码是: ww5FK
test.py::test_login_03[lijiacheng-D6YFH] PASSED [ 75%]注册用户名是: lijiacheng 密码是: D6YFH
test.py::test_login_03[lijiacheng-ww5FK] PASSED [100%]注册用户名是: lijiacheng 密码是: ww5FK
========================== 4 passed in 0.05 seconds ===========================
Process finished with exit code 0
方式一和方式二运行结果是一样,可以看到,每一个用户名与每一个密码一一对应组合,如果有很多个组合的话,用例数将会更多,不用写那么多用例就可以轻松实现,happy~