首页 > 解决方案 > JMeter忽略所有接收采样器(Websocket)中的特定类型的响应

问题描述

有没有办法让所有接收采样器忽略JMeter中的特定响应并等待我们感兴趣的响应?

更准确地说,我们创建了一个 jmx 文件,其中包含用户在浏览器上创建的大型流程。每个发送的请求后面都有一个响应,因此我们使用请求处理程序,然后为每个调用使用相应的接收处理程序。一切似乎都很好。但是在某些情况下,可能会到达另一种响应,这不是我们在流程中所期望的,而是由另一种独立机制触发的。您可以将其视为发送给正在执行流程的用户的通知,并且独立于流程本身,但它们是在通道中接收的(对于我们来说,在 websocket 连接中)。

所以我们试图找到一种方法来忽略在我们运行测试时可能出现的一组特定响应。

我们首先尝试在每个接收采样器中添加一个 While 控制器,以检查内容是否为所需类型,如果不是则再次循环。但是这个解决方案有 3 个缺点:

  1. 我们必须为特定接收添加两次采样器 - 一次在 while 元素之前,一次在元素内,因为我们必须首先提取接收到的数据,并且在执行 while 条件检查之前 while 不执行其内容
  2. 我们的 jmeter 测试脚本中有很多发送-接收对,我们必须在脚本中添加很多 while 控制器
  3. 由于接收到的消息可能不是我们期望的类型,而是另一个我们想要忽略的类型,所以我们不能添加响应断言,因为如果通知到达它将失败,因此我们必须验证内容间接 -> 条件while 循环的

我们使用apache-jmeter-5.3

所以我们想知道我们是否可以做另一种配置来避免所有这些while循环。

它可能与解决方案无关,但我们通过“Peter Doornbosch 的 WebSocket Samplers”使用 websocket。

谢谢

标签: websocketjmeterjmeter-plugins

解决方案


  1. 您不必,只需修改您的 While 控制器的条件以接受未定义的变量

  2. 听起来像是使用模块控制器来避免代码重复的潜在用例

  3. 如果您收到您不期望的响应,您可以使用JSR223 PostProcessor将响应主体更改为您期望的响应主体,示例代码

    if (!prev.getResponseDataAsString().contains('foo')) {
        prev.setResponseData('foo', 'UTF-8')
    }
    

推荐阅读