Python测试

先说说测试为啥非搞不可。咱们写代码的,谁没经历过"本地跑得好好的,一上线就炸"的尴尬?测试说白了就是给代码买保险,提前把雷排了。Python里测试分好几类:单元测试盯单个函数,集成测试查模块协作,端到端测试模拟用户操作。新手最容易犯的错就是只盯着功能实现,测试随便糊弄两下。结果迭代两轮后,改行代码都得提心吊胆,生怕把祖传逻辑搞崩了。

现在主流的测试框架主要是unittest和pytest。unittest是Python自带的,用面向对象那套,写起来得继承TestCase类,setup/teardown的套路比较固定。比如测个字符串处理函数:

这套写法优点是规范,适合团队协作,但缺点也明显:代码量大一截,灵活性差。

后来pytest横空出世,简直测试界的瑞士军刀。不用写类,普通函数加个assert就能跑,还自动收集test_开头的函数。同样测反转字符串:

命令行敲个pytest,它能智能匹配测试文件,输出颜色标记失败用例。更香的是fixture机制,比如测数据库操作时,用@pytest.fixture搞个临时数据库,每个测试用例自动复用,比unittest的setUp干净利落。

实际项目中我强烈推荐用参数化测试。比如要测一个价格计算函数,得验证各种边界值:

参数化把测试数据抽离出来,一条用例覆盖多种场景,比写十个单独函数清爽多了。

Mock技术也是必杀技。比如你写个发邮件的功能,总不可能真发测试邮件吧?用unittest.mock截获调用:

这样既验证了业务逻辑,又不会污染真实环境。

测试覆盖率工具也得配齐。装个pytest-cov,跑完测试直接生成报告:

不过别盲目追求100%覆盖率------有些边界条件硬测反而浪费时间,重点保证核心逻辑和易错点就行。

最后分享几个血泪教训:第一,测试用例命名要有意义,别再用test1、test2这种了,改成test_user_login_with_invalid_password这种一目了然的。第二,避免测试依赖,每个用例必须独立运行。曾经有个同事写的测试必须按顺序跑,一乱序就报错,debug到怀疑人生。第三,慢测试单独标记,用@pytest.mark.slow过滤,不然每次跑测试都得泡杯茶等半天。

现在我们的CI流水线配置了自动测试,提交代码自动触发pytest,覆盖率低于85%直接卡合并。虽然前期多花时间写测试,但后期维护效率翻倍,再也不用当人肉debug机了。记住,好代码是测出来的,不是调出来的!

相关推荐
张小殊.16 分钟前
LoongForge TAOT 训练方案,解决MoE EP不均衡问题
人工智能·python·深度学习·机器学习·ai
玫幽倩23 分钟前
2026黄河流域公安院校-电子物证单项赛(程序逆向分析+服务器取证)
运维·服务器·python·电子取证·逆向·程序分析·服务器取证
码匠许师傅27 分钟前
【C++ 面试真题】聊聊 volatile 和 mutable
开发语言·c++·面试
北斗落凡尘27 分钟前
LangGraph 入门实战(4)
python·langchain
(Charon)35 分钟前
【C++】线程安全队列(二):生产者消费者模型与 condition_variable 阻塞等待
c语言·开发语言·c++
liwulin05061 小时前
【PYTHON】使用Selenium + ChromeDriver以及XPATH语法
开发语言·python·selenium
copyer_xyf1 小时前
Agentic RAG 实战:PostgreSQL + LangGraph 一条链路
python·postgresql·agent
JavaPub-rodert1 小时前
我又把自己的 Go 后台管理系统升级了一遍:文件管理、2GB 上传、私有文件预览、Docker 镜像全安排上了
开发语言·docker·golang·shiyuadmin
动力 continue1 小时前
Python 元类与异常类:类的“制造工厂”与“报错定制师”
开发语言·python·制造
quantdash_cc1 小时前
基于 QuantDash 5 分钟 K 线的网格交易策略参数网格搜索寻优实战
android·开发语言·pandas·量化·quantdash