Jmeter 關聯案例(正則表達式提取器+Json提取器)
本次案例使用到正則表達式提取器,利用招生系統http://192.168.239.130:8080/recruit.students/login/view,實現新建學校和立馬禁用學校的關聯,也就是新建學校和禁用學校這兩個步驟處在同一個線程內完成。
學習參考鏈接:https://www.cnblogs.com/wwho/p/7277349.html
為什么創建學校和禁用學校要進行關聯?
下面我們先分析一下禁用學校這個步驟:
那id
和schoolId
都是動態變化,那它們是跟着哪里變化的,根據哪里變化的,這些動態變化的數字是哪里產生的?
答案是新建學校一步為每一個新建的學校創建了不同的id
和schoolId
接下來通過分析創建學校一步:
學校這里設置沒有什么問題,學校名被參數化了,所以每次運行基本都能成功新建新的學校。
運行測試計划,查看結果觀察樹,發現新建學校一步的響應內容包含了禁用學校一步需要的請求信息:
所以我們可以給新建學校一步添加正則表達式后置提取器,從響應內容response data
提取禁用一步需要的數據,最后進行參數化,達到關聯和動態變化的效果。
正則表達式提取器使用方法:
Apply to:和要檢查的相應字段,一般都默認,主要是針對響應數據中的值去處理,如有其它需要,可以參考jmeter說明
- 引用名稱:自己定義的變量名稱,后續請求將要引用到的變量名,如填寫的是:actionId,后面的引用方式是${actionId}
- 正則表達式:提取內容的正則表達式,相當於lr中的關聯函數
- 【"()" 括起來的部分就是需要提取的,對於你要提的內容需要用小括號括起來】
- 【".":匹配除了換行符以外的任何字符】
- 【"*"(貪婪) 重復零次或更多
例如"aaaaaaaa" 匹配字符串中所有的a 正則: "
a*
" 會出到所有的字符"a"】
- 【"+"(懶惰) 重復一次或更多次
例如"aaaaaaaa" 匹配字符串中所有的a 正則: "
a+
" 會取到字符中所有的a字符, "a+
"與"a
"不同在於"+"至少是一次而"" 可以是0次】
【"?"(占有) 重復零次或一次
例如"aaaaaaaa" 匹配字符串中的a 正則 : "
a?
" 只會匹配一次,也就是結果只是單個字符a】【"*?" 重復任意次,但盡可能少重復
例如 "acbacb" 正則 "
a.*?b
" 只會取到第一個"acb" 原本可以全部取到但加了限定符后,只會匹配盡可能少的字符 ,而"acbacb"最少字符的結果就是"acb" 】【"+?" 重復1次或更多次,但盡可能少重復,與"*?" 一樣,只是至少要重復1次】
還有分組的情況,常用的就這兩種,其它的可以再自行百度
- 【"(?=exp)" 匹配exp前面的位置】
- 【"(?<=exp)" 匹配exp后面的位置】
- 模板:用$$引用起來,如果在正則表達式中有多個正則表達式(多個括號括起來的),則可以是$2$,$3$等等,表示解析到的第幾個值給actionId。例如:$1$表示匹配到的第一個值
- 匹配數字:0代表隨機取值,-1代表所有值,此時提取結果是一個數組,其余正整數代表第幾個匹配的內容提取出來。如果匹配數字選擇的是-1,還可以通過${actionId}的方式來取第1個匹配的內容,${actionId}來取第2個匹配的內容。
- 缺省值:正則匹配失敗時,取的值
本次案例的兩個正則表達式設置為:
"data":{"id":(.*?),"schoolName
登錄帳號為(.*?),密碼為
設置好正則表達式提取器后,將禁用一步的id
和schoolId
進行參數化:
然后,運行,刷新瀏覽器,最終的目標效果如下(新建學校后,立馬禁用了學校):
本案例的jmx
文件下載鏈接:https://github.com/jimmy688/jmeter_jmx_files
補充:其實禁用要用到的id
和schoolId
不一定非要從新建學校一步的響應body
里面提取,也可以從其它地方提取,如學校的列表頁。而且,因為新建學校的響應內容是json格式的,我們還可以使用json
提取器來替換正則表達式提取器,兩者能達到的效果是一樣的。
保證自己寫的json
表達式能提取出我們想要的數據的方式:
1、查看觀察樹,查看新建學校一步,選擇json格式:
2、進行Test
試驗:
如果響應內容是json
格式的,我們就可以使用后置json
提取器來提取,否則就用正則表達式的就行,也還有其它類型的提取器可以用。
不同類型的提取器用法都差不多,只不過是這個表達式的提取語法不太一樣而已。