Jmeter用於接口測試時,后一個接口經常需要用到前一次接口返回的結果,應該如何獲取前一次請求的結果值,應用於后一個接口呢,拿一個登錄的例子來說明如何獲取。
1、打開jmeter, 使用的3.3的版本,新建一個測試計划,在測試計划里新建一個線程組,新建一個登錄的http請求,如圖所示:
2、查看登錄返回的結果:
3、充值接口需登錄后才能操作,此時可以使用cookie方式,驗證此用戶已經登錄,在充值接口里添加cookie管理器:
這里的sign就是上一個登口接口返回的sign值,
4、在登錄請求下新建一個后置處理器,提取返回結果值:
5、查看接口運行結果:
總結: 以上就是jmeter的關聯實現,如果有其他的接口需要前一次請求的結果,也可以添加的后置處理器提取變量,作用於后一個接口中,實現參數動態變化。
關於正則表達式的舉例說明:
1、提取單個字符串:
假如想匹配Web頁面的如下部分:name = "file" value = "readme.txt">並提取readme.txt。一個合適的正則表達式:name = "file" value = "(.+?)">。
():封裝了待返回的匹配字符串。
.:匹配任何單個字符串。
+:一次或多次。
?:不要太貪婪,在找到第一個匹配項后停止。
2、提取多個字符串:
假如想匹配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進行使用。
當請求之間有依賴關系,比如一個請求的入參是另一個請求返回的數據,這時候就需要用到關聯處理,Jmeter可以通過“后置處理器”中的“正則表達式提取器”來處理關聯。
簡單的關聯
比如在訪問百度首頁時響應數據里面有一個title
<title>百度一下,你就知道</title> 我就想在其他的請求中引用這個title
添加正則表達式提取器並設置如下:
添加一個關聯請求來驗證這個關聯:
執行后我們看到關聯成功了
復雜一點的關聯,像取正則表達式結果里面多個值
比如一個請求的響應數據如下:
我們嘗試來提取0.0,84956.0,1019,3這四個數據,添加正則表達式提取器做如下設置
引用名稱: 引用名稱和引用的方法,不用多解釋,和變量參數化差不多。
正則表達式: 凡是要被引用的部分都替換成圓括號,括號內具體的表達式您可以單獨查閱正則表達式相關的知識。
模板: 代表從正則表達式結果引用的樣式,其實結果是一組,而不是一個。$0$代表這一組結果的全部,$1$代表這一組結果的第1個,以此類推;
$1$$2$代表該正則表達式一組結果中的第1個和第2個,倆結果挨在一起中間沒有間隔;
$3$,$4$代表該正則表達式一組結果中的第3個和第4個,倆結果間有一個逗號相連。
匹配數字: 0代表正則表達式結果組中隨機,1代表全部。
缺省值: 當引用不對時顯示傳遞的信息,通暢寫一個ERROR。
如上設置好正則表達式提取器后,我們可以添加一個被關聯的驗證請求,如下:
事實上,myref_g0,myref_g1...myref_g4 是正則表達式的結果組,而myref才是被模板控制提取出來結果,這里為了更清晰的觀察正則表達式的結果組才在驗證請求中添加這么多參數,實際使用是用一個myref和模板配合就可以了。
myref_g0={"rent":0.0,"price":84956.0,"totalprice":1019,"roomType":3}
myref_g1=0.0
myref_g2=84956.0
myref_g3=1019
myref_g4=3
1. 模板 $0$
2.模板$1$$2$
3.模板$3$,$4$
另外對於匹配數字,目前我只看到 0和1,取其他整數的情況也許還有,那一定是更復雜一點的情況,目前0或1對我來說已經夠用了,以后遇到其他情況再來更新吧。