如何根据jmeter中的先前响应值绕过采样器?

时间:2018-03-21 13:34:01

标签: jmeter jmeter-plugins

我已陷入某种情况,我需要验证上一个采样器对其中一个值的响应,如果该值为[],那么我需要触发以下请求或者然后切换到另一个采样器。

Flow:
Check Response of Sampler for One of the attribute
IF(attribute value==[])
Execute the Sampler under IF Conditions.
ELSE
New Sampler

示例回应: { “ID”:8中, “MERCHANT_ID”: “39”, “标题”: “衬衫-XtraLarge”, “副标题”:NULL, “价格”:110, “说明”:NULL, “图像”: “image_thumbs” :[[]], “选项”:[], “options_available”:[], “custom_options”:[]}

我需要检查属性custom_options是否为空!如果为空执行某些操作,如果不为空则执行其他操作!

需要条件来模拟这个!

帮助很有用!

2 个答案:

答案 0 :(得分:2)

在JMeter中有一个很好的功能就是Else声明,但在那之前你将不得不使用2 If Controllers

  

如果Controller允许用户控制其下方的测试元素(其子元素)是否运行。

假设你使用regex / json / css /其他后处理器提取器保存你的属性值,添加两个条件,首先是正数,然后是Sampler:

${__groovy("${attributeValue}" == "[]")}

第二个是否定的,并在其下添加新的采样器

${__groovy("${attributeValue}" != "[]")}
鼓励{p> __groovy使用默认Javascript

  

检查此项并在条件中使用__jexl3或__groovy函数建议演出

答案 1 :(得分:1)

转到Switch Controller

  1. 添加JSR223 PostProcessor作为返回JSON的请求的子项
  2. 将以下代码放入"脚本"面积:

    def size = com.jayway.jsonpath.JsonPath.read(prev.getResponseDataAsString(), '$..custom_options')[0].size()
    if (size == 0) {
        vars.put('size', 'empty')
    } else {
        vars.put('size', 'notempty')
    }
    
  3. Switch Controller添加到您的测试计划中并使用${size}作为"切换值"

  4. Simple Controller添加为Switch Controller的子级,并为其指定empty个名称。提出与空" custom_options"相关的请求在empty简单控制器
  5. 添加另一个简单控制器作为Switch Controller的子级,并为其指定notempty名称。提出与非空的相关的请求" custom_options"在notempty简单控制器下。

    JMeter Switch Controller

  6. 更多信息:Selection Statements in JMeter Made Easy