首页 > 解决方案 > 在 Azure Devops 的 Docker 实例中运行 Jmeter 测试时,按顺序运行类似的采样器会阻止执行超出第一个

问题描述

我正在尝试运行一项测试,其中我发出 82 个单独的请求,除了一个标头值之外,所有请求都相同。该测试在本地运行时正常运行,但由于 Docker 或 Azure Devops,我遇到了这个错误。下面是原始测试报告文本,您可以在其中看到只有一个 MobileAsync/Confirm 请求被调用。使用处理器记录表明预处理器将为每个采样器(包括那些显然不执行的采样器)进行记录,但后处理器仅记录似乎正在执行的采样器。

...
1623266094052,65,manifest.json HTTP Request,200,OK,Thread Group 1-1,text,true
1623266094119,63,manifest.json HTTP Request,200,OK,Thread Group 1-1,text,true
1623266094184,64,manifest.json HTTP Request,200,OK,Thread Group 1-1,text,true
1623266094250,64,manifest.json HTTP Request,200,OK,Thread Group 1-1,text,true
1623266094316,64,manifest.json HTTP Request,200,OK,Thread Group 1-1,text,true
1623266094382,64,manifest.json HTTP Request,200,OK,Thread Group 1-1,text,true
1623266094448,66,manifest.json HTTP Request,200,OK,Thread Group 1-1,text,true
1623266094516,64,manifest.json HTTP Request,200,OK,Thread Group 1-1,text,true
1623266094582,65,manifest.json HTTP Request,200,OK,Thread Group 1-1,text,true
1623266099667,66,manifest.json HTTP Request,200,OK,Thread Group 1-1,text,true
1623266104748,1,Assert all modelObjects have been found,200,OK,Thread Group 1-1,text,true
1623266104779,18,JSR223 Sampler,200,OK,Thread Group 1-1,text,true
1623266104797,83,MobileAsync/Confirm HTTP Request,200,OK,Thread Group 1-1,text,true
qa.azurewebsites.net/MobileAsync/Confirm,83,0,0
1623266104911,67,manifest.json HTTP Request,304,The condition specified using HTTP conditional header(s) is not met.,Thread Group 1-1,,true
1623266104997,63,manifest.json HTTP Request,304,The condition specified using HTTP conditional header(s) is not met.,Thread Group 1-1,,true
1623266105062,65,manifest.json HTTP Request,304,The condition specified using HTTP conditional header(s) is not met.,Thread Group 1-1,,true
1623266105128,64,manifest.json HTTP Request,304,The condition specified using HTTP conditional header(s) is not met.,Thread Group 1-1,,true
1623266105194,62,manifest.json HTTP Request,304,The condition specified using HTTP conditional header(s) is not met.,Thread Group 1-1,,true
1623266105258,63,manifest.json HTTP Request,304,The condition specified using HTTP conditional header(s) is not met.,Thread Group 1-1,,true
1623266105322,64,manifest.json HTTP Request,304,The condition specified using HTTP conditional header(s) is not met.,Thread Group 1-1,,true
...

我试过的

我尝试修改登录请求并将其放入简单控制器中。

当我使用 ForEach 控制器进行 14 次调用时,我“硬编码”了循环。

我在采样器中添加了一个计时器,认为 Docker/Azure Devops 中可能存在故障保护机制,以防止发送超出要求的相同请求。

我正在测试 Blazemeter 的并行控制器,试图让 JMeter 插件在 Docker 中工作。

我尝试将采样器从旧的 ForEach 控制器移到新的控制器中。

测试

这是测试的图像,如果有帮助的话。

Test/ForEach 控制器的图像

标签: azuredockerjmeter

解决方案


ForEach 控制器采用以下形式的JMeter 变量

var_1=foo
var_2=bar
var_3=baz
etc.

它在以下情况下停止:

  • End index for loop到达了
  • 没有更多的变量可以迭代

先到先得

所以我建议检查 JMeter 变量名称/值

  1. JSR223 采样器放在 ForEach 控制器之前的某个位置

  2. 将以下代码放入“脚本”区域:

    vars.entrySet().each {var -> 
        log.info(var.key + '=' + var.value)
    }
    

    在上面的代码中vars代表JMeterVariables类实例并且logLog4jLogger,请参阅Top 8 JMeter Java Classes You Should Be Using with Groovy以获取有关这些和其他可用于 JSR223 测试元素的 JMeter API 简写的更多信息

  3. 运行您的测试检查jmeter.log 文件后- 它将包含所有可用的变量,您可能会在那里发现其他可疑条目,我的期望是您只有一个变量可以迭代

如果您无法自行解决问题 - 使用您的 ForEach 控制器配置和 jmeter.log 文件内容更新您的问题


推荐阅读