我有一个带有2个http请求的jMeter测试计划:提交和检索。 第一个向服务器提交一些数据。没关系。
然后,在第二个任务中,我必须从服务器检索信息。响应是json,包含taskStatus,可以是“pending”或“done”。逻辑如下: 如果taskStatus处于“待定”状态,我必须自动重复此 http请求,并有一些延迟(例如3秒)。 但是,我发现使用Http Request Sampler无法做到这一点。希望可以有人帮帮我。 (使用Http Request Sampler不是必须的)
答案 0 :(得分:2)
单独使用Http Request Sampler无法完成,但While Controller可以解决问题。
按照以下方式构建测试:
其中:
重置状态 (ShellBean Sampler或任何其他可编程采样器)是运行该测试的第一个项目。它将重置测试状态,以免前一次迭代混淆。它所做的就是:
提交 保持原样,但 检索 会在 While Controller < / em>并且现在附加了一个后处理器。将这两个元素放在一起(在控制器和后处理器中,确保 Retrieve 在循环中运行,并且一旦状态变为“完成”,该循环就会存在。所以
虽然控制器 如下所示:
即。它检查变量的值&#34; Status&#34;并且只有在状态未完成时才进入循环。 (${__javaScript("${Status}"!="done")}
)
最后有人需要在每次执行 Retrieve 后更新${Status}
变量。这是通过 从响应中提取状态 来完成的。对于后处理器我不能更具体,因为你没有说出你的结果看起来如何,但你基本上需要配置它以提取状态(要么&#39;待定&#39;或&#39;完成&# 39;并将其保存在变量${Status}
中。它可能看起来像这样(只是一个示例,您的语法,甚至后处理器的类型可能会有所不同,具体取决于响应的类型):
以下是此测试如何运行的示例,如果它正在接收&#39;完成&#39;只有在几次迭代之后:
答案 1 :(得分:1)
简短的故事(伪代码):
Make Submit request
Make Retreive request and extract respopnse to varialbe taskStatus
While tastSTatus != 'done'
Make Retreive request and extract respopnse to varialbe taskStatus
简而言之(JMeter):
在 SubmitRequest 之后的 whileControllerRetreiveRequest 和 ReceiveRequest rigth中的ReceiveRequest 是等于并包含相同的正则表达式。理论上,在第二种情况下,唯一的区别是 ConstantTimer 。