Day18在接口自动化测试中引入pytest用例管理框架

一、用例管理框架主要做了什么?

自动找到用例,默认三个规则: 规则一:模块名必须以 test_开头或_test 结尾 规则二:测试类必须以 Test 开头 规则三:测试方法必须以 test_开头

自动执行用例

自动判断结果(需要写断言)

自动生成报告

python 复制代码
1 pytest(pytest 本身单元框架)
2 pytest-html(生成 html 测试报告)
3 pytest-xdist(多线程运行)
4 pytest-ordering(控制用例的执行顺序)
5 pytest-rerunfailures(失败用例重复执行)
6 pytest-base-url(管理 base-url 基础路径的插件)
7 allure-pytest(生成美观的测试报告)

> 
> 补充知识点:pytest 执行顺序默认不是从上到下,需要 pytest-ordering 插件控制顺序。

运行run.pypytest.main()启动 pytest → 自动搜索test_开头文件和方法,执行所有用例 → 控制台打印每个用例状态. → 最后汇总:5 passed,全部用例通过

python 复制代码
if __name__ == '__main__':
    pytest.main()

作用:在当前 py 文件直接调用 pytest 框架,启动 pytest 运行。pytest 会自动扫描项目,按规则查找所有符合命名规范的测试模块、测试类、测试方法,自动执行全部用例。

二、pytest执行用例

1、pytest简单执行方式

运行run.pypytest.main()启动 pytest → 自动搜索test_开头文件和方法,执行所有用例 → 控制台打印每个用例状态. → 最后汇总:5 passed,全部用例通过。

python 复制代码
if __name__ == '__main__':
    pytest.main()

2、增加一些参数:

通过配置文件pytest.ini去增加一些参数,用来控制pytest执行过程中的一些细节(指定用例扫描目录、开启详细打印、放开 print 输出、简化报错堆栈;后续想改执行细节,只修改这个配置文件,不用改代码。)

python 复制代码
[pytest]
addopts = -vs
testpaths = ./testcases     #指定去哪里搜索测试用
python_files = test_*.py    #测试文件匹配规则:文件名必须以 `test_` 开头,才会被识别为测试文件。
python_classes = Test*      #测试类匹配规则:类名必须以 `Test` 开头,pytest 才把这个类当成测试类
python_functions = test_*   #测试方法匹配规则:方法名必须以 `test_` 开头,才会被识别成可执行的测试用例。
python 复制代码
[pytest]
# addopts:自动追加pytest命令行参数,多个参数空格隔开
# -v:verbose 详细模式,打印每条用例名字、执行结果PASSED/FAILED
# -s:关闭输出捕获,代码里print()打印的内容可以正常在控制台显示
# --tb=short:失败时精简报错堆栈,只展示核心错误,减少冗余信息
# --reruns=2:用例失败自动重跑2次(接口容易网络抖动场景)
# --reruns-delay=3:失败重跑前等待3秒再执行
# --html=report.html:执行结束自动生成html简易测试报告
# -W ignore::UserWarning:忽略无关警告,控制台更干净
addopts = -vs --tb=short --reruns=2 --reruns-delay=3 --html=report.html -W ignore::UserWarning

# testpaths:指定pytest去哪个目录查找测试用例
# ./testcases 代表当前项目根目录下的 testcases 文件夹
testpaths = ./testcases

# python_files:测试文件匹配规则
# 只识别 test_ 开头的 .py 文件作为测试文件,如test_api.py
python_files = test_*.py

# python_classes:测试类匹配规则
# 只识别 Test 开头的类作为测试类,如 TestApi、TestPhpwind
python_classes = Test*

# python_functions:测试方法匹配规则
# 类里面只有test_开头的方法,才会被当成测试用例执行,如test_login()
python_functions = test_*

3、如果只想执行部分的用例,需要三个步骤:

(1) 在 pytest.ini 里面通过 markers (变量名可随便起,所有步骤保持一致即可)定义标记。
(2) 在用例上面通过`@pytest.mark.smoke`定义这个用例是标记的用例
(3)在 pytest.ini 里面的 addopts 里面设置一个参数`-m smoke`来运行特定标记的用例。

举例1:仅执行冒烟用例

如下,仅执行冒烟用例

第一步:定义(红框)

第二步:设置冒烟(篮框)

第三步:运行时加入参数(绿框)

举例2:分模块运行

每个模块加一个文件夹

总结:一般通过路径和标记组合去判断我们要执行哪些用例

三、pytest自动判断结果--断言

python 复制代码
assert "access_token" in res.text
  • `res.text`:接口返回的**原始字符串响应文本**(微信接口返回的 json 字符串)

  • `"access_token" in res.text`:判断字符串 `access_token` 是否存在于返回的响应内容里面

  • `assert`:断言。**如果条件成立 → 用例通过;条件不成立 → 抛出异常,标记这条测试用例失败一句话:检查接口返回的结果里,是否包含 access_token 这个关键字

四、自动生成报告

python 复制代码
 --html=./reports/report.html

功能:执行 pytest 测试结束后,自动生成 HTML 网页格式的测试报告。

注意:每次运行脚本,新生成的`report.html`会直接覆盖上一次的旧报告。

打开方式:运行完成后,在 reports 文件夹找到 report.html,双击,浏览器打开,就能看到用例执行情况:成功、失败、失败原因、执行耗时。

相关推荐
llilian_1617 小时前
北斗授时卡同步解决方案 gnss授时卡 计算机时间同步板卡
大数据·网络·人工智能·功能测试·51单片机
奶油喜多多19 小时前
高并发场景下教务管理系统的架构设计:从单体到微服务的演进之路
需求分析
白远山20 小时前
自助健身小程序源码:架构拆解、核心链路与本地部署实战
java·架构·uni-app·需求分析
云沛科技21 小时前
全工况整车雨雾气象模拟试验舱 整车密封与智能感知环境验证设备
功能测试·汽车
PhotonixBay21 小时前
增材制造表面粗糙度测量:3D共聚焦多尺度方法
功能测试·测试工具·共聚焦显微镜·增材制造·测试标准
白远山1 天前
无人自助健身平台搭建:从架构设计到设备联动的完整实战
java·开发语言·架构·需求分析
一孤程1 天前
游戏测试专题第五篇:游戏兼容性测试与多端适配
游戏·测试
m0_587383001 天前
本地同城无人机作业接单系统源码:架构拆解与抢单调度实现
java·小程序·架构·需求分析
白远山2 天前
家政服务家政社区派单实战:调度系统架构设计与实现指南
java·开发语言·小程序·架构·需求分析