[created_at: 2020-06-11]
引言:一个功能的测试用例,可能有很多不同的参数验证场景,可以直接在脚本中按参数值写各自的测试函数,这样需要写很多,如果通过参数化,就可以只写一段验证脚本即可,也可以脚本与数据分离,使用文件存储参数
pytest中使用参数化
使用pytest装饰器:@pytest.mark.parametrize
-
@pytest.mark.parametrize(argnames,argvalues)
argnames
:要参数化的变量的名称,
可以是string类型,参数名用逗号分隔
可以是list类型(列表),元素是string类型
可以是tuple类型(元组),元素是string类型
argvalues
:对应的参数化的值,是列表类型,列表里面多组参数的可以用列表或元组分组
import pytest
def func(x):
return x + 1
#一组参数,变量是元组
@pytest.mark.parametrize(('a','b'),[(1,2)])
def test_answer4(a,b):
assert func(a) == b
#多组参数,变量是string,值是列表,列表里面是元组
@pytest.mark.parametrize('a,b',[(1,2),(2,4)])
def test_answer2(a,b):
assert func(a) == b
#多组参数,变量是列表
@pytest.mark.parametrize(["a","b"],[(3,2),(3,4)])
def test_answer3(a,b):
assert func(a) == b
yaml文件存储/读取参数
使用yaml需要安装的库是pyyaml
导入的模块是yaml
yaml文件后缀名是.yml
#yaml文件存储list如下格式
-
- 1
- 2
-
- 2
- 3
-
- 6
- 7
import pytest
import yaml
def func(x):
return x + 1
#读取yaml文件的参数
@pytest.mark.parametrize(["a","b"],yaml.safe_load(open("./data_b.yml")))
def test_answer(a,b):
assert func(a) == b