pytest参数化 parametrize
参数化的本质是对列表中的对象进行循环,然后把循环的对象进行一一的赋值,它的应用场景主要是基于相同的业务场景,但是需要不同的测试数据来测试从而达到最大化的覆盖更多的业务场景和测试的覆盖率。理解了这样的一个思想之后,我们就以两个数想加作为案例,来演示Pytest测试框架的参数化实际应用,另外一点需要特别说的是在Pytest测试框架中参数化使用的方式是通过装饰器的方式来进行。刚才也说到它的本质是对列表中的对象进行循环和赋值,那么这个对象可以是列表,也可以是元祖以及和字典数据类型,见如下的实战案例,把测试的数据分离到不同的对象中(列表,元组,字典),源码如下:
#!/usr/bin/env python
#!coding:utf-8
import pytest
def add(a,b):
return a+b
# ------------------ 参数化数据为 列表 ----------------------
@pytest.mark.parametrize("a, b, expect", [
[1, 1, 2],
[2, 4, 6],
[4, 5, 9],
[6, 2, 8]
])
def test_add_list_success(a, b, expect):
assert add(a, b) == expect
@pytest.mark.parametrize("a, b, expect", [
[1, 1, 3],
[2, 4, 5]
])
def test_add_list_fail(a, b, expect):
assert add(a, b) != expect
# ------------------ 参数化数据为 元组 ----------------------
@pytest.mark.parametrize("a, b, expect", [
(1, 1, 2),
(2, 4, 6)
])
def test_add_tuple_success(a, b, expect):
assert add(a, b) == expect
@pytest.mark.parametrize("a, b, expect", [
(1, 1, 3),
(2, 4, 5)
])
def test_add_tuple_fail(a, b, expect):
assert add(a, b) != expect
# ------------------ 参数化数据为 字典 ----------------------
@pytest.mark.parametrize("dict", [
{"a": 1, "b": 2, "expect": 3},
{"a": 2, "b": 4, "expect": 6},
])
def test_add_dict_success(dict):
assert add(dict['a'], dict['b']) == dict['expect']
@pytest.mark.parametrize("dict", [
{"a": 1, "b": 2, "expect": 4},
{"a": 2, "b": 4, "expect": 5},
])
def test_add_dict_fail(dict):
assert add(dict['a'], dict['b']) != dict['expect']
main.py 文件
#
import pytest
if __name__ == '__main__':
# pytest.main(["-v","test_demo.py"]) # 调用pytest的main函数执行测试
pytest.main(["-v", './testcase/paramscase/']) # 调用pytest的main函数执行测试
执行 main.py 文件
python main.py
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)