一、用例管理框架主要做了什么?
自动找到用例,默认三个规则: 规则一:模块名必须以 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.py → pytest.main()启动 pytest → 自动搜索test_开头文件和方法,执行所有用例 → 控制台打印每个用例状态. → 最后汇总:5 passed,全部用例通过
python
if __name__ == '__main__':
pytest.main()
作用:在当前 py 文件直接调用 pytest 框架,启动 pytest 运行。pytest 会自动扫描项目,按规则查找所有符合命名规范的测试模块、测试类、测试方法,自动执行全部用例。
二、pytest执行用例
1、pytest简单执行方式
运行run.py → pytest.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,双击,浏览器打开,就能看到用例执行情况:成功、失败、失败原因、执行耗时。