最近在研究流量录制的相关内容
根据定义:
流量录制回放是通过复制线上真实流量(录制)然后在测试环境进行模拟请求(回放)验证代码逻辑正确性。通过采集线上流量在测试环境回放逐一对比每个子调用差异和入口调用结果来发现接口代码是否存在问题。
生产和测试环境的代码时一致的,也就是服务提供的功能是一致的,但是生产和测试环境的数据是不一致的,比如我录制了某一个接口的流量在某个时间段的流量,这个接口的 url 为{userid}/orders
,线上和测试环境的 userid 必然不是对称的,那么这个时候怎么在测试环境回放这些录制的数据?怎么满足定义中所说的
在测试环境进行模拟请求(回放)验证代码逻辑正确性
userid 如果不存在,接口会返回 404 ,测不出任何效果。 那么为了能测出效果,这种情况下我们只能进行数据清洗,把录制的数据里面的 userid 改了,让这个 userid 是在测试环境有意义的。
但是如果每一个被录制的接口都要考虑清洗的场景,那么这个录制工作会变得及其复杂,生产环境的接口成千上万,而且每个接口要清洗的字段,内容也不一样。
关于这块流量录制并在测试环境回放究竟有没有什么比较可行的方法论
1
noobCoderZzz 2022-08-23 21:16:59 +08:00
能不能把线上的数据脱敏同步到测试环境,当然这个 userid 也做同样的映射处理
|
2
zzuieliyaoli 2022-08-23 21:18:37 +08:00
加个预生产 /预发布环境?这样 userId 就一致了
|
3
taowen 2022-08-23 23:02:32 +08:00
把这些接口的流量也录制并回放了。https://github.com/taowen/awesome-debugger 还有很多流量录制和回放的开源工具
|
4
iyaozhen 2022-08-23 23:10:17 +08:00
最近看见的文章 拨开流量录制回放从基建到业务落地的迷雾
https://www.sohu.com/a/578317129_355140 其实楼主说到才是流量回放的难点,还有数据安全的问题。好像没啥好的办法,就是要配套系统来配置每个字段的清洗 /映射规则 |
5
LoremIpSum OP @noobCoderZzz 不是没想过,但是线上的数据量太大了,同步的成本很高
|
6
dustynight 2022-08-24 02:04:21 +08:00
我们公司内部也有流量回放工具,做法是把所有的外部调用(包括 RPC ,DB ,配置中心等等)全部都录下来。
|
7
lazyfighter 2022-08-24 09:19:39 +08:00
预发环境针对流量进行读流量回访,但是这种情况还是会有问题,比如订单状态变更导致很多流量都 diff 失败了, 这个需要进行特殊处理, 写流量我们之前是通过人工 diff 的,在重构的时候提供两套接口,线上之前的接口正常返回,拿到线上接口的 request response 以及下游依赖的 response 之后,异步请求新的接口传入这些参数,下游依赖 response 进行 mock ,下游 request 进行 jsondiff ,重构接口 response 进行 jsondiff ,依靠这种方法做过好几个项目的重构
|
8
LoremIpSum OP @lazyfighter 你们进行回归测试的数据和线上的数据是一致的吗?你们是否也需要对录制的流量进行清洗后再回归?
|