--
:
--
:
--
pytest 的基础语法
最后更新于:
第 1 章:pytest 的基础语法
📖 知识点:断言 (assert)
🎯 当前作用
pytest 直接使用 Python 内置的 assert 语句来验证测试结果是否符合预期。它的作用是检查某个条件是否为真,如果为假则测试失败并报告详细的信息。这是编写任何测试用例最核心的语句。
🤔 使用场景
- 验证计算结果:测试一个函数返回值是否等于期望值(如加法、排序等)。
- 检查布尔条件:验证某个状态是否为
True或False(如用户登录状态、开关是否开启)。 - 检查集合成员关系:判断某个元素是否在列表、字典、字符串中(如检查 API 返回的字段是否包含某个 key)。
- 比较对象:比较两个对象是否相等、大于、小于等(如比较两个字典是否一致)。
💻 案例演示
场景:我们有一个计算折扣价的函数 apply_discount(price, discount),需要验证它是否能正确计算折扣后的价格。
1. 编写被测函数和测试用例
1# test_discount.py
2
3def apply_discount(price, discount):
4 """计算折后价格
5 price: 原价
6 discount: 折扣率,如 0.8 表示八折
7 """
8 return price * discount
9
10def test_discount():
11 # 基本断言:等于
12 assert apply_discount(100, 0.8) == 80 # 八折后应为80元
13
14 # 不等于断言
15 assert apply_discount(50, 0.5) != 30 # 五折后25元,不等于30
16
17 # 布尔断言:折后价格应小于原价
18 result = apply_discount(200, 0.9)
19 assert result < 200 # 九折后180 < 200
20
21 # 成员关系断言:折扣后的价格是否在某个范围内
22 assert result in [180, 181, 179] # 180 在这个列表中
23
24def test_type():
25 # 测试返回类型是否为浮点数
26 result = apply_discount(100, 0.8)
27 assert isinstance(result, float)2. 故意让一个断言失败,体验 pytest 的失败报告
修改上面的 test_discount 函数,增加一个错误断言:
1def test_discount():
2 # ... 之前的断言保持不变 ...
3
4 # 故意写一个错误的断言
5 assert apply_discount(100, 0.8) == 79 # 实际是80,这里断言等于79会失败3. 运行测试并观察输出
1pytest test_discount.py -v失败的输出会类似这样(pytest 会智能地展示断言表达式中的值):
1=================================== FAILURES ===================================
2_______________________________ test_discount ________________________________
3
4 def test_discount():
5 # ... 之前的断言保持不变 ...
6
7 # 故意写一个错误的断言
8> assert apply_discount(100, 0.8) == 79
9E assert 80.0 == 79
10E + where 80.0 = apply_discount(100, 0.8)
11
12test_discount.py:15: AssertionError
13========================= 1 failed, 1 passed in 0.05s ==========================💡 说明:
- pytest 会显示失败的那一行,并给出
实际值和期望值的对比。- 它还会展示函数调用的中间结果(
apply_discount(100, 0.8)实际返回了80.0),这能极大地帮助定位问题。
4. 常用断言写法速查
| 断言类型 | 示例代码 |
|---|---|
| 相等 | assert a == b |
| 不等 | assert a != b |
| 真/假 | assert x is True 或 assert not x |
| 大于/小于 | assert a > b,assert c <= d |
| 包含 | assert item in collection |
| 类型检查 | assert isinstance(obj, MyClass) |
| 近似相等(浮点数) | assert abs(0.1 + 0.2 - 0.3) < 1e-9 |
💡 提示:对于浮点数,直接
assert 0.1 + 0.2 == 0.3可能会失败(浮点精度问题),建议使用近似比较或pytest.approx函数(后续会介绍)。
📚 本章小结
- 断言是测试的核心:每个测试函数至少应包含一个
assert语句。 - 失败即停止:当一个
assert失败时,该测试函数会立即终止,但其他测试函数会继续运行。 - pytest 的智能报告:它会自动显示断言表达式中的各个部分的值,减少调试时间。
- 可读性优先:建议使用清晰的断言表达式,必要时可以添加失败消息:
assert result == expected, f"期望{expected},实际{result}"。
📡
👤
作者:
阿海
🌐
版权:
本站文章除特别声明外,均采用
CC BY-NC-SA 4.0
协议,转载请注明来自
阿海 Blog!
- 01JMeter界面详解 2026-07-11
- 02性能测试学习路线 2026-07-11
- 03JMeter线程组配置详解 2026-07-11