浅谈处理器插件之jp@gc - Inter-Thread Communication PreProcessor/PreProcessor
jp@gc - Inter-Thread Communication插件是一个特别有用的工具,它允许用户在不同的线程组之间传递数据,从而实现复杂的测试场景模拟。以下是关于此插件的详细文档。
插件概述
插件名称: jp@gc - Inter-Thread Communication PreProcessor / PostProcessor
适用版本: JMeter 3.x 及以上(具体版本兼容性请参考JMeter Plugins Manager)
功能介绍
jp@gc - Inter-Thread Communication插件分为两部分:前置处理器(PreProcessor)和后置处理器(PostProcessor)。这两个组件共同工作,实现了跨线程组的数据交换能力,这对于模拟现实世界中的复杂用户交互和数据依赖场景至关重要。
主要用途
● 跨线程数据共享:允许从一个线程组提取的数据被另一个线程组使用。
● 同步控制:可以用来同步不同线程组的操作顺序,比如在一组用户执行操作后,另一组用户才能开始。
● 模拟真实用户交互:在需要模拟多个用户之间或用户与系统之间交互的场景时非常有用。
使用场景
- 模拟登录会话共享:一个线程组执行登录操作并提取会话ID,然后通过此插件将会话ID传递给其他线程组,让这些线程组能够在一个已登录的会话上下文中执行操作。
- 并发与序列控制:在需要控制一组操作先于另一组操作执行的场景下,可以利用此插件来同步线程组之间的执行顺序。
- 数据驱动测试:当需要基于从一组请求中获取的数据来驱动另一组请求时,可以使用该插件来传递这些数据。
配置步骤
- 安装插件:
使用JMeter Plugins Manager安装Custom Thread Groups和Extras Set插件包,以确保jp@gc - Inter-Thread Communication插件可用。 - 添加前置处理器:
在数据生成的线程组中,添加jp@gc - Inter-Thread Communication PreProcessor。配置它以设置变量名和值(通常是通过正则表达式提取器或其他方式获取的数据)。 - 添加后置处理器:
在需要使用这些数据的线程组中,添加jp@gc - Inter-Thread Communication PostProcessor。配置它以监听特定的变量名,并选择如何处理数据(如取最新值、所有值等)。
应用实例
我们编写如下脚本
线程组1:保持默认
BeanShell 取样器1:编写如下脚本
String s = "hello JMeter";
vars.put("info",s);
jp@gc - Inter-Thread Communication PostProcessor:设置如下
● FIFO Queue Name to Put Data Into:设置为testInfo
● Value to Put:设置为${info}
线程组2:保持默认
BeanShell 取样器2:编写如下脚本
log.info("${getTestInfoData}");
jp@gc - Inter-Thread Communication PreProcessor:设置如下
● FIFO Queue Name to Get Data From:设置为testInfo,这里一定要注意,这里设置的名称务必跟上述的Thread Communication PostProcessor中的FIFO Queue Name to Put Data Into设置的名称一致,不然获取不到数据,类似JDBC相关数据库池一样
● Variable Name to Store Data:getTestInfoData
● Timeout:设置为5,单位是秒
然后运行脚本,查看JMeter日志内容如下
2024-08-07 10:14:01,746 INFO o.a.j.t.JMeterThread: Thread started: 线程组2 2-1
2024-08-07 10:14:01,747 INFO o.a.j.u.BeanShellTestElement: hello JMeter
2024-08-07 10:14:01,748 INFO o.a.j.t.JMeterThread: Thread is done: 线程组2 2-1
获取到了线程组1中BeanShell 取样器1保存在变量中的数据。
注意事项
● 线程安全:确保传递的数据在多线程环境下是线程安全的,避免数据竞争问题。
● 资源消耗:大量线程间通信可能会增加测试的资源消耗和复杂度,请根据实际情况合理设计测试计划。
● 测试设计:虽然此插件提供了强大的功能,但过度依赖跨线程通信可能导致测试维护困难,尽量简化测试设计。
结论
jp@gc - Inter-Thread Communication插件为JMeter用户提供了强大的跨线程数据共享能力,使得创建更贴近实际应用场景的负载测试成为可能。正确使用这一工具,可以显著提升测试的准确性和效率,帮助测试人员更好地评估系统的性能和稳定性。