- 通过参数的方式传递数据,从而实现数据和脚本分离。
- 并且可以实现用例的重复生成与执行。
-
1、pytest 参数化实现方法
- 装饰器:
@pytest.mark.parametrize
-
@pytest.mark.parametrize("username,password",[["right","right"], ["wrong","wrong"]]) def test_param(username,password): login(username,password
2、参数化:多参数情况
- 将数据放在列表嵌套元组中
- 将数据放在列表嵌套列表中
-
# 数据放在元组中 @pytest.mark.parametrize("test_input,expected",[ ("3+5",8),("2+5",7),("7+5",12) ]) def test_mark_more(test_input,expected): assert eval(test_input) == expected # 数据放在列表中 @pytest.mark.parametrize("test_input,expected",[ ["3+5",8],["2+5",7],["7+5",12] ]) def test_mark_more(test_input,expected): assert eval(test_input) == expected
3、参数化:用例重命名-添加 ids 参数
- 通过ids参数,将别名放在列表中
- 几个参数,就有几个别名。如果数量不等会报错
-
@pytest.mark.parametrize("test_input,expected",[ ("3+5",8),("2+5",7),("7+5",12) ],ids=['add_3+5=8','add_2+5=7','add_3+5=12']) def test_mark_more(test_input,expected): assert eval(test_input) == expected
4、参数化:用例重命名-添加 ids 参数(中文)
-
# 创建conftest.py 文件 ,将下面内容添加进去,运行脚本 def pytest_collection_modifyitems(items): """ 测试用例收集完成时,将收集到的用例名name和用例标识nodeid的中文信息显示在控制台上 """ for i in items: i.name=i.name.encode("utf-8").decode("unicode_escape") i._nodeid=i.nodeid.encode("utf-8").decode("unicode_escape")
@pytest.mark.parametrize("test_input,expected",[ ("3+5",8),("2+5",7),("7+5",12) ],ids=["3和5相加","2和5相加","7和5相加"]) def test_mark_more(test_input,expected): assert eval(test_input) == expected
5、参数化:笛卡尔积
- 两组数据
- a=[1,2,3]
- b=[a,b,c]
- 对应有几种组合形势 ?
- (1,a),(1,b),(1,c)
- (2,a),(2,b),(2,c)
- (3,a),(3,b),(3,c)
-
@pytest.mark.parametrize("b",["a","b","c"]) @pytest.mark.parametrize("a",[1,2,3]) def test_param1(a,b): print(f"笛卡积形式的参数化中 a={a} , b={b}")
参数
由近至远执行装饰器
-
pytest参数化测试用例
最新推荐文章于 2023-12-27 20:00:00 发布