我使用JMeter WebSocket采样器来执行WebSocket延迟测试。我的测试计划包含4个线程组。
首先,这是我正在生成的操作的顺序,每个步骤都被分组在一个线程组中。以及一号的连接。在执行第二次操作之前缓存演示者的操作。因为第三次手术。同样的演示者,将继续使用这个连接。
def connection = sampler.threadLocalCachedConnection
props.put('presenterConnection', connection.get())对于参与者来说,第二和第四次连接的想法是一样的。步骤4的参与者将继续使用在步骤2中创建的连接。
它在一次会议上如预期的那样运作。但是,在运行两个并发会话时,在读取演示程序发送的命令的第四次操作中,我遇到了WebSocket单读采样器的问题。
在每个线程组的线程属性中,我将“线程数”更改为2。演示者能够在第一天创建两个会话ID。操作。我还添加了“线程间通信PostProcessor”,以便将会话I存储在队列中,这样就可以将会话I传递给其他线程组。它适用于前3次操作,直到在读取演示程序发送的命令的最后一次操作中转到WebSocket单读采样器。
在步骤2中,我已经设置了一个JSR223 PreProcessor来使用缓存的连接。
def connection = props.get('Participant1Connection')
sampler.threadLocalCachedConnection.set(connection)该问题出现在上一次操作的两个线程的响应体中。没有使用第一个会话ID。步骤4中的第一个用户使用的是第二会话ID,而第二响应体是空的,因为这两个用户正在使用相同的会话。我应该做些什么来解决这个问题,让两个用户读取来自两个会话的数据呢?




发布于 2022-06-24 06:24:06
当人们在不了解代码的情况下复制代码时,通常会发生这种情况。此外,如果您需要在线程组之间传递数据,那么您的测试设计很可能会出现问题。
管他呢。
根据JMeter文档
属性与变量不相同。变量是线程的本地变量;属性是所有线程的公共属性()。
因此,当您有>1个线程(虚拟用户)时,第二个线程将覆盖presenterConnection属性的值,因此无论您拥有多少线程,它们都试图使用presenterConnection的单个实例。
我的期望是,您希望每个线程都有一个连接,在这种情况下,您应该添加当前线程号作为属性键的前缀/后缀,因此:
presenterConnection1presenterConnection2对“你的”代码的修正应该是这样的:
props.put('presenterConnection' + ctx.getThreadNum(), connection.get())类似地,用于访问连接。
在上面的示例中,ctx表示JMeterContext类实例,请参阅在Groovy中应该使用的前8个JMeter Java类文章,以获得更多有关JSR223测试元素可用的JMeter API缩写的信息。
https://stackoverflow.com/questions/72735069
复制相似问题