Jmeter WebSocket测试:如何使用线程组之间现有连接

cu6pst1q  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(227)

首先,我使用的是JMeter WebSocket Samplers。下面是我需要完成的操作顺序:
1.演示者连接
1.演示者创建会话;保存会话ID
1.参与者连接
1.参与者订阅已保存会话ID的命令
1.开始延迟测试
因此,根据流程,我需要2个连接到不同的端点(一个用于演示者,另一个用于参与者)。x1c 0d1x我需要确保前4个步骤已完成,并且演示者和参与者都成功连接到Web Socket,然后再开始延迟测试。
我创建了2个线程组,并相应地连接到演示者和参与者的端点。我的问题是,我如何管理以特定顺序执行2个线程组中的请求?按照顺序执行,我想执行
1.登录-〉连接-〉订阅在演示者线程组中
1.参与者线程组中的连接-〉订阅
1.发送Presenter线程组中的请求

  1. Participant线程组中的循环控制器(包含WebSocket单读采样器)。
    我通过将send请求放在第三个线程组中进行测试,然后在测试计划中选中run thread groups consecutively选项。但是send请求中的WebSocket单写采样器无法再使用现有连接。(演示者和参与者有两个连接)

而且我对当前设置的执行顺序有点困惑。看起来好像是随机执行的。参与者线程组中的前4个请求看起来像是在下面快照中演示者线程组中的任何请求之前执行的,因为参与者线程组中突出显示的订阅请求依赖于将从请求传递的会话ID演示者线程组中的(WS-Subscribe-Presenter-/v1/create/session)。由于执行顺序错误,传递到此处的会话ID实际上与此轮测试运行中从演示者请求创建的会话ID不同。它实际上仍在使用上一轮测试运行中创建的会话ID。
注意:我将会话ID作为一个属性进行传递,以便可以在线程组之间传递该值。

import groovy.json.JsonSlurper;

def response = prev.getResponseDataAsString();
String[] res = response.split();
def json = new JsonSlurper().parseText(res[res.size() -1]);

vars.put("sessionUUID", json.data.sessionUUID);
props.put("sessionId", vars.get("sessionUUID"));

tktrz96b

tktrz96b1#

1.将JSR223后处理器添加为第一个线程组中最后一个WebSocket采样器的子级
1.将以下代码放入“Script”区域

def connection = sampler.threadLocalCachedConnection
props.put('connection', connection.get())

1.将JSR223预处理器添加为第二个线程组中第一个WebSocket采样器的子级
1.将以下代码放入“Script”区域:

def connection = props.get('connection')
sampler.threadLocalCachedConnection.set(connection)

有关这些samplerprops含义的更多信息:Top 8 JMeter Java Classes You Should Be Using with Groovy

相关问题