jmeter正則表達式實例詳解
過年前產假歸來,jmeter很多知識生疏瞭,這兩天打開jmeter摸索瞭幾下,老瞭記不住,還是準備弄個jmeter系列隨筆吧。
言歸正傳,使用jmeter時經常有這樣的情況:一個完整的操作流程,需先完成某個操作,獲得某個值或數據信息,然後才能進行下一步的操作(也就是常說的關聯/將上一個請求的響應結果作為下一個請求的參數); 在jmeter中,利用正則表達式提取器來輕松幫助我們完成這一動作。正則表達式就是用於描述這些規則的工具。換句話說,正則表達式就是記錄文本規則的代碼。學習正則表達式最好就是從實例下手。下面讓我們進入實例。
實例1:從JDBC查詢數據,並提取查詢結果
1、新建線程組並把相關jar放到/lib或/lib/ext目錄、添加JDBC Connection Configuration等,此處省略,直接附上截圖
2、添加JDBC Request,Query Type=Select Statement,Varibale name=MySQL。建議在數據庫工具執行一次後,在後面察看結果樹時做對比,檢查是否提取正確。
3、在JDBC Request下創建正則表達式提取器,在JDBC Request元件下右擊【添加】-【後置處理器】-【正則表達式提取器】即可。本例子查詢兩列,所以需創建兩個正則表達式提取器
4、配置提取第一列字段,
Apply to通常是Main sample only,
要檢查的響應字段視情況選擇,在此例選【主體】,
引用名稱填id,即下一個請求要引用的參數名稱,使用格式${id},註意引用名稱命名不要跟線程組內其他變量名稱重復
正則表達式,則是本文章重點,這裡填([a-zA-Z0-9-]{1,}) ,
模板,選擇第一個匹配的字段,填$1$,用$$引用起來,如果在正則表達式中有多個正則表達式,則可以是$2$$3$等等,表示解析到的第幾個值給id。如:$1$表示解析到的第1個值
匹配數字,0代表隨機取值,-1表示全部,0隨機,1第一個,2第二個,
缺省值如果參數沒有取得到值,那默認給一個值讓它取。可填可不填,看具體使用場景。
5、配置提取第二列字段
Apply to填Main sample only,
要檢查的響應字段選【主體】,
引用名稱填phone,後面請求使用變量時格式${phone},
正則表達式,填(\d{10,}) ,
模板,選擇第一個匹配的字段,填$1$,
匹配數字,除瞭0,建議填1,
缺省值不填
6、檢查提取器提取結果,有兩種方法校驗結果。第一種。另外一個,就是不使用請求,。
方法1:添加Debug PostProcessor也可打印所有變量的值,添加即可,然後運行結果
,在察看結果樹可以看到提取變量的值是否正確
方法2:引用到下一個請求
實例2:從登錄響應請求頭提取JSESSIONID
1、繼續在實例1的基礎上,描述實例2。添加HTTP請求,用於登錄
運行一次,在察看結果樹看到取樣器結果有Set-Cookie: JSESSIONID。
2、在登錄HTTP請求元件下右擊【添加】-【後置處理器】-【正則表達式提取器】即可。正則表達式填寫:(?<=Set-Cookie: JSESSIONID=)\w+\b
3、在線程組內部站點下創建HTTP Cookie管理器,並引用正則表達式提取的引用變量JSESSIONIDw。格式為${JSESSIONIDw}
4、運行一次,在察看結果樹其他需要登錄才能請求的請求檢查
實例3(簡單):提取單個字符串
例匹配Web頁面的如下部分:name = “file” value = “readme.txt”>並提取readme.txt。一個合適的正則表達式:name = “file” value = “(.+?)”>。
():封裝瞭待返回的匹配字符串。
.:匹配任何單個字符串。
+:一次或多次。
?:不要太貪婪,在找到第一個匹配項後停止。
實例4(簡單):提取多個字符串
例匹配Web頁面的如下部分:name = “file.name” value = “readme.txt”>並提取file.name和readme.txt。一個合適的正則表達式:name = “(.+?)” value = “(.+?)”。這樣就會創建2個組,分別用於$1$和$2$
比如:
引用名稱:MYREF
模板:$1$$2$
如下變量的值將會被設定:
MYREF: file.namereadme.txt
MYREF_g0: name = “file.name”value = “readme.txt”
MYREF_g1: file.name
MYREF_g2: readme.txt
在需要引用地方可以通過:${MYREF}, ${MYREF_g1}進行使用
實例5(簡單):找到所有小數的數字,比如10.2
引用名稱:aa
正則表達式:([0-9]+\.[0-9]+)
模板:$0$區配數字:-1調用:
${aa_1}:取出第一個滿足要求的數字
${aa_2}:取出第二個滿足要求的數字
實例6(簡單):找到所有小數點後的數字
引用名稱:aa
正則表達式:([0-9]+)\.([0-9]+),必須用括號分組
模板:$2$(第二組)
區配數字:-1取出所有符合要求的調用:
${aa_1}:取出第一個滿足要求的數字
${aa_2}:取出第二個滿足要求的數字
實例7(簡單):找到第一個有小數的數字
引用名稱:aa
正則表達式:([0-9]+)\.([0-9]+),必須用括號分組
模板:不寫可以,也可以$2$$1$
區配數字:1(第一個)調用:
${aa_g1}:取出滿足要求的第一組數字
${aa_g2}:取出滿足要求的第二組數字
實例8(簡單):找到所有小數的數字
引用名稱:aa
正則表達式:([0-9]+)\.([0-9]+),必須用括號分組
模板:不寫可以,也可以$2$$1$
區配數字:-1取出所有符合要求的調用:
${aa_1_g1}:取出第一個滿足要求的第一組數字
${aa_1_g2}:取出第一個滿足要求的第二組數字
${aa_2_g1}:取出第一個滿足要求的第一組數字
${aa_2_g2}:取出第一個滿足要求的第二組數字
如何檢查正則表達式
工具使用Regester檢查編寫的正則表達式是否正確。可訪問deerchao.net下載
jmeter正則表達式提取器參數說明
後置處理器:在請求結束或者返回響應結果時發揮作用。
正則表達式提取器:允許用戶從服務器的響應中通過使用perl的正則表達式提取值。該元素會作用在指定范圍取樣器,用正則表達式提取所需值,生成模板字符串,並將結果存儲到給定的變量名中。
APPly to:作用范圍(返回內容的斷言范圍)
Main sample and sub-samples:作用於父節點的取樣器及對應子節點的取樣器
Main sample only:僅作用於父節點的取樣器
Sub-samples only:僅作用於子節點的取樣器
JMeter Variable:作用於jmeter變量(輸入框內可輸入jmeter的變量名稱)
要檢查的響應字段ResponseFieldtocheck:需檢查的響應報文的范圍
Body:主體,響應報文的主體,一個網頁頁面的內容,除瞭信息頭以外的內容
Body(unescaped):主體,響應的主體內容且替換瞭所有的html轉義符,註意html轉義符處理時不考慮上下文,因此可能有不正確的轉換,不太建議使用
BodyasaDocument:從不同類型的文件中提取文本,註意這個選項比較影響性能
Response Headers:響應信息頭
Request Headers:請求信息頭
URL:統一資源定位符,即Internet上用來描述信息資源的字符串
Response Code:響應狀態碼,比如200、404等
Response Message:響應信息
引用名稱(ReferenceName):Jmeter變量的名稱,存儲提取的結果;即下個請求需要引用的值、字段、變量名。每個存儲組需要使用共結果時,應使用:[refname]_g#,其中[refname]是你輸入的名字,#是組號,0是整個匹配結果,而1是指第一組匹配值
引用方法:${引用名稱}
正則表達式(RegularExpression):使用正則表達式解析響應結果,“()”表示提取字符串中的部分值,請不要使用“||”,除非你需要匹配這字符。
下面是常用的正則表達式操作符:
模板(Template):從匹配的結果中創建一個字符串,這是通過正則表達式匹配出來的一組值,意為使用提取到的第幾個值(可能有多個值匹配,因此使用模板);從1開始匹配,以此類推。
通過正則表達式匹配出來的一組值,語法為:$1$指代第一組,$2$指代第二組,$0$指代整個匹配結果
參數可以在取值模板組合使用,例如:“11-22”作為模板得到的值是使用“-”連接的第一個待匹配內容與第二個待匹配內容組合而成的字符串。
匹配數字(MatchNo):正則表達式匹配數據的結果可以看做一個數組,表示如何取值:0代表隨機取值,正數n則表示取第n個值(比如1代表取第一個值),負數則表示提取所有符合條件的值。一般與ForEach控制器配合使用。
缺省值(DefaultValue):匹配不到數據時,引用變量返回一個默認值,在調試中此功能很有用,如果沒有設置默認值,那麼很難分辨出正則表達式是否有匹配到數據或使用是否正確,當然也可據測試需求,在調試完成後去掉默認值的設置。通常用於後續的邏輯判斷,一般通常為特定含義的英文大寫組合,比如:ERROR
正則表達式語法
到此這篇關於jmeter正則表達式的文章就介紹到這瞭,更多相關jmeter正則表達式內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 全網最全最細的jmeter接口測試教程以及接口測試流程(入門教程)
- JMeter對MySQL數據庫進行壓力測試的實現步驟
- 使用Jmeter進行http接口測試的實踐
- JMeter連接Mysql數據庫的實現步驟
- Java使用jmeter進行壓力測試