- pytest数据参数化(数据量小的数据驱动)
1、基本形式:@pytest.mark.parametrize(argnames, argvalues)
argnames:要参数化的变量名,string(逗号分隔),list,tuple
argvalues:要参数化的变量值,list,list[tuple]
2、使用 string
class TestParams():
@pytest.mark.parametrize("a, b", [(10, 20), (10, 30)])
def test_param(self, a, b):
print(a + b)
3、使用 list
@pytest.mark.parametrize(["a", "b"], [(10,20), (10,30)])
def test_param(self, a, b):
print(a + b)
4、使用 tuple
@pytest.mark.parametrize(("a","b"),[(10,20), (10,30)])
def test_param(self, a, b):
print(a + b)
- yaml数据参数化(数据量大的数据驱动)
1、yaml实现列表
list: [(10, 20), (10, 30)]
-
- 10
- 20
-
- 10
- 30
2、yaml实现字典
dict: {by: id, locator: name, action: click}
by: id
locator: name
action: click
3、yaml进行嵌套(实现二维数组)
-
id: 1
name: company1
price: 200W
-
id: 2
name: company2
price: 500W
companies: [{id:1, name: company1, price:200W}, {id:2, name: company3, price:500W}]
- yaml 与pytest联用
1、yaml安装
方式一:命令 pip install pyyaml
方式二:在Pycharm的 Settings-Project Intepreter 中安装
2、加载yaml文件
yaml.safe_load(open("./data.yaml"))
@pytest.mark.parametrize(["a", "b"], yaml.safe_load(open("./data.yaml")))
def test_param(self, a, b):
print(a + b)
-
数据驱动 – 参数化的应用
– 数据驱动就是由数据的改变驱动自动化测试的执行,最终引起测试结果的改变。
– 数据量小:可使用 代码参数化 实现数据驱动
– 数据量大:使用结构化的文件(如yaml、json等)对数据进行存储,再在测试用例中读取
应用场景:APP、Web、接口自动化测试
①测试步骤的数据驱动
②测试数据的数据驱动
③配置的数据驱动
class TestDemo():
@pytest.mark.parametrize("env", yaml.safe_load(open("./env.yml")))
def test_demo(self, env):
if "test" in env:
print("这是测试环境")
# yaml文件为字典格式,读取时只能读取出key名;读取value需将文件数据改为列表格式
print("测试环境的ip是:", env["test"])
elif "dev" in env:
print("这是开发环境")
print("开发环境的ip是:", env["dev"])
def test_yaml(self):
print(yaml.safe_load(open("./env.yml")))