테스트 도구 실전 · 무엇을 테스트하나 · 实验
커버리지의 빈칸을 메운다
目标
学习的不是如何编写测试,而是如何选择要测试的内容。
把覆盖率当作地图,而不是目标。
为什么重要
100% 覆盖率不能保证任何事情。仅有 assert x is not None 也能达到 100%。
相反,真正危险的部分(错误处理、边界值)因为难写测试而保持空白,bug 正因如此存活。
本实验将用数字找到这些空白并补上,最后以决定哪些地方不测试结束。
环境
pytest --cov=<모듈> --cov-report=term-missingpytest --cov-branch 분기 커버리지pytest --durations=5 느린 테스트 다섯 개虽然没有网络,但镜像中已包含 pytest、coverage 和 hypothesis。
步骤
1. 有三个分支的函数 → /root/work/tt/billing.py
2. 只测试正常路径 → test_billing.py
3. 确认缺失行 → /root/work/tt/03-cov.txt
4. 补上错误路径
5. 分支覆盖率 → /root/work/tt/05-branch.txt
6. 使用 hypothesis 验证性质
7. 慢测试 → /root/work/tt/07-slow.txt
8. 决定不测试的内容 → /root/work/tt/08-verdict.md
参考
- 测试文件名必须以
test_开头,pytest 才能发现它。 --cov=billing中的名称是文件名,不是路径。- hypothesis 找到失败输入后,会缩减为最小反例并显示出来。
8个步骤
- 创建要测试的代码
- 第一个测试
- 查看遗漏的行
- 补上空白
- 分支覆盖率并不相同
- 人想不到的输入
- 找出慢测试
- 决定哪些内容不测试