1、多参数无法混用
工具经常用到的一个场景就是过滤header通过倍速播放,也就是--http-allow-header过滤参数与input-file的倍速播放同时使用,但是实际经过测试发现,这两个参数并不能同时使用,只能达到过滤效果,而无法倍速。该问题可以通过先过滤生成相应的过滤后的文件,然后再次用过滤后的文件进行回放,就可以使用倍速功能了。
2、如何通过参数重新生成可用的gor文件以及注意点
可以借助工具的-output-stdout参数,再结合--http-allow-header过滤参数来生成最终过滤的文件,当然,这里还可以使用其他过滤参数,如--http-allow-method、--http-allow-url、--http-disallow-url、--http-disallow-header。
实际使用方法示例:
比如我们想匹配header中Func为Test的请求,则命令可为:
./gor --input-file "xxx.gor" -output-stdout --http-allow-header Func:^Test$ > test.gor
注意:
1)过滤参数是支持正则的。
2)过滤后的文件应以类似“1 8a62783a0a5fdafda132141 1222695600036555509 0”第一行为开头,以🐵🙈🙉为最后一行结尾,其他无关字符串需要删除(可以在文件中搜索DEBUG,或者input-file,两者在相邻行或者同一行则为正常,否则需要处理)
3、加速回放瓶颈以及解决方案
由于工具本身的限制,工具本身是单goroutine运行,所以会存在一定的性能瓶颈。测试的时候,业务接口qps可能存在压不上去的问题,我们建议的解决方案时可以启动多个工具,这里也需要注意一点,再开启进程时,需要注意之前的流量还会回放,要做好幂等性处理,或者将文件拆分为多个,这样就避免了反复运行导致的问题
4、回放工具与实际qps不一致问题
如果回放环境与实际复制流量的环境并非完全一致,可能会出现工具的倍速播放与实际业务的qps并不完全对应的结果,所以需要注意环境的各项参数,尽量保持一致,以免影响相关测试结论
5、文件循环播放注意点
文件循环播放参数为--input-file-loop,但是实际不支持大文件的循环播放,若需循环播放,经过测试,可能的文件大小尽量保持在500M以内,该限制在官方文档中也有说明,但并未具体指出最大支持的文件大小,实际可能需要根据情况来测试确定
6、中间件开发以及注意事项
goreplay提供了middleware工具开发,可以通过开发插件灵活处理参数,但我们在开发过程中碰到了一些问题,比如在修改body时,长度是限制的,想在body参数中新增加参数,实际会出现增加不上的情况,原因在于goreplay从最开始就固定了body的长度,只能在该长度内处理,这一点需要处理
7、常用参数总结以及最佳实践
实际我们推荐的最佳用法举例:
gor --input-file test.gor --middleware "./goreplay-convert-tool" --output-http="目标地址" --stats --output-http-stats
输入文件搭配倍速播放,然后指定回放地址,这样可以满足绝大多数回放测试的场景,如果需要自己处理请求参数,则再加上middleware即可,实际使用过程中我们还需要观察监控, --stats --output-http-stats可在终端返回一些比较简单的如qps数据,但是实际业务数据还需要结合业务系统监控进行分析。同时注意在回放前要确认回放环境的数据,不要和线上数据进行混淆,避免影响测试结论和其他环境。
关于goreplay的日常用法,暂时就先分享以上的一些使用心得。