目錄
JMeter(一):基礎(chǔ)概念
JMeter(二):配置元件
JMeter(三):變量參數(shù)化
JMeter(四):監(jiān)聽(tīng)器
JMeter(五):腳本錄制
斷言:驗(yàn)證服務(wù)器返回的數(shù)據(jù)是否滿(mǎn)足我們的要求
即LR中的檢查點(diǎn)途乃,是對(duì)響應(yīng)結(jié)果做一個(gè)判斷啃奴,我們?cè)谡?qǐng)求一個(gè)網(wǎng)址時(shí)會(huì)有返回?cái)?shù)據(jù)资昧,那怎么判斷請(qǐng)求是正確的呢震嫉,就需要對(duì)某一字段或內(nèi)容進(jìn)行匹配砸王,如果跟預(yù)想的一樣就認(rèn)為請(qǐng)求是正確的攻旦,否則是失敗的
使用斷言的目的:在request的返回層面增加一層判斷機(jī)制(因?yàn)閞equest成功了抖格,并不代表結(jié)果一定正確)
針對(duì)何時(shí)使用JMeter斷言乃正,下面給出了一些建議:
(1)請(qǐng)求使用的是來(lái)自“CSV數(shù)據(jù)集配置”的數(shù)據(jù)
(2)使用的HTTP的POST住册、PUT、PATCH方法
(3)登錄和注銷(xiāo)后
(4)當(dāng)2xx status codes同時(shí)在正面測(cè)試和負(fù)面測(cè)試中返回
(5)在API性能測(cè)試中
(6)在功能測(cè)試中
(7)有SOAP / XML-RPC請(qǐng)求
需要注意:斷言消耗內(nèi)存瓮具,謹(jǐn)慎使用
斷言類(lèi)型
如果沒(méi)有斷言只能人工對(duì)比對(duì)接口返回的數(shù)據(jù)荧飞,接口很多時(shí),比對(duì)數(shù)據(jù)的過(guò)程就會(huì)非常耗時(shí)名党,而且也容易出錯(cuò)叹阔,可以通過(guò)Fiddler抓包http請(qǐng)求來(lái)設(shè)置
1、響應(yīng)斷言
在使用該斷言時(shí)传睹,需要熟練使用正則表達(dá)式耳幢,如果請(qǐng)求中使用了變量,響應(yīng)內(nèi)容里寫(xiě)${variable}
允許用戶(hù)通過(guò)添加模式字符串來(lái)比較驗(yàn)證服務(wù)器返回的響應(yīng)欧啤,Jmeter提供了很多種匹配規(guī)則睛藻,斷言中設(shè)置要測(cè)試的模式,實(shí)際響應(yīng)的內(nèi)容與設(shè)計(jì)的字符串進(jìn)行匹配堂油,如果返回的內(nèi)容包含了字符串修档,則認(rèn)為該次測(cè)試通過(guò)碧绞,否則就是失敻颉(模式中的內(nèi)容也可以參數(shù)化)
對(duì)斷言做判斷,只需添加【監(jiān)聽(tīng)器--斷言結(jié)果】
1)如果斷言成功,顯示的是HTTP請(qǐng)求名稱(chēng)
2)若失敗迫靖,則會(huì)顯示請(qǐng)求名稱(chēng)和失敗的原因(“Test failed XXXXXX”內(nèi)容)
PS:一個(gè)Sampler可以添加多個(gè)斷言院峡,根據(jù)你的檢查需求來(lái)添加相應(yīng)的斷言,當(dāng)Sampler下所有的斷言都通過(guò)了系宜,才算成功
比如在測(cè)接口時(shí)照激,返回值是True,只能說(shuō)明接口是通的盹牧,還得繼續(xù)驗(yàn)證返回的data值是否正確
- Apply to:一般情況下俩垃,使用默認(rèn)的就行,如果一次發(fā)送多個(gè)請(qǐng)求(Ajax請(qǐng)求汰寓,GET或POST)口柳,就需要根據(jù)實(shí)際斷言需要選擇其他選項(xiàng)了。
- 要測(cè)試的響應(yīng)字段:根據(jù)實(shí)際需要選擇
- 響應(yīng)文本
服務(wù)器響應(yīng)文本有滑,一般情況下跃闹,我們都是勾選改選項(xiàng),用于驗(yàn)證服務(wù)器返回值毛好。 - Document(text)
通過(guò)Apache Tika從各種的文檔中提取的文本進(jìn)行驗(yàn)證望艺,包括響應(yīng)文本,pdf肌访、word等等各種格式找默。jmeter會(huì)用Apache Tika去解析服務(wù)器響應(yīng)內(nèi)容,耗內(nèi)存吼驶、也耗時(shí)間啡莉,解析易失敗,盡量少用或不用旨剥。多用響應(yīng)文本方式來(lái)進(jìn)行斷言驗(yàn)證 - URL樣本
對(duì)請(qǐng)求的url進(jìn)行斷言咧欣,如果請(qǐng)求沒(méi)有重定向(302),那么該url即為請(qǐng)求的url轨帜;如果有重定向(切跟隨重定向)魄咕,那么url則包含了請(qǐng)求url和重定向url。 - 響應(yīng)代碼
即http響應(yīng)代碼蚌父,例如200哮兰,404等等,需要注意: 由于jmeter默認(rèn)情況下認(rèn)為4xx苟弛,5xx時(shí)該請(qǐng)求失敗喝滞,所以在斷言這類(lèi)響應(yīng)代碼時(shí),需要同時(shí)勾選Ingore Status膏秫,才能正常去做斷言右遭。 - 響應(yīng)信息
即響應(yīng)代碼對(duì)應(yīng)的信息,例如OK, Not Found等等這類(lèi)的窘哈。 - Ingore Status 請(qǐng)參見(jiàn)4響應(yīng)代碼的使用說(shuō)明吹榴。
- 響應(yīng)文本
如下常見(jiàn)類(lèi)似是響應(yīng)信息,即http響應(yīng)頭信息滚婉,主要用于斷言當(dāng)響應(yīng)頭帶有唯一或特定意義
HTTP/1.1 200 Ok
HTTP/1.1 302 Found
Response Header : 響應(yīng)頭信息图筹,例如
Server: Tengine
Date: Thu, 12 Mar 2015 09:43:52 GMT
Content-Type: text/html
Content-Length: 260Connection: close
Location: http://www.baidu.com/404.html
Response Headers
- 模式匹配規(guī)則:支持正則表達(dá)式
- 包括:返回結(jié)果包括指定的內(nèi)容,當(dāng)返回值固定時(shí)让腹,可以使用返回值做斷言远剩,效果和equals相同
- 匹配:用正則表達(dá)式必須能匹配整個(gè)返回值,而不是返回值的一部分
- Equals:返回結(jié)果與你指定結(jié)果完全一致
- Substring:返回結(jié)果是指定結(jié)果的字串骇窍,不支持正則字符串
- 否:相當(dāng)于取反民宿,即如果上述斷言結(jié)果為true,勾選“否”選項(xiàng)后像鸡,則最終斷言結(jié)果為false
- 要測(cè)試的模式:要匹配的響應(yīng)值(字符串或正則表達(dá)式)活鹰,即接口測(cè)試結(jié)果的期望值或者其他期望值
2、斷言持續(xù)時(shí)間
持續(xù)時(shí)間(uration in milliseconds):?jiǎn)挝皇呛撩胫还溃绻憫?yīng)時(shí)間大于設(shè)置的響應(yīng)時(shí)間志群,則斷言失敗,否則成功蛔钙!
3锌云、XPath Assertion
適用情況:服務(wù)器返回的響應(yīng)內(nèi)容是xml格式
- Apple to
一般選擇Main sample only即可。如果一次發(fā)送多個(gè)請(qǐng)求吁脱,則需要根據(jù)實(shí)際斷言需要選擇其他選項(xiàng)了桑涎。(例如一個(gè)ajax請(qǐng)求,會(huì)發(fā)送多個(gè)GET或POST時(shí)兼贡。) - XML Parsing Options
Use Tidy(tolerant parser):使用Tidy(容錯(cuò)解析器)攻冷,默認(rèn)選擇quiet
Quiet:不顯示
Report errors:錯(cuò)誤報(bào)告
Show warnings:顯示錯(cuò)誤
Use Namespaces:使用名稱(chēng)空間
Validate XML:驗(yàn)證XML(文件包/數(shù)據(jù))
Ignore Whitespace:忽略空格(允許指定語(yǔ)法分析器可以忽略哪個(gè)空格,而哪個(gè)空格是重要的)
Fetch external DTDs:獲取外部DTDs(一些XML元素具有屬性遍希,屬性包含應(yīng)用程序使用的信息等曼,屬性?xún)H在程序?qū)υ剡M(jìn)行讀、寫(xiě)操作時(shí)凿蒜,提供元素的額外信息禁谦,這時(shí)候需要在DTDs中聲明) - Path Assertion
輸入框中寫(xiě)入xpath斷言,點(diǎn)擊Validate驗(yàn)證其正確性 - True if nothing matches
確認(rèn)都不匹配
4废封、按照字節(jié)斷言
APPly to:應(yīng)用范圍(返回內(nèi)容的斷言范圍)
Main sample and sub-samples:作用于父節(jié)點(diǎn)取樣器及對(duì)應(yīng)子節(jié)點(diǎn)取樣器
Main sample only:僅作用于父節(jié)點(diǎn)取樣器
Sub-samples only:僅作用于子節(jié)點(diǎn)取樣器
JMeter Variable:作用于jmeter變量(輸入框內(nèi)可輸入jmeter的變量名稱(chēng))Response Size Field to Test:響應(yīng)字節(jié)的測(cè)試范圍(可以選擇用于判斷的響應(yīng)范圍)
Full Response:全部響應(yīng)
Response Headers:響應(yīng)頭部
Response Body:響應(yīng)主體
響應(yīng)代碼:響應(yīng)報(bào)文相關(guān)的代碼
響應(yīng)信息:響應(yīng)報(bào)文的信息Size to Assert:斷言字節(jié)范圍
字節(jié)大兄莶础:?jiǎn)挝皇亲止?jié);比較順序是①返回內(nèi)容的大衅蟆②比較類(lèi)型③指定字節(jié)大小
若未填值運(yùn)行時(shí)會(huì)報(bào)錯(cuò)
5遥皂、jp@gc - JSON Path Assertion
Jmeter4.0版本已增加JSON Assertion插件力喷,如果是3.2以上版本的話(huà)也可以在插件管理里面進(jìn)行下載,插件下載地址:https://jmeter-plugins.org/?search=jpgc-json
適用情況:服務(wù)器返回的響應(yīng)內(nèi)容是json格式
PS:點(diǎn)擊apply按鈕時(shí)渴肉,請(qǐng)記得保存測(cè)試計(jì)劃冗懦,因?yàn)榘惭b后會(huì)進(jìn)行重啟
參數(shù)說(shuō)明:
- JSON Path:json提取表達(dá)式爽冕,用于提取目標(biāo)json串節(jié)點(diǎn)值
- Validate against expected value:勾選該選項(xiàng)仇祭,則驗(yàn)證目標(biāo)期望結(jié)果,不勾選可以填寫(xiě) Expected Value
- Match as regular expression:支持正則表達(dá)式
- Expected Value:自定義期望值
- Expect null:期望值為null颈畸,勾選該選項(xiàng)乌奇,則會(huì)斷言結(jié)果為null的情況
- Invert assertion(will fail if above condition met):取反,如果上述兩種期望值斷言為true眯娱,勾選該選項(xiàng)礁苗,則斷言結(jié)果為fail;如果上述期望值斷言為fail徙缴,勾選該選項(xiàng)试伙,則斷言結(jié)果為true。
PS:若斷言成功于样,查看結(jié)果樹(shù)中是看不到的疏叨,若失敗,則會(huì)顯示錯(cuò)誤信息(如圖中提示天氣質(zhì)量預(yù)期值是良穿剖,但實(shí)際是優(yōu))
也可以通過(guò)監(jiān)聽(tīng)器-斷言結(jié)果來(lái)查看
PS:一個(gè)斷言在測(cè)試樹(shù)中是分等級(jí)的蚤蔓,如果父元件是請(qǐng)求,它就僅被應(yīng)用于那個(gè)請(qǐng)求糊余。如果它的父元件是控制器秀又,它就影響所有那個(gè)控制器下的所有請(qǐng)求。