开头
提到精准测试,很多人第一反应是覆盖率。
但只看覆盖率还不够。覆盖率能告诉你代码有没有被执行,却不一定能告诉你:
- 是哪个接口执行了这段代码?
- 这段代码处在哪条业务链路中?
- 它访问了哪些数据库、缓存或消息队列?
- 异常发生在链路的哪个位置?
这些运行态信息,正是 Java Agent 的价值所在。
1. Java Agent 在精准测试里的定位
Java Agent 不是精准测试的全部,它更像采集层。
它负责把运行时发生的事实记录下来:
请求入口 → 类/方法调用 → 资源访问 → 异常信息 → 链路快照
这些数据后续会被用于:
- 影响面分析。
- 覆盖率解释。
- 缺陷复盘。
- AI 回归范围推荐。
- 测试执行证据沉淀。
如果没有运行态链路,精准测试只能停留在静态 Diff 和覆盖率数字上。
2. 应该采集哪些信息
请求入口
入口是链路的起点,常见类型包括:
- HTTP 接口。
- RPC 接口。
- MQ 消费。
- 定时任务。
- 批处理任务。
入口决定了测试人员最终要回归什么。
比如一个方法被修改了,测试不会直接去测方法,而是测它对应的接口、消息或任务。
方法调用
方法调用是 Agent 最核心的采集对象。
建议至少记录:
- 类名。
- 方法名。
- 调用层级。
- 耗时。
- 是否异常。
- TraceId。
示例:
OrderController#create
-> OrderService#createOrder
-> InventoryService#lockStock
-> CouponService#useCoupon
这些数据能把变更方法和业务入口关联起来。
资源访问
精准测试不只关心代码,还关心外部资源。
建议记录:
- SQL 表名和操作类型。
- Redis Key 前缀。
- MQ Topic。
- RPC 服务名。
- HTTP 下游接口。
这些信息对影响面分析非常重要。
例如:代码改动本身在订单服务,但实际影响了库存表和支付消息,那回归范围就不能只看订单接口。
异常信息
异常数据对缺陷复盘和风险识别很有价值。
建议记录:
- 异常类型。
- 异常方法。
- 栈顶关键类。
- 关联入口。
- TraceId。
但不要无节制记录完整堆栈,否则数据量会很大,也可能带来敏感信息风险。
3. 不应该什么都采
Agent 采集最容易犯的错误是:全都要。
结果通常是:
- 数据量巨大。
- 链路非常长。
- 存储成本高。
- 查询很慢。
- 测试人员看不懂。
精准测试需要的是“可决策数据”,不是“全量运行日志”。
建议做过滤:
- 只采集业务包,不采集 JDK 和三方库内部细节。
- 对高频方法做采样或忽略。
- 对 Getter/Setter、工具类、日志类降噪。
- 对 SQL 参数做脱敏。
- 对链路长度设置上限。
采集边界越清楚,后续分析越可用。
4. Agent 数据如何关联 Diff
假设本次变更方法是:
InventoryService#lockStock
历史链路中记录过:
POST /order/create
-> OrderService#createOrder
-> InventoryService#lockStock
那么平台就能推导:
- 本次库存锁定逻辑变化影响下单接口。
- 下单接口是必须回归入口。
- 如果本次测试没有执行
POST /order/create,则存在未覆盖风险。
这就是 Agent 数据在精准测试中的核心价值:把代码方法变成业务入口。
5. Agent 数据如何喂给 AI
AI 不需要原始超长链路,它需要整理后的上下文。
可以这样输入:
变更方法:InventoryService#lockStock
历史入口:POST /order/create
链路摘要:下单 → 创建订单 → 锁库存 → 使用优惠券 → 创建支付单
资源访问:inventory_stock 表 update,order_info 表 insert
本次覆盖:下单主流程已覆盖,库存不足分支未覆盖
历史缺陷:库存并发扣减曾出现超卖
然后让 AI 输出:
- 风险等级。
- 必测场景。
- 并发/异常测试建议。
- 未覆盖风险。
- 需要研发确认的问题。
Agent 负责采事实,AI 负责解释事实。
6. 落地注意事项
性能开销
Agent 一定要有开关、采样和环境隔离。
建议先在测试环境、预发环境验证,再评估是否进入生产只采关键链路。
数据安全
不要直接采集敏感参数。
尤其是用户手机号、身份证、Token、支付信息等字段,必须脱敏或不采集。
链路可读性
链路不是越长越好。
测试人员更需要看入口、关键业务方法、外部资源和异常点。
与研发协作
Agent 采集可能涉及启动参数、字节码增强、性能评估,需要研发认可。
推广时不要强调“监控研发代码”,而要强调“帮助团队减少盲目回归”。
7. 总结
Java Agent 在精准测试里的价值,不是单纯采集覆盖率,而是记录运行态链路。
它帮助团队回答:
- 哪些接口经过了变更方法?
- 哪些链路访问了关键资源?
- 本次测试有没有执行高风险路径?
- AI 能否基于这些事实生成更靠谱的回归建议?
下一篇我会继续讲:覆盖率报告为什么不能只看百分比,真正有价值的是增量风险。