22 | 压测平台:如何解决 GoReplay 动态数据关联?
高楼
你好,我是高楼。
在第 6 讲,我们说过目前主流的流量回放工具都无法轻易解决 session 的问题,所以从系统安全的角度来说,工具需要做对应的改造。
这节课,我们来聊一下 GoReplay 如何通过改造解决回放过程中动态数据关联的问题。
关联是什么?
我们可以把关联简单地理解为把服务端返回的某个值,传递给后续的调用使用。我们可以在很多场景用到它。举个例子,我们常见的“Session ID”就是一个典型的需要关联的数据。它需要在交互过程中标识一个客户端身份,这个身份要在后续的调用中一直存在,否则服务端就不认识这个客户端了。
对每一个性能测试工具来说,关联是应该具备的基本功能,GoReplay 也不例外。
但是有很多新手同学对关联的逻辑并不是十分理解,甚至有人觉得关联和参数化(流量数据)是一样的,因为它们用的都是动态的数据,并且关联过来的数据也可以用到参数化(流量数据)中。其实,这二者还是有所不同的,因为关联的数据后续脚本中会用到,但参数化就不会。
现在有很多全链路压测都是由单接口基准创建的,这样一来,关联就用得比较少。因为接口级的基准场景都是一发一收就结束了,不需要将数据保存下来再发送出去。
那么正常情况下,什么样的场景需要关联呢?一般情况下, 它们需要满足下面几个条件:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
GoReplay是一个强大的工具,可以通过中间件来解决回放过程中动态数据关联的问题。文章首先介绍了关联的概念和适用场景,指出了关联需要满足数据由服务器端生成、在每次请求时动态变化、在后续请求中需要再发送出去等条件。然后详细介绍了如何通过中间件来实现动态数据关联,中间件可以实现自定义逻辑,如认证、重写和筛选请求等。通过传入Middleware参数,可以发送命令给GoReplay,拉起一个进程执行命令。文章还提供了一个简单的使用bash echo中间件的示例。整体来说,本文通过介绍关联的概念和中间件的使用,为读者提供了解决动态数据关联问题的思路和方法。文章内容详实,通过实际示例演示了中间件的基本功能和使用方法,为读者提供了解决动态数据关联问题的思路和方法。文章还提到了GoReplay中间件的原理和常用用法,以及通过扩展Middleware实现关联功能的例子。文章最后提出了课后题,鼓励读者思考和交流讨论。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《全链路压测实战 30 讲》,新⼈⾸单¥59
《全链路压测实战 30 讲》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- 坂田隐士Goreplay是按时间戳发送请求而不是等待响应后发送,如果某些关联响应不能在录制的响应时间内返回,后续的回放就会失败,即使middleware脚本做了关联也会受影响。h这个有解决方法吗
作者回复: GoReplay 支持用任何语言编写中间件的协议,同时中间件程序还需要格外注意一点,就是中间件和 Gor 的所有通信都是异步,因此,我们不能保证原始请求和响应消息会一个接一个地出现。如果业务逻辑依赖于原始响应或回放响应,那么中间件应用程序就应该处理好状态,也就是要做好动态数据的处理动作。
2021-12-201 - 冒冒感觉技术难度有点高啊,有没有从入门开始的课程
作者回复: 工作中需要的技术就是这样的。入门的学习得靠自己努力了。
2021-12-15 - aMaMiMoU老师,您好: 如果是通过goreplay或者tcpcopy在线引流的方式直接把捕获的流量打到目标待压测端,是否就不再需要处理中间态的关联动态数据了呢?因为实时捕获的请求里是包含了服务端响应的动态数据包。
作者回复: 实时引流可以不用处理,但录制回放就需要考虑了。
2021-12-09
收起评论