jmeter(4)-響應斷言 json斷言 beanshell斷言


參考博文:https://www.cnblogs.com/dinghanhua/p/9823627.html
https://blog.csdn.net/lijing742180/article/details/81157947

感謝博主!

 

一.響應斷言

理解斷言的作用,為什么要加斷言?

在調試腳本時不加斷言是無意義的,但是做性能測試時壓測腳本不要帶斷言,影響性能。

因為業務返回結果是錯的話,結果樹請求樣本顯示綠色,不清楚是業務邏輯是否真的沒問題,

所以加斷言,如果業務失敗的話,加斷言后,結果樹請求樣本顯示紅色。

1. Apply to:指定斷言作用范圍

①Main sample and sub-samples:匹配范圍包括當前主取樣器和子取樣器

②Main sample only:只作用於main sample,僅匹配當前主取樣器,一般都是選擇這個

③sub-samples only:只作用於sub-sample,僅匹配子取樣器 

④JMeter Variable..:支持對JMeter變量值進行匹配,比如在測試計划配置一個變量

取樣器----高級設置----勾選從HTML文件嵌入資源

主請求:查看結果數-主請求

子請求:查看結果數-主請求的下方都是子請求

小總結:

1Main sample and sub-sample:作用於主main sample和子sub-sample

如果選擇這個了,斷言需要將寫的要求同時對主請求和子請求都去做斷言。


2:斷言失敗的話,聚合報告異常是100%,會影響。

寫操作:insert update delete性能角度避免加斷言,那怎么判斷?看界面數據。

斷言的目的是加檢查點,要有一定的成功率。
為什么壓測的時候禁用查看結果樹,而只用聚合報告?
因為查看結果樹一直要記錄請求與響應,一直占
jmeter的內存數據。要求輸出東西越多,就會導致gc等問題。

注意點:

1、大多數情況下,可只勾選“main sample only”,因為一般情況下,發起一個請求,實際就只有一個請求。但是在某些情況下,發起一個請求時,會觸發多個服務器請求,這時候就有main sample和sub-sample之分,類似ajax請求,另外,如果發起重定向請求,並且勾選“跟隨重定向”, 則把重定向后的請求視為main-sample

2、如果sub-sample斷言失敗,但main sample斷言成功,那么main sample也被設置為失敗狀態。如果作用域JMeter變量,且該變量關聯main sample,那么如果斷言失敗,則main sample也被設置為失敗(If the JMeter variable option is used, it is assumed to relate to the main sample, and any failure will be applied to the main sample only)。

3.如果執行完每個sampler的所有斷言,變量JMeterThread.last_sample_ok會被設置為true或false

 

 

 

 

2. 測試字段:要測試的響應字段,指我們要進行斷言的內容所在的位置,分為response和request兩大塊,最常用的是響應文本

①響應文本(Text Response) :從服務器返回的響應文本,比如body,不包括任何HTTP頭信息;響應服務器返回的文本內容,最常使用

響應狀態(Response Code) : 比如 200302301,比如返回代碼“200”表示成功

響應消息(Response Message) : 比如處理成功返回 OK,比如處理成功返回“成功”字樣

響應頭(Response Headers)包括Set-Cookie 頭,如果有的話。即匹配響應中的頭信息,比如token值

請求頭Resquest Header:請求中的頭信息,比如sign值 

URL樣本:通過Apache Tika追蹤的各種各種類型文檔的文本URL樣本。比如是否重定向,改變了URL地址(不是很懂......)

文檔(文本)Document(text):對文檔內容進行匹配;會消耗內存,不推薦!

⑧忽略狀態:指示JMeter設置sampler status的初始狀態為success。sample status是否成功,由已Response status和斷言結果決定,當選中Ignore Status時,Response status被強制設置為success,不執行進一步的斷言判斷。僅第一次斷言時使用。

理解:會強制將jmeter最初的響應狀態設置為成功,哪怕響應是404,505,也會強制視為成功。通過將斷言的結果與現有的響應狀態結合來確定取樣器的總體成功。選中忽略狀態復選框后,在評估斷言之前,會強制響應狀態成功。具有4XX和5XX范圍內狀態的HTTP響應通常被視為不成功。為了能夠執行進一步檢查,忽略狀態復選框可用於設置狀態成功。注意⚠️這將清除任何先前的斷言失敗,所以確保這個設置僅在第一個斷言上設置此操作。

⑨請求數據Request Data:請求數據,請求體即body的數據信息

 

3. 模式匹配規則:如何根據不同的模式來檢查要斷言的文本?

一般用包括或者字符串

包括響應內容包括需要匹配的內容即代表響應成功,為true;包括某一些字段

②匹配:響應內容完全匹配需要匹配的內容即代表響應成功,為true,不區分大小寫,支持正則;

③Equals(等於):如果整個文本等於模式字符串,響應內容要完全匹配文本內容才代表響應成功,為true,區分大小寫。

匹配內容是是純字符串匹配,字符串非正則表達式,即不支持正則。

Substring:是純字符串匹配,如果文本包含模式字符串,響應內容包含需要匹配的內容才代表響應成功,為true,區分大小寫。
匹配內容是是純字符串匹配,字符串非正則表達式,即不支持正則。

⑤否或者:跟前面四個選項結合使用,分別用於邏輯取反、取或。

邏輯取或:

 

要測試的模式(Patterns to Test):測試模式:輸入框,填入匹配的字符串或正則表達式,可以添加多個模式,可使用變量、文本、正則表達式(在“包括”和“匹配”模式下)。填寫需要測試的模式列表(list of patterns)。 每個模式都單獨測試,如果某個模式失敗了,那將不會往下檢查剩余的模式。添加一個斷言,多個測試模式(通過重復點擊面板的添加按鈕來添加多個測試模式),和多個斷言,每個斷言一個模式是一樣的

響應斷言:

斷言結果:成功只顯示一行,錯誤時顯示多行

斷言有多種類型:斷言持續時間,尺寸大小斷言

 

 

二.json斷言

當響應結果是json格式時,用JSON Assertion更方便判斷。

 

1 在請求上右鍵添加json斷言 

 

2  編輯json Assertion

判斷方式:

如果響應結果不是json格式的,fail

如果json path找不到元素,fail

如果json path找到元素,沒有設置條件,pass

如果json path找到元素了,不符合條件,fail

如果json path找到元素,且符合條件,pass

如果json path返回的是一個數組,迭代判斷是否有元素符合條件,有則pass,無則fail

 

第一種  值匹配

a. 值匹配成功示例:

 $[*].TT

 

b.值匹配失敗示例:

 

 

舉例1:
實戰寫json斷言:

返回結果1:

{
"data": [
{
"code": "001",
"name": "uuer",
"id": "694331c8"
}
],
"success": true,
"message": "success"
}

對響應結果的一級斷言:

對響應結果的二級斷言:

 

應該是 $[*].TT

 

 

返回結果2:

{
"data": [
{
"code": "001",
"name": "uuer",
"id": "694331c8"
}

{
"code": "002",
"name": "uuer",
"id": "694331c8"
}

{
"code": "003",
"name": "uuer",
"id": "694331c8"
}
],
"success": true,
"message": "success"
}

 

 

 

 

 

返回結果3:

{
"data": 
{
"operate": {

     "name":"haha",

     "pwd":"12345"

     }"001",
"name": "uuer",
"id": "694331c8"
}

 

$.data.operate.name   haha

 

json path espressions的語法學習

$:跟對象\元素

@:當前對象\元素

?():應用過濾器(腳本)表達式

復制代碼
 1 { "store": {
 2     "book": [ 
 3       { "category": "reference",
 4         "author": "Nigel Rees",
 5         "title": "Sayings of the Century",
 6         "price": 8.95
 7       },
 8       { "category": "fiction",
 9         "author": "Evelyn Waugh",
10         "title": "Sword of Honour",
11         "price": 12.99
12       },
13       { "category": "fiction",
14         "author": "Herman Melville",
15         "title": "Moby Dick",
16         "isbn": "0-553-21311-3",
17         "price": 8.99
18       },
19       { "category": "fiction",
20         "author": "J. R. R. Tolkien",
21         "title": "The Lord of the Rings",
22         "isbn": "0-395-19395-8",
23         "price": 22.99
24       }
25     ],
26     "bicycle": {
27       "color": "red",
28       "price": 19.95
29     }
30   }
31 }
復制代碼

$.store.book[*].author:商店所有書籍的作者(四個作者)

$..author :所有作者

$.store.* :商店所有的東西,包括book和bicycle

$.store..price :所有東西的價格

$..book[2] :第三本書

$..book[0,1] /$..book[:2] :前兩本書

 $..book[?(@.isbn)] :用isbn編號過濾所有書籍

$..book[?(@.price<10)] :過濾所有比10更便宜的書

$..* :XML文檔中的所有元素

 

 

 

 

第二種 正則匹配

a. 正則匹配成功示例:

 

 b. 正則匹配失敗示例: 

斷言fail,提示預期和實際結果不相符

 

第三種 預期為null

 

 

 第四種 反轉,上面的不符合pass,上面的有符合的fail

斷言提示有點怪怪的。 感覺 failed that  jsonpath $[0].TT matches 20181019 更好吧。因為匹配所以fail。

 

 

 

三.beanshell斷言

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM