Performance Test - Jmeter 异步流程测试的数据持久化验证咨询
方案可行性判断
你提到的「负载测试全量完成后运行单独验证脚本做校验」的方案完全可行,是异步链路数据一致性校验的通用标准实践,核心优势有两个:
- 不会在压测运行过程中插入额外校验逻辑,既不会影响压测端的并发性能,也不会干扰接口响应时间、吞吐量等核心压测指标的采集准确性
- 压测逻辑和校验逻辑完全解耦,后续调整校验规则无需修改压测脚本,可维护性更强
hashkey与sortKey的保存实现方案
核心逻辑是在压测脚本中新增字段提取、持久化落地的逻辑,通用操作步骤如下:
1. 确定字段提取时机
- 如果hashkey、sortKey是你构造请求时自行生成的:在构造完请求参数后、发送请求前直接提取保存即可
- 如果hashkey、sortKey是API请求成功后返回的:在拿到接口2xx类响应后,从响应报文中提取对应字段保存
注意:仅需保存接口请求成功的对应key即可,接口本身报错的请求不会进入后续异步处理链路,无需纳入校验范围
2. 数据落地存储实现
不管你用Jmeter、k6、Locust还是自研压测工具,都可以将提取到的字段追加写入CSV文件,每行建议存储格式为:请求唯一标识,hashkey,sortKey,请求时间戳
举个Python压测脚本的写入伪代码示例:
import csv import time # 提取到对应字段后执行追加写入 with open('压测有效key清单.csv', 'a+', encoding='utf-8', newline='') as f: csv_writer = csv.writer(f) csv_writer.writerow([req_unique_id, hashkey, sort_key, int(time.time() * 1000)])
如果是极高并发压测场景,担心多线程/协程写同一个文件出现冲突,可以给每个并发线程单独分配一个临时文件,压测结束后再合并所有临时文件、去重即可。
验证脚本实现注意事项
编写校验脚本时需要注意一个核心点:
- 压测全部结束后,先确认异步消费队列已经完全清空、所有请求都已经处理完成,再运行校验脚本,避免因为还在处理中导致的校验误判
- 脚本逻辑非常简单:读取刚才生成的key清单CSV,遍历所有hashkey+sortKey组合,去对应的NoSQL库查询记录是否存在即可
- 最后输出校验结果:总有效请求数、成功入库数、缺失的key清单、缺失比例,方便定位问题
内容的提问来源于stack exchange,提问作者sman
相关产品推荐
相关产品推荐

