如果你在JMeter腳本中看到這樣一些符号:(.*?)(\d ),你是否會以為程序出現了亂碼?拆開來看每個符号似乎都有固定的含義,組合在一起竟成了令人費解的天書。這些神秘符号究竟蘊含了哪些強大的功能,下面讓我們一起來揭開它的面紗。
一、什麼是正則表達式
上文提到的特定符号的組合叫做正則表達式,在JMeter工具中用來表達對字符串的一種邏輯過濾。正則表達式的功能分為“提取”和“匹配”,前者用來從字符串中獲取我們想要的部分,後者用來将提取到的字符串和一個給定的字符串做比對。正則表達式的好處自然不言而喻,它實現了通過極其簡單的方式達到字符串的複雜控制,同時兼具了靈活性與邏輯性。
二、如何添加正則表達式
1、添加正則表達式提取器
HTTP請求->添加->後置處理器->正則表達式提取器。
正則表達式的作用範圍為線程組,因此正則表達式的層級應該位于需要提取返回值的請求器下面,即作為請求的子器件,并且需要通過正則表達式進行數據關聯的兩個請求應放在同一個線程組内。
2、書寫正則表達式
正則表達式提取器包含以下元素:
名稱:定義了正則表達式的名稱
注釋:編寫腳本時的注解
應用範圍:應用于主取樣器或子取樣器,一般使用默認選項
要檢查的響應字段:樣本數據源
引用名稱:在其他取樣器中引用變量的名稱,用法為${引用名稱}
正則表達式:數據提取器,()裡面是響應報文中匹配數據的規則
模闆:用$$括起來,如果包含多個正則表達式,$1$表示提取第一個正則表達式解析出來的值,$2$表示第二個正則表達式提取結果,等等。
匹配數字:正則表達式匹配數據的所有結果可以看做一個數組,匹配數字可以看做是數組的第幾個元素。-1表示全部,0表示随機,1是第一個,2是第二個,依此類推。
缺省值:如果提取失敗,引用變量的默認值,可以為空。
三、如何使用正則表達式
那麼,正則表達式要如何使用呢,它有哪些常見的使用場景呢,下面讓我們通過幾個例子來學習正則表達式的用法。
場景一:獲取網站登錄信息Token
我們在使用JMeter錄制web腳本時,常常需要使用Token作為用戶身份鑒别的标志。Token是服務端為每個用戶創建的一個令牌,當該用戶第一次登錄時,将服務端生成的Token帶回客戶端,以後客戶端請求隻需帶上這個Token,服務端就能識别出請求方的身份,而無需再次驗證用戶名和密碼。
那麼,Token如何獲取,又如何動态賦值給下一個請求呢。這裡,我們給登錄會話添加一個正則表達式提取器。
首先,從登錄會話的返回報文中,找到"token: ",然後在腳本中添加正則表達式提取器,引用名稱為token,正則表達式為"token":"(.*?)",模闆為$1$。這個正則表達式的含義是,()中封裝了待返回的字符串,.表示匹配任意字符串,*?表示匹配零次或多次後停止。完整的含義是:匹配開始字符為: ",結束字符為最後一個",匹配兩個引号之間的任意字符,匹配一次或者多次,當匹配到第一個字符串即停止,将字符串保存到變量token。
在下一個查詢交易請求中,可以直接使用變量${token}關聯token信息。線程組循環多次執行,${token}始終保持當前登錄狀态的取值,并賦值給查詢交易的請求。
場景二:性能測試循環使用數據
在進行性能測試時,某些特殊的場景往往導緻數據不能循環使用,或者有使用次數限制,而高并發壓力測試需要龐大的數據量,因此準備數據費時費力。這時,将兩個“反向”的交易串聯起來,便可輕松解決數據循環使用的困難。比如做理财購買交易的性能測試時,随着測試輪次的增加,賬戶餘額越來越少,如何方便快捷地實現資金回退呢。根據不同理财産品業務邏輯的差異,有賣出和撤單兩種選擇。假如當前産品支持實時持有,讓客戶買完再賣出,相當于前面的購買行為被抵消了。
在設計測試腳本時,需要把購買和賣出請求放在同一個線程組裡。首先設計正則表達式,通過"NUM_SEQ_AR ":"(\d )"提取買入成功返回的合約号,\d表示提取純數字,一般金融機構合約号都是數字形式存儲。
然後通過${Seq}引用合約号,作為賣出交易的輸入數據,客戶賬戶信息可以和買入交易來自同一個CSV文件,實現前後交易一緻。
通過添加JMeter調試工具,後置處理器->Debug PostProcessor,觀察正則表達式運行情況。
正則表達式提取合約号與買入返回報文一緻,正則表達式書寫正确。
正則表達式看着複雜,其實隻要理解了它的用法,在實際使用場景中隻需具體問題具體分析,結合資料多動手實踐,不管多棘手多複雜的問題都有辦法化解。正則表達式蘊含了強大的功能,本文也隻是做了最基本的介紹,同學們可以自行摸索更多用法,讓我們的性能測試、接口測試變得更加easy!
如果你的也有很多問題想要解決,你的測試職業規劃也需要一點光亮,你也想跟着大家一起分享探讨,我給你推薦一個「Python自動化測試學習交流群」你缺的知識這裡有,你少的技能這裡有,你要的大牛也在這裡……
請關注 私信回複:“測試”就可以免費拿到軟件測試學習資料,同時進入群學習交流~~
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!