很多团队的自动化测试平台不是建不起来,而是建成之后天天救火:用例偶尔红、批量跑一半被限流、模型接口一变全量挂掉、出问题翻日志找不到哪条请求慢在哪。这篇不讲协议怎么兼容、客户端怎么配,只讲平台自己那层该怎么做工程:超时和重试怎么分档、并发怎么排队、失败怎么降级、日志该记哪几个字段、改动之后拿什么验证没退步。适合带 3-10 人测试团队、正准备把零散脚本收拢成平台的人。
很多团队的自动化测试平台不是建不起来,而是建成之后天天救火:用例偶尔红、批量跑一半被限流、接口一变全量挂掉、出问题翻日志找不到哪条请求慢在哪。这篇只讲平台自己那层该怎么做工程,不讲协议怎么兼容、客户端怎么配。
适合带三到十人测试团队、正准备把零散脚本收拢成平台的人。核心就五件事:边界怎么划、超时重试降级怎么分档、并发怎么排队、日志该记哪些字段、改动之后拿什么验证没退步。下面按这五块逐条给做法和判断标准。
先定平台边界:哪些归平台,哪些留给用例
平台最容易失控的地方是越写越厚,最后用例里塞满业务断言,平台里塞满某一条用例的特殊逻辑。先把平台拆成四层,再决定每段代码往哪放,后面的维护成本会低很多。分层不是为了好看,是为了出问题时能快速定位到是哪一层的事。
- 调度层
- 决定谁先跑、跑几次、优先级怎么排,不碰具体请求内容
- 执行层
- 决定跑在什么环境、怎么隔离数据和进程,不关心断言写成什么样
- 数据层
- 用例、结果、日志怎么存怎么查,是平台自己的数据库活
- 接入层
- 被测服务与模型接口怎么调,超时、重试、鉴权都收敛在这一层
判断标准很简单:凡是每个用例都要重复写的代码,就该收进平台;凡是用例独有的业务断言,别塞进平台。落地的第一步是列一张表,把现有脚本里重复出现的代码逐条归到四层里,归不进任何一层的先单列待定,别急着删也别急着抽象。
超时、重试、降级:三个旋钮别拧成互相打架
这三个东西最容易互相打架:超时设太长,重试就没意义;重试开太多,降级判断就永远触发不了。先把三档超时分清楚,再决定哪些步骤允许重试,最后才是降级顺序。
| 控制项 | 放在哪一层 | 怎么定档 |
|---|---|---|
| 连接超时 | 接入层 | 短,主要防网络握手卡死 |
| 读取超时 | 接入层 | 长于连接,按被测服务正常耗时上浮 |
| 用例总时长 | 调度层 | 再兜一层,防止单条用例无限拖住队列 |
| 重试次数 | 平台按步骤类型给 | 不写死在用例里 |
- 重试只对幂等且失败原因可能是抖动的步骤开,断言失败不重试;重试次数写死在用例里是大坑,应该由平台按步骤类型决定
- 降级顺序先定好:先切备用通道,再降并发,最后才跳过非关键校验并标记「未完成」而不是「通过」
- 判断标准:如果一次失败重跑就绿,说明该重试;如果重跑还红,就该直接报错并把上下文留下来
- 唯一性检查、写入类操作这类非幂等步骤,默认不重试,需要重试必须在用例里显式声明
什么时候不适用:被测服务本身就在发布窗口里、失败率整体偏高时,靠重试把红灯刷成绿灯只会掩盖问题,这时候应该先降低跑批频率,等人为确认服务状态再恢复。
并发与排队:别让批量任务自己把自己限流
并发调大之后批量任务自己把自己限流,是最常见的翻车方式。先量基线再定上限:用站内接口测速工具跑一遍,知道单次请求的正常耗时和抖动区间,再决定并发数怎么分通道。
- 量基线用接口测速工具连续跑一批,记录正常耗时和抖动区间,作为并发上限的依据
- 分通道高优先级用例走独立通道,批量回归走普通队列,别让一次全量把日常巡检挤出执行窗口
- 控重投失败重投要有节奏,退避一段时间再投,重投次数和间隔都记进结果里
- 回头看事后判断是平台调度问题还是被测服务问题,看的是重投记录和限流次数,不是看最终通过率
什么时候不适用:被测环境只有一套且数据会互相污染时,加并发等于制造假失败,这时候应该串行加隔离数据,而不是继续往上调并发数。并发能力的上限最终受限于环境隔离程度,不是受限于机器数量。
日志记哪几个字段:让一次失败能原地复现
日志的价值只在一个标准上:拿到一条失败记录,能不能不看代码就还原出「哪一步、什么输入、返回了什么」。做不到就说明字段不够,加字段比加日志框架重要。
- 每条用例至少留:用例标识、开始与结束时间、请求参数摘要、响应状态、耗时、失败阶段、重试次数
- 日志按层写:平台层记调度与资源,执行层记步骤,接入层记请求响应摘要,别全糊在一个文件里
- 敏感信息在写入前脱敏,密钥与用户数据不进日志,这类整理可以用站内的本地脱敏工具先处理一遍
- 失败时的上下文要顺手带出来,包括同一批里前后步骤的状态,方便判断是个例还是批次问题
检索侧也要留一手:用例标识和失败阶段做成可筛选字段,别只写进正文。出问题时先按失败阶段筛一遍,看是集中在某一层还是散在各层,这一步能省掉一半排查时间。
改动之后怎么验证没退步:给平台自己加一条小回归
平台自己也是软件,改动之后要有验证手段。思路是固定一条小用例集,条数不用多,但要覆盖调度、重试、超时、降级这几条路径,每次平台改动先跑这条,绿了再放开跑全量。
| 观察指标 | 看它解决什么 | 异常时先查 |
|---|---|---|
| 用例通过率 | 整体是否退步 | 失败集中在哪一层 |
| 平均耗时 | 是否悄悄变慢 | 接入层还是调度层 |
| 重试率 | 是否在靠重试掩盖问题 | 被测服务还是平台配置 |
| 被限流次数 | 并发与排队是否合理 | 通道划分与退避节奏 |
对比方式用同一批用例、同一环境、前后两次跑,别拿不同环境的结果比。平台版本、用例版本、被测服务版本这三者变化时要分别记录,否则退步了也不知道是谁引起的。接口和模型的当时数字,到站内的价格与模型资料库核对当时的数字再判断。
下一步把上面五块对照现有脚本过一遍,再去看中转站可信度与测速记录,确认你依赖的接入通道是否稳定。→常见问题
平台先做哪一块最划算?
先做执行层和日志。调度做得再花,执行不稳、日志查不出问题,团队照样天天手工补跑。等执行和日志稳定了,再上调度与并发分档。
并发数怎么定才不触发限流?
别拍脑袋,先测单次正常耗时和抖动,再从小并发往上加,观察失败率和被限流次数。具体的限额口径各平台不一样,可以到站内厂商与平台目录逐个核对当时的说明。
用例偶尔失败,到底算平台问题还是被测问题?
看失败阶段和重试结果。重跑就绿多半是抖动,平台该给重试;重跑同一步还红,多半是被测或数据问题。把这两类分开统计,才能判断该修哪边。