你改了一行 calc_price 的折扣逻辑,本地跑了一下觉得没问题,提交、合并、上线。三天后客服反馈"VIP 下单金额算错了"。你翻回代码才想起,那天只手测了普通用户,VIP 的 0.95 倍率分支根本没碰过。这种事我经历过不止一次,后来把 pytest 塞进每个项目的提交前检查,类似的低级回归再没漏到线上。
本文基于 Python 3.9+、pytest 8.x(2026 年稳定主线,支持 3.9+)写成,所有示例都能直接跑。读完你能搭出一个"改完代码 pytest 一回车,红绿一目了然"的最小测试工程,并且知道 fixture、参数化、mock、覆盖率这几个最常被用错的点到底怎么落地。
一、为什么是 pytest,不是 unittest
unittest 要写类、写 self.assert*、写 setUp/tearDown,样板代码多。pytest 直接用普通 assert,测试文件按文件名自动发现,零继承、零样板:
# test_sample.py
def inc(x):
return x + 1
def test_answer():
assert inc(3) == 4
跑 pytest 就能看到哪个用例红、哪行断言失败、实际值和期望值差在哪。pytest 还兼容 unittest.TestCase,老项目不用推倒重来。
二、最小可跑示例:先有一个被测函数
建一个真能测的函数,后面所有测试都围着它转:
# src/shop/price.py
def calc_price(origin: float, discount: float, vip: bool = False) -> float:
"""计算实付价:原价 * (1-折扣),VIP 再打 95 折。"""
if origin < 0:
raise ValueError("origin must be >= 0")
if not 0 <= discount <= 1:
raise ValueError("discount must be in [0, 1]")
price = origin * (1 - discount)
if vip:
price *=
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/videwhy/article/details/170537586



