2016-11-08 47 views
2

用JMeter测试REST服务:我有准确的JSON,这是我的预期结果,请帮助我在JMeter中定义此断言。例如,我从一个GET请求预期的反应正是:验证jmeter中的精确json

[ { 
    "id" : "FR", 
    "description" : "France", 
    "defaultLanguageId" : "fr", 
    "defaultTimezone" : "Europe/Paris" 
}, { 
    "id" : "IT", 
    "description" : "Italy", 
    "defaultLanguageId" : "it", 
    "defaultTimezone" : "Europe/Rome" 
} ] 

回答

1

我会去JSR223 Assertion和Groovy语言如:

  1. 添加JSR223断言作为请求的孩子返回上面的JSON
  2. 将下面的代码放到JSR223断言 “脚本” 区域:

    import groovy.json.JsonSlurper 
    
    JsonSlurper slurper = new JsonSlurper(); 
    
    def expected = slurper.parseText("[\n" + 
           " {\n" + 
           " \"id\": \"FR\",\n" + 
           " \"description\": \"France\",\n" + 
           " \"defaultLanguageId\": \"fr\",\n" + 
           " \"defaultTimezone\": \"Europe/Paris\"\n" + 
           " },\n" + 
           " {\n" + 
           " \"id\": \"IT\",\n" + 
           " \"description\": \"Italy\",\n" + 
           " \"defaultLanguageId\": \"it\",\n" + 
           " \"defaultTimezone\": \"Europe/Rome\"\n" + 
           " }\n" + 
           "]"); 
    def actual = slurper.parseText(prev.getResponseDataAsString()); 
    
    if (expected != actual) { 
        SampleResult.setSuccessful(false); 
    } 
    

使用这种方法,您将能够比较JSON结构,并且在不同的节点顺序或额外空间等情况下不会失败。如果您需要检查顺序和标记,以及 - 只需使用普通的Response AssertionEquals模式,如:

Response Assertion

参考文献:

+0

我宁愿使用响应断言,但似乎并不奏效。它是否正确定义: – Nelly

+0

如果你能帮助我将其定义为响应声明,我将非常感谢,我尝试了screeshot上显示的定义:http://s61.photobucket.com/user/AJ6FZ3h/library/但它不是这样工作的。哪里不对? – Nelly

+0

我用屏幕截图更新了答案,但是我再说一遍,这种方法会非常脆弱,任何额外的空间,任何新行,任何JSON节点顺序的改变都会导致失败,我的建议是采用Groovy方法 –