续上一篇,本章节讲参数化以及fixture
在测试过程中,我们经常会遇到一个接口或者业务过程需要重复不同传参的情况,pytest也是可以使用
装饰器@pytest.mark.parametrize来满足这种需求,例子如下
import pytest
def add_demo(a, b):
return a+b
@pytest.mark.smoke
class TestDemo:
@pytest.mark.parametrize("a,b,expected", [(3, 5, 8),
(-1, -2, -3),
(100, 200, 300), ],
ids=["level1", "level2", "level3"])
def test_add_demo(self, a, b, expected):
assert add_demo(a, b) == expected
if __name__ == "__main__":
pytest.main(['test_demo1.py', '-m', 'smoke'])
运行方式不再多说,看到如上编写方式,大家应该会觉得这样硬编码不太好,所以我们可以把数据的读取这一块提取出来,重新封装
新建一个数据读取文件get_data.py,我们使用yaml文件的方式当做数据源,其他方式比如excel或者从数据库中取都是类似的
get_data.py代码如下,
import yaml def get_data(): return yaml.safe_load(open('data.yaml'))
整改后的test_demo.py代码如下:
import pytest from get_data import get_data def add_demo(a, b): return a+b @pytest.mark.smoke class TestDemo: @pytest.mark.parametrize("a,b,expected", get_data(), ids=["level1", "level2", "level3"]) def test_add_demo(self, a, b, expected): assert add_demo(a, b) == expected if __name__ == "__main__": pytest.main(['test_demo1.py', '-v', '-m', 'smoke'])
具体的yaml文件编写规则格式如下:
- 大小写敏感
- 使用缩进表示层级关系,只要是左边对齐的一列数据都是同一个层级的
- 数据值前边必须有空格,作为分隔符,否则无法识别该字段值为一个属性(比如 port: 8082,8082前边必须最少有一个空格,可以有多个)
- 禁止使用tab缩进,只能使用空格键
- 字符串可以用也可以不用引号引起来
- 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。
- 使用 # 表示注释
基本数据例子如下:
常量
server: ip: 127.0.0.1
列表:
list_number:
-
- 2 - 3 - 4 - - 0 - 3 - 5
字典
student: name: lisi age: 14 home: sz
其他如json或者从数据库中取数据的方式都可以单独封装在get_data.py文件里,使用类或者函数都可以。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。