高效自动化测试平台设计与开发实战

接入与开发

带测试工程师把自动化测试平台从能跑到好维护:超时与重试、并发与排队、降级与灰度、日志字段、评测回归五块工程落地做法。

很多团队的自动化测试平台不是建不起来,而是建成之后天天救火:用例偶尔红、批量跑一半被限流、模型接口一变全量挂掉、出问题翻日志找不到哪条请求慢在哪。这篇不讲协议怎么兼容、客户端怎么配,只讲平台自己那层该怎么做工程:超时和重试怎么分档、并发怎么排队、失败怎么降级、日志该记哪几个字段、改动之后拿什么验证没退步。适合带 3-10 人测试团队、正准备把零散脚本收拢成平台的人。

很多团队的自动化测试平台不是建不起来,而是建成之后天天救火:用例偶尔红、批量跑一半被限流、接口一变全量挂掉、出问题翻日志找不到哪条请求慢在哪。这篇只讲平台自己那层该怎么做工程,不讲协议怎么兼容、客户端怎么配。

适合带三到十人测试团队、正准备把零散脚本收拢成平台的人。核心就五件事:边界怎么划、超时重试降级怎么分档、并发怎么排队、日志该记哪些字段、改动之后拿什么验证没退步。下面按这五块逐条给做法和判断标准。

先定平台边界:哪些归平台,哪些留给用例

平台最容易失控的地方是越写越厚,最后用例里塞满业务断言,平台里塞满某一条用例的特殊逻辑。先把平台拆成四层,再决定每段代码往哪放,后面的维护成本会低很多。分层不是为了好看,是为了出问题时能快速定位到是哪一层的事。

调度层
决定谁先跑、跑几次、优先级怎么排,不碰具体请求内容
执行层
决定跑在什么环境、怎么隔离数据和进程,不关心断言写成什么样
数据层
用例、结果、日志怎么存怎么查,是平台自己的数据库活
接入层
被测服务与模型接口怎么调,超时、重试、鉴权都收敛在这一层

判断标准很简单:凡是每个用例都要重复写的代码,就该收进平台;凡是用例独有的业务断言,别塞进平台。落地的第一步是列一张表,把现有脚本里重复出现的代码逐条归到四层里,归不进任何一层的先单列待定,别急着删也别急着抽象。

超时、重试、降级:三个旋钮别拧成互相打架

这三个东西最容易互相打架:超时设太长,重试就没意义;重试开太多,降级判断就永远触发不了。先把三档超时分清楚,再决定哪些步骤允许重试,最后才是降级顺序。

控制项放在哪一层怎么定档
连接超时接入层短,主要防网络握手卡死
读取超时接入层长于连接,按被测服务正常耗时上浮
用例总时长调度层再兜一层,防止单条用例无限拖住队列
重试次数平台按步骤类型给不写死在用例里
  • 重试只对幂等且失败原因可能是抖动的步骤开,断言失败不重试;重试次数写死在用例里是大坑,应该由平台按步骤类型决定
  • 降级顺序先定好:先切备用通道,再降并发,最后才跳过非关键校验并标记「未完成」而不是「通过」
  • 判断标准:如果一次失败重跑就绿,说明该重试;如果重跑还红,就该直接报错并把上下文留下来
  • 唯一性检查、写入类操作这类非幂等步骤,默认不重试,需要重试必须在用例里显式声明

什么时候不适用:被测服务本身就在发布窗口里、失败率整体偏高时,靠重试把红灯刷成绿灯只会掩盖问题,这时候应该先降低跑批频率,等人为确认服务状态再恢复。

并发与排队:别让批量任务自己把自己限流

并发调大之后批量任务自己把自己限流,是最常见的翻车方式。先量基线再定上限:用站内接口测速工具跑一遍,知道单次请求的正常耗时和抖动区间,再决定并发数怎么分通道。

  1. 量基线用接口测速工具连续跑一批,记录正常耗时和抖动区间,作为并发上限的依据
  2. 分通道高优先级用例走独立通道,批量回归走普通队列,别让一次全量把日常巡检挤出执行窗口
  3. 控重投失败重投要有节奏,退避一段时间再投,重投次数和间隔都记进结果里
  4. 回头看事后判断是平台调度问题还是被测服务问题,看的是重投记录和限流次数,不是看最终通过率

什么时候不适用:被测环境只有一套且数据会互相污染时,加并发等于制造假失败,这时候应该串行加隔离数据,而不是继续往上调并发数。并发能力的上限最终受限于环境隔离程度,不是受限于机器数量。

日志记哪几个字段:让一次失败能原地复现

日志的价值只在一个标准上:拿到一条失败记录,能不能不看代码就还原出「哪一步、什么输入、返回了什么」。做不到就说明字段不够,加字段比加日志框架重要。

  • 每条用例至少留:用例标识、开始与结束时间、请求参数摘要、响应状态、耗时、失败阶段、重试次数
  • 日志按层写:平台层记调度与资源,执行层记步骤,接入层记请求响应摘要,别全糊在一个文件里
  • 敏感信息在写入前脱敏,密钥与用户数据不进日志,这类整理可以用站内的本地脱敏工具先处理一遍
  • 失败时的上下文要顺手带出来,包括同一批里前后步骤的状态,方便判断是个例还是批次问题

检索侧也要留一手:用例标识和失败阶段做成可筛选字段,别只写进正文。出问题时先按失败阶段筛一遍,看是集中在某一层还是散在各层,这一步能省掉一半排查时间。

改动之后怎么验证没退步:给平台自己加一条小回归

平台自己也是软件,改动之后要有验证手段。思路是固定一条小用例集,条数不用多,但要覆盖调度、重试、超时、降级这几条路径,每次平台改动先跑这条,绿了再放开跑全量。

观察指标看它解决什么异常时先查
用例通过率整体是否退步失败集中在哪一层
平均耗时是否悄悄变慢接入层还是调度层
重试率是否在靠重试掩盖问题被测服务还是平台配置
被限流次数并发与排队是否合理通道划分与退避节奏

对比方式用同一批用例、同一环境、前后两次跑,别拿不同环境的结果比。平台版本、用例版本、被测服务版本这三者变化时要分别记录,否则退步了也不知道是谁引起的。接口和模型的当时数字,到站内的价格与模型资料库核对当时的数字再判断。

下一步把上面五块对照现有脚本过一遍,再去看中转站可信度与测速记录,确认你依赖的接入通道是否稳定。

常见问题

平台先做哪一块最划算?

先做执行层和日志。调度做得再花,执行不稳、日志查不出问题,团队照样天天手工补跑。等执行和日志稳定了,再上调度与并发分档。

并发数怎么定才不触发限流?

别拍脑袋,先测单次正常耗时和抖动,再从小并发往上加,观察失败率和被限流次数。具体的限额口径各平台不一样,可以到站内厂商与平台目录逐个核对当时的说明。

用例偶尔失败,到底算平台问题还是被测问题?

看失败阶段和重试结果。重跑就绿多半是抖动,平台该给重试;重跑同一步还红,多半是被测或数据问题。把这两类分开统计,才能判断该修哪边。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。