pytest 框架
理解 pytest 的优势与核心定位
掌握 pytest 的用例规范与运行方式
能编写标准的 pytest 测试用例并生成报告
核心讲解
pytest 是 Python 最主流的单元测试 / 自动化测试框架,功能强大、插件丰富、简单灵活,是企业自动化测试的标准框架。
(1)为什么选 pytest语法简单,比 unittest 更简洁
插件生态极其丰富,几乎所有需求都有对应插件
兼容 unittest 脚本,可以无缝迁移
强大的断言,自动对比详细信息
支持参数化、固件、标记、失败重跑等高级功能
文件:必须以
test_开头,或者_test.py结尾类:必须以
Test开头,不能有__init__方法函数 / 方法:必须以
test_开头断言:直接用 Python 原生的
assert
命令行运行:
pytest 文件名.py,最常用主函数运行:代码里
pytest.main()IDE 运行:PyCharm 直接点击运行
-v:详细输出每个用例的结果-s:输出 print 的内容-k "关键词":只运行包含关键词的用例-x:遇到失败就停止--html=报告名.html:生成 HTML 测试报告-m 标记名:运行指定标记的用例
代码示例
# test_demo.py
import pytest
# 函数形式的用例
def test_add():
assert 1 + 1 == 2
def test_subtract():
assert 5 - 3 == 2
# 类形式的用例
class TestLogin:
def test_login_success(self):
username = "admin"
password = "123456"
assert username == "admin"
assert len(password) >= 6
def test_login_fail(self):
password = "123"
assert len(password) < 6
# 主函数运行
if __name__ == "__main__":
# 运行当前文件,生成报告
pytest.main(["-v", "-s", "--html=report.html"])
运行命令:
pytest test_demo.py -v -s
常见误区
用例命名不符合规范:文件、类、函数名不符合规则,pytest 收集不到用例
断言只写布尔值:
assert a == b比assert (a==b) == True更好,失败会显示详细差异测试类加__init__:Test 类不能有构造函数,否则 pytest 会跳过
报告插件没安装:
--html需要先安装pytest-html插件
课后练习
编写 3 个测试用例,分别测试加法、减法、乘法
用命令行运行,只运行包含 “add” 的用例
安装 pytest-html,生成 HTML 格式的测试报告

