背景:
在用JMeter寫接口case,遇到一種情況,接口1查看列表接口,接口2查看詳情接口,接口2需要傳入接口1列表的第一條數據的id
如果這個id后續改變較多,可以使用非全局變量的設置方法
如果這個id在整個case都比較固定,那么可以使用全局變量設置方法
對於非全局變量的設置方法
解決方案:
首先放一下總體截圖
具體步驟
1-新建一個Thread Group即線程組,在該線程組下面添加接口1的HTTPrequest,填寫路徑方法和參數等(選擇線程組右鍵-add-HTTPrequest)
2-選擇接口1的HTTPrequest ,右鍵新建一個正則表達式提取器,即上圖中的“提取id”
3-在結果樹觀察列表接口的返回值,確認正則表達式 "content":\[\{"id":"(.+?)"能夠獲取到第一個id,關於正則表達式語法可參考菜鳥教程
4-將正則表達式和id補充到提取器的正則表達式內,注意要勾選驗證區域!否則會搜不到,我們這里是查看返回值,選擇了Body
引用名稱:下一個請求要引用的參數名稱,如填寫id,則可用${id}引用它
模板:用$*$引用起來,表示解析到的第幾個值,如:$1$表示解析到的第1個值
匹配數字:0代表隨機取值,1代表第一個,-1代表每一個
5-在線程組下,新建一個 Debug Sampler(新建路徑:右鍵新線程組 - 添加 - Sampler - Debug Sampler),方便查看所提取的環境變量值是否正確
6-在當前線程組下新建一個接口2的HTTPrequest,寫清路徑方法等,傳參的id 寫${id}
注意!!兩個接口必須在一個線程組下面,否則會獲取不到提取值。
當然依賴接口1數據的接口2在順序上,也應該在下面,JMeter的接口運行時按序運行的
7-查看結果樹
設置全局變量:
如果要將上面的ID設置成全局變量,那么
1- HTTP request的提取ID下面,新建一個BeanShellPostProcesser,如下圖 ${__setProperty(id,${id},)}
如果是取得cookie里的,那么使用${__setProperty(cookie_id,${id},)}
2-以上就設置了全局變量,變量名為Id,所謂全局,就可以新建一個Thread Group,傳參如下圖${__property(id)}
注意這里小括號里的變量名,適和提取id里的變量名一致的,否則會導致失敗