響應斷言?:對服務器的響應進行斷言校驗
(1)應用范圍:?main?sample?and?sub?sample,?main?sample?only?,?sub-sample?only?,?jmeter?variable
關于應用范圍,我們大多數勾選“main?sample?only”?就足夠了,因為我們一個請求,實質上只有一個請求。但是當我們發一個請求時,可以觸發多個服務器請求,類似于ajax那種,那么就有main?sample??和?sub-sample之分了。
此外,對于有重定向的請求,并且勾選了“跟隨重定向”,?那么這兩個請求都是?sub-sample,重定向后的請求(第二個請求)就是main-sample
關于main?sample?and?sub?sample,有興趣的可以看看這個帖子
http://stackoverflow.com/questions/28214936/jmeter-in-which-scenario-i-can-use-main-sample-or-sub-sample-or-both-for-te
(2)響應字段:?響應文本,Document(Text),url樣本,響應代碼,響應信息,Response?Header,ignore?status
響應文本:?服務器響應文本,一般普通http響應,都勾選這個。
Document(Text):一切Apache?Tika?支持服務器響應,包括文本響應,還支持?PDF,?Office,?Audio,?Video?formats。jmeter會用Apache?Tika?去解析服務器響應內容,會很耗內存,而且也很容易解析失敗。所以一般普通http請求,不要選擇這個。
url樣本:是對sample的url進行斷言。如果請求沒有重定向(302),那么就是這個就是請求url。?如果有重定向(且跟隨重定向),那么url就包含請求url?和?重定向url
響應代碼:http響應代碼,如101,200,302,404,501等。但當我們要驗證404,501等http響應代碼時,需要勾選“?ignore?status”。因為當http?響應代碼為400,500時,jmeter默認這個請求時失敗的。
響應信息:http響應代碼對應的響應信息,例如:OK,?Found
HTTP/1.1?200?Ok
HTTP/1.1?302?Found
Response?Header?:?響應頭信息,例如
Server:?Tengine
Date:?Thu,?12?Mar?2015?09:43:52?GMT
Content-Type:?text/html
Content-Length:?260
Connection:?close
Location:?http://www.baidu.com/404.html
(3)模式匹配規則
包括:返回結果包括你指定的內容,支持正則匹配
例如:
響應字段為:?響應文本
模式匹配規則:匹配
斷言為:1、invalid????2、[a-z]+
當返回值為:{"msg":"channel?invalid."}?,?這兩個斷言都是ok的,返回true
匹配:
(1)?相當于?equals?。當返回值固定時,可以返回值做斷言,效果和equals相同
(2)?正則匹配?。?用正則表達式匹配返回結果,但必須全部匹配。?即正則表達式必須能匹配整個返回值,而不是返回值的一部分。 例如: 響應字段為:?響應文本
模式匹配規則:匹配
斷言為:1、{"msg":"channel?invalid."}???2、{"msg":"[a-z]+?invalid."}??,?3、[a-z]+
當返回值為:{"msg":"channel?invalid."}???,斷言1?2?是ok的,?斷言3是false
當返回值為:{"msg":"channel?invalid."}?,?斷言1?3是false,?斷言2才是ok的。
原因是,斷言1?只能用于equals,而斷言3?只匹配了返回值部分,而不是全部匹配。
Equals?:?返回結果與你指定斷言完全一致
SubString:與?“包括”差不多,都是指返回結果包括你指定的內容,但是subString不支持正則字符串
例如:
響應字段為:?響應文本
模式匹配規則:匹配
斷言為:1、invalid????2、[a-z]+
當返回值為:{"msg":"channel?invalid."}?,?斷言1返回true,?但斷言2返回false
否:就相當于取反。?如果上面斷言結果為true,勾選“否”后,最終斷言結果為false。如果上面斷言結果為false,勾選“否”后,則最終斷言結果為?true。