Skip to content

测试与验证 ​

测试报告是绿的、覆盖率达标、压测曲线平稳,这些都是测量结果,而测量本身会出错。这个专题不讲某个测试工具怎么用,讲的是这些数字在什么情况下不代表它们看起来代表的意思:没有检查结果的覆盖率、被重跑掩盖的失败、自动减压的压测,以及压测流量泄漏到正式数据里。

文章 ​

01覆盖率 100%,一个断言都没有同一个函数的三套测试覆盖率都是 100%,变异测试分别杀死 17 个变异体中的 2、14、16 个;等价变异体,以及不在分母里的未实现需求→02判题结果对哪一组输入有效结果绑定候选与判据的摘要;墙钟、CPU、地址空间与输出限制各挡什么,同样的 -9 分不清是哪个限制→03从行为到场景到断言四种断言的失败信息、分组断言、参数化显示名;重构后测行为的测试通过、校验调用次数的失败;准备数据分三类→04替身证明了什么any() 让缺陷通过、严格桩暴露参数错误;内存替身不守仓储契约;录制响应是证据不是契约→05Spring 测试事务的失真同一组断言:测试事务里唯一约束不报错、懒加载读得到,通知不发、其他线程看不到;REQUIRES_NEW 写入残留;替换 Bean 新建上下文→06这个风险该由哪一层测试发现先列风险,在包含必要真实组件的最低一层发现它;单接口与跨步骤状态;每个替身让哪些风险不可见→07拆分测试时覆盖责任去了哪里用桩的规则测试发现不了接线缺陷、变异检验、名不副实的测试、动态测试共享 @BeforeEach→08TDD 的三步各防什么红:因为正确的原因失败;绿:最小通过,用新例子迫使实现通用;重构:在测试保护下保持行为→09用 requests 写接口测试自己拼查询串被 & 拆错、data 与 json、默认无超时、500 不抛异常、Session 的 Cookie 与连接复用→10测试 WebSocket 接口推送与乱序响应下按 id 匹配、recv 没有超时、握手鉴权、关闭码与连接清理→11重跑一次就过了,这个缺陷去哪了失败重跑让构建成功而缺陷还在;每次 30% 概率失败的缺陷重跑 2 次后只有 2.6% 的构建拦得住;偶发失败的三种来源与 failOnFlakeCount→12单独跑能过,一起跑就红固定数据相撞、整表断言、跨测试清理与前次残留;运行标识、事务回滚和每进程一个数据库的隔离范围→13固定 10 个并发压测,服务卡了 2 秒,报告里只有 10 个慢请求闭合模型在服务变慢时自动减压,p99 是 11 毫秒;开放模型下是 1.9 秒;计时起点、发压方瓶颈与目标速率的来源→14压测流量的标记,过了线程池就没了ThreadLocal 标记在线程池、异步回调、定时任务与消息边界上丢失,InheritableThreadLocal 把正常订单写进影子表;包装任务、ScopedValue 与拒绝无标记写入→

相关专题 ​

文章以 CC BY-NC-SA 4.0 授权 · 代码片段以 MIT 授权