pytest 测试框架实战训练营
pytest 用例识别与规范
- 测试文件
- test_*.py
- *_test.py
- 用例识别
- Test*类包含的所有test_*的方法(测试类不能带有__init__方法)
- 不在class中的所有的test_*方法
- pytest也可以执行unittest框架写的用例和方法
测试用例的识别与运行
-
终端执行
- pytest/py.test
- pytest –v (最高级别信息–verbose) 打印详细运行日志信息
- pytest -v -s 文件名 (s是带控制台输出结果,也是输出详细)
- pytest 文件名.py 执行单独一个pytest模块
- pytest 文件名.py::类名 运行某个模块里面某个类
- pytest 文件名.py::类名::方法名 运行某个模块里面某个类里面的方法
- 报错停止运行
- pytest -x 文件名 一旦运行到报错,就停止 运行
- pytest - -maxfail=[num] 当运行错误达到num的时候就停止 运行
- pytest -k "类名 and not 方法名” 执行某个关键字的用全
- pytest -m [标记名] @pytest.mark.[标记名] 将运行有这个标记的测试用例
pycharm 执行 配置
参数化与数据驱动
- 概念
- 参数化?
- 待测试的输入和输出是一组数据, 可以把测试数据组织起来,用不同的测试数据调用相同的测试方法
- 数据驱动?
- 数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。
- 参考代码:
"""
__author__ = 'hogwarts_xixi'
__time__ = '2021/2/24 8:51 下午'
"""
import pytest
import yaml
def add(a, b):
return a + b
def get_data():
with open("./datas.yml") as f:
# yaml.safe_load 将yaml 数据格式 加载成python数据对象
datas = yaml.safe_load(f)
return datas
def test_get_datas():
print(get_data())
# json, excel, xml, yaml
@pytest.mark.parametrize(['a','b','expect'],get_data(),ids=["int","int1","int2","int3"])
def test_add_int(a,b,expect):
assert expect == add(a,b)
@pytest.mark.parametrize("a,b,expect",[
[0.1,0.1,0.2],[0.1,0.2,0.3]
])
def test_add_float(a,b,expect):
assert round(add(a,b),2) == expect
# Decial hamcrest
def test_add_minus():
pass
思考题
参数化,跟 将测试数据写在一个测试文件中进行for循环有什么区别?
接口实战
@pytest.mark.parametrize("topic_id",[10232,10222,10212])
def test_ceshiren(topic_id):
result = requests.get(f"https://ceshiren.com/t/topic/{topic_id}.json")
# print(result.json()['id'])
assert topic_id == result.json()['id']
课后作业
找个自己公司的接口,或者使用 测试人论坛(20210224【pytest测试框架实战训练营】最火python 测试框架与接口测试技巧),回复贴子,找到自己的姓名,并验证,使用参数化功能,验证多个回复人的姓名