7.1 斷言的定義
斷言用于驗(yàn)證取樣器請(qǐng)求或?qū)?yīng)的響應(yīng)數(shù)據(jù)是否返回了期望的結(jié)果。
可以是看成驗(yàn)證測(cè)試是否預(yù)期的方法。
對(duì)于接口測(cè)試與性能測(cè)試來(lái)說(shuō),就是測(cè)試Request/Response创南,斷言即可以針對(duì)Request進(jìn)行气忠,也可以針對(duì)Response進(jìn)行淘钟。但大部分是對(duì)Response做斷言。
JMeter常見(jiàn)的斷言元件如下:
1.響應(yīng)斷言
2.JSON Assertion
7.2 響應(yīng)斷言
配置項(xiàng)
Apply to:
1.在大多數(shù)情況下,只有主取樣器具有所有必需的響應(yīng)數(shù)據(jù)。但是很多Web應(yīng)用使用了Ajax师枣,JQuery技術(shù),
單個(gè)請(qǐng)求可以在內(nèi)部產(chǎn)生多個(gè)子請(qǐng)求,并且每個(gè)請(qǐng)求都有其對(duì)應(yīng)的響應(yīng)數(shù)據(jù)蜜唾。
比如請(qǐng)求某一個(gè)頁(yè)面,頁(yè)面里的js會(huì)調(diào)用其他請(qǐng)求。
2.在HTTP請(qǐng)求的高級(jí)設(shè)置的“Embedded Resources from HTML Files”項(xiàng),
勾選了“Retrieve All Embedded Resources”夺刑,在發(fā)送請(qǐng)求時(shí)沼填,會(huì)解析相關(guān)的嵌入資源薛夜,
也會(huì)導(dǎo)致取樣器可能產(chǎn)生多個(gè)子取樣器晚伙。
嵌入資源包括:images民傻、applets喧半、stylesheets婉称、external scripts、frames/iframes绷雏、
background images缀蹄、background sound等。
3.有重定向的請(qǐng)求垛玻,并且勾選了“Follow Redirects”,則主取樣器為最后返回的URL請(qǐng)求喂江,
第一次URL和重定向返回的所有URL請(qǐng)求為子取樣器。
比如赴邻,使用http://www.sina.com/訪問(wèn)新浪墨榄,會(huì)有兩次重定向:
第一次請(qǐng)求: GET http://www.sina.com/ 重定向返回: Location: http://www.sina.com.cn/
第二次請(qǐng)求: GET http://www.sina.com.cn/ 重定向返回: Location: https://www.sina.com.cn/
第三次請(qǐng)求: GET https://www.sina.com.cn/
主取樣器為第三次請(qǐng)求;第一次箱沦,第二次與第三次請(qǐng)求為子取樣器聘萨。
Main sample and sub-samples
范圍包括主取樣器與所有子取樣器米辐。
Main sample only
范圍僅限于主取樣器狸页。
Sub-samples only
范圍僅限于所有子取樣器斋竞。
JMeter Variable Name to use
范圍包括使用的JMeter變量。
Field to Test:
1.Text Response
響應(yīng)正文惨篱。對(duì)于HTTP協(xié)議來(lái)說(shuō)界牡,是響應(yīng)的message-body(不包括狀態(tài)行與首部字段)
2.Response Code
響應(yīng)代碼簿寂。對(duì)于HTTP協(xié)議來(lái)說(shuō),是響應(yīng)狀態(tài)碼宿亡,比如200常遂、304、404等挽荠。
3.Response Message
響應(yīng)消息克胳。對(duì)于HTTP協(xié)議來(lái)說(shuō),是原因短語(yǔ)圈匆,比如OK漠另、Not Modified、Not Found等跃赚。
4.Response Headers
響應(yīng)首部字段酗钞。
5.Request Headers
請(qǐng)求首部字段。
6.URL Sampled
請(qǐng)求的URL来累。對(duì)于HTTP請(qǐng)求,若勾選了“Follow Redirects”窘奏,則包含重定向后的URL嘹锁。
7.Document(text)
通過(guò)Apache Tika從各種類型的文檔中提取文本。此選項(xiàng)開(kāi)啟也會(huì)嚴(yán)重影響性能着裹,謹(jǐn)慎使用领猾。
8.Request Data
請(qǐng)求數(shù)據(jù)。對(duì)于HTTP協(xié)議來(lái)說(shuō)骇扇,是請(qǐng)求的message-body(不包括請(qǐng)求行與首部字段)
9.Ignore Status
通過(guò)將斷言的結(jié)果與現(xiàn)有的響應(yīng)狀態(tài)相結(jié)合來(lái)確定取樣器的總體成功摔竿。
當(dāng)選擇Ignore Status復(fù)選框時(shí),將強(qiáng)制響應(yīng)狀態(tài)在計(jì)算斷言之前是成功的少孝。
HTTP協(xié)議在返回4xx和5xx的狀態(tài)碼默認(rèn)是不成功的继低,勾選此項(xiàng)可用于在執(zhí)行進(jìn)一步檢查之前設(shè)置狀態(tài)成功。
請(qǐng)注意稍走,這將具有清除任何以前的斷言失敗的效果袁翁,因此請(qǐng)確保只在第一個(gè)斷言上開(kāi)啟此設(shè)置柴底。
Pattern Matching Rules:
1.Contains
如果文本包含正則表達(dá)式模式,則為true
2.Matches
如果整個(gè)文本與正則表達(dá)式模式匹配粱胜,則為true
3.Equals
如果整個(gè)文本等于模式字符串(區(qū)分大小寫)柄驻,則為true
4.Substring
如果文本包含模式字符串(區(qū)分大小寫),則為true
注意:
Contains和Matches模式支持Perl5類型的正則表達(dá)式焙压;
Equals和Substring模式使用文本字符串鸿脓,不支持正則表達(dá)式。
5.Not
對(duì)斷言結(jié)果進(jìn)行否定涯曲。
6.Or
將多個(gè)測(cè)試模式以邏輯“或”組合起來(lái)野哭。
Patterns to Test:
要測(cè)試的模式列表。每個(gè)模式都是單獨(dú)測(cè)試的掀抹。
如果模式失敗虐拓,則不檢查其他模式,
使用多個(gè)模式設(shè)置一個(gè)斷言與使用每個(gè)模式設(shè)置多個(gè)斷言之間沒(méi)有區(qū)別(假設(shè)其他選項(xiàng)相同)傲武。
Custom failure message:
自定義斷言失敗信息蓉驹。即設(shè)置“Assertion failure message”的值。
對(duì)請(qǐng)求做斷言
1.斷言請(qǐng)求首部字段
在“要測(cè)試的響應(yīng)字段"選擇“Request Headers”
2.斷言請(qǐng)求URL地址
分兩種情況討論:
(1)若在“HTTP Request”中勾選了“Follow Redirects”揪利,
則斷言對(duì)象包含請(qǐng)求URL态兴,與重定向Location首部返回的URL,重定向若有多次疟位,則包含每次返回的URL瞻润;
(2)若在“HTTP Request”中沒(méi)有勾選“Follow Redirects”,
則斷言對(duì)象只針對(duì)請(qǐng)求URL甜刻。
對(duì)響應(yīng)做斷言
1.斷言響應(yīng)首部字段
在“Field to Test”選擇“Response Headers”
2.斷言響應(yīng)狀態(tài)碼
在“Field to Test”選擇“Response code”
3.斷言響應(yīng)原因短語(yǔ)
在“Field to Test”選擇“Response Message”
4.斷言響應(yīng)正文
在“Field to Test”選擇“Text Response”
多模式斷言
在“Patterns to Test”項(xiàng)中可以添加多個(gè)斷言模式進(jìn)行測(cè)試绍撞,多個(gè)模式可以使用“與”,“或”以及“非”進(jìn)行邏輯組合:
1.邏輯與(and)
多個(gè)模式之間默認(rèn)以“與(and)”進(jìn)行邏輯組合
2.邏輯或(or)
當(dāng)勾選了“Pattern Matching Rules”中的“Or”得院,則多個(gè)模式之間以“或(or)”進(jìn)行邏輯組合
3.邏輯非(not)
當(dāng)勾選了“Pattern Matching Rules”中的“Not”傻铣,則將每個(gè)模式Not后以“and”或“or”組合
假設(shè)有模式p1,p2祥绞,p3非洲,... ,pn(優(yōu)先級(jí)not > and > or)
(1)僅勾選“Not”
則相當(dāng)于:(not p1) and (not p2) and (not p3) and ... and (not pn)
(2)勾選“Not”與“Or”
相當(dāng)于:(not p1) or (not p2) or (not p3) or ... or (not pn)