jmeter检查相同请求的不同响应

时间:2018-07-10 09:13:41

标签: json api testing jmeter

我有这种要求

{ 
"ID":"112345"
"SERVICE":"56AA77"
}

API响应可能是肯定的,也可能是否定的。

积极回应:

{
"RESPONSE":"OK"
"TEXT":"DONE"
}

否定反应:

{
"RESPONSE":"KO"
"DESCRIPTION":"NOT FOUND"
"ERROR_CODE":"100"
}

如何仅使用一个HTTP Request Sampler和一个CSV文件与JMeter进行测试?

实际上我正在使用两个csv文件:

positive:
TEST_ID,TEST_DESC,ID,SERVICE,RESPONSE,TEXT

negative:
TEST_ID,TEST_DESC,ID,SERVICE,RESPONSE,DESCRIPTION,ERROR_CODE

是否可以仅使用一个文件? 像这样:

TEST_ID,TEST_DESC,ID,SERVICE,RESPONSE,TEXT,DESCRIPTION,ERROR_CODE

Jmeter如何处理呢?

更新:

我有两个JSON断言对象 Positive JSON check

Negative JSON check

是否可以创建BeanShell groovy来基于ResponseCode调用其中之一?

if (prev.getResponseCode().equals("200") == true) { 

checkResponsePositive

}
else
{
checkResponseNegative
}

有人可以用正确的语法帮助我吗?

2 个答案:

答案 0 :(得分:1)

  1. JSR223 Assertion添加为HTTP Request采样器的子对象
  2. 将以下代码放入“脚本”区域:

    def response = new groovy.json.JsonSlurper().parse(prev.getResponseData())
    
    if (vars.get('RESPONSE').equals('OK')) {
        if (!vars.get('TEXT').equals(response.TEXT)) {
            AssertionResult.setFailure(true)
            AssertionResult.setFailureMessage('TEXT field mismatch')
        }
    
    } else {
        if (!vars.get('DESCRIPTION').equals(response.DESCRIPTION)) {
            AssertionResult.setFailure(true)
            AssertionResult.setFailureMessage('DESCRIPTION field mismatch')
    
        }
        if (!vars.get('ERROR_CODE').equals(response.ERROR_CODE)) {
            AssertionResult.setFailure(true)
            AssertionResult.setFailureMessage('ERROR_CODE field mismatch')
        }
    }
    
  3. 上面的代码将有2个分支:

    • RESPONSE JMeter变量为OK时,它将验证TEXT
    • RESPONSE JMeter变量为KO时,它将根据相关JMeter变量的响应来验证DESCRIPTIONERROR_CODE

更多信息:

答案 1 :(得分:1)

是的,有可能。因此,我假设您已使用样本变量并将其用于常规提取器或任何提取器中,或者可能正在使用编码。现在,如果您使用了它,那么它可以检查采样器的响应并写入可能找到的任何值。为了肯定,他们可能找不到任何东西,因此可能会写“ XXX_NOTFOUND”或为null,这取决于数据提取方法和代码。

在下面,我将虚拟采样器用于肯定请求,并将所有常规提取器置于其下方。

enter image description here

一旦检查了通过视图结果树生成的csv报告,您可以看到找到的变量已经报告,其他变量报告为“ xxxxx_NotFound”。这个“ xxxxx_NotFound”是我在正则表达式提取器中提供的值。简而言之,对于特定的请求,您可以使用多个提取器,并将输出写入单个csv中。如果找到值,则它将写入其他内容,它将写入您在默认情况下给出的内容。

enter image description here