2016-11-08 45 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方法 –