一、應用場景
1、現在有兩個接口,一個是登錄,一個查詢,但查詢接口必須要依賴登錄接口的token,那么通過正則表達式提取器提取登錄接口的響應結果
2、現在有兩個接口,A接口返回列表數據,另一個查詢接口的參數是A接口返回的列表的數據
那么為了解決以上兩個問題,我們先了解下正則表達式
二、必備的正則表達式:
書寫方式為:元字符+限定符
元字符 | 意義 | 限定符 | 意義 |
. | 任意單個字符 | + | 匹配至少大於1次 |
\d | 任意單個數字 | ? | 匹配0次或1次 |
[0-9] | 等價0-9 | * | 匹配0次或多次,貪婪匹配 |
[a-zA-Z] | 等價所有的大小寫字母 | {n,} {n,m} {n} | 匹配限定次數 |
三、正則表達式提取器的使用
即在某個請求的響應結果中拿到某個值或某些值
1、操作:在HTTP請求上右擊->添加->后置處理器->正則表達式提取器(該提取器是隸屬於某個請求下的)
2、正則表達式的書寫
需求: 想要獲取【軟件測試工程師】這個內容
接口返回的部分內容如下:
首先找到左右邊界,寫好正則表達式,根據邊界可以唯一確定取到的值。
步驟:(1)先在響應結果中確定要提取內容的左右邊界,那么【軟件測試工程師】的左邊界是"JobName": ",右邊界是",
(2)再將要提取的內容用英文圓括號括起來,即"JobName": "(軟件測試工程師)",,注意:一定要根據邊界可以唯一確定取到的值。
(3)最后將()內用正則表達式表示出來,即"JobName": "(.{7})"
注意:想從【"JobName": "軟件測試工程師","JobName": "開發",】提取到【"JobName": "軟件測試工程師",】,如果正則表達式為【"JobName": "(.*)",】
那么提取到的內容是【"JobName": "軟件測試工程師","JobName": "開發",】而不是【"JobName": "軟件測試工程師",】
3、正則表達式提取器中其他內容
1表示根據正則表達式提取到的結果賦值變量名
2中寫的正則表達式可以有多個,如下,而()起到了分組作用
3中$1$表示提取(.{7})的值,$2$表示提取(.*)的值,注意$中間的數字必須從1開始,否則得到的結果為null
4中0表示當根據正則表達式可以匹配到多個內容時,每次會隨機取出一個符合條件的值,那如果想拿到符合正則表達式的所有值時,就把4處的地方填-1即可
4、正則表達式提取器結果的查看
在線程組->右鍵添加->取樣器->Debug Sample(調試取樣器)
啟動線程,調試取樣器的結果如圖:job指根據正則表達式獲取到的內容,注意模板中兩個值用-連接,所以job = job_g1-job_g2
job_g1和job_g2分別是$1$和$2$的值
四、在依賴的HTTP請求中利用正則表達式提取到的值
job、job_g1、job_g2是提取到請求1結果值的內容,將作為請求2的參數值,參數格式依然是${變量名},那么應用場景1的接口依賴就解決了
五、foreach循環控制器的使用
正則表達式提取器中匹配數字填-1,匹配到的結果值有多個,如圖,在調試取樣器中總共有13個值,那么如何將這些值作為請求2的參數呢
可以通過添加ForEach控制器:線程組->添加->邏輯控制器->ForEach控制器
注意:要將依賴接口放在For Each邏輯控制器下面
在調試取樣器中的變量名都是menu_X(X是從1開始的整數),而menu正是在正則表達提取器中設置的引用名稱;
1中輸入變量前綴和正則表達提取器中設置的引用名稱要保持一致
2循環字段表示通過調試取樣器拿到的變量,暫且稱為列表吧,那么這里就填寫你想引用列表的范圍
3表示你給從列表中取到的每個值賦個變量名,哈哈,是不是很眼熟呢。。。不就是python中學的for循環呢?
即for id in menu:
好了,那如何在接口2中引用這些變量呢?很簡單,依舊在接口2中參數中變量以${變量名}的方式,如圖:
六、整個測試計划如圖:
七、Json Path提取器
適用場景接口返回是json格式的數據
在HTTP請求上右擊添加->后置處理器->JSON提取器
比如想要拿到接口1中的canDemo值作為第二個接口的參數,那么可以先在JSON PATH Expression中輸入對應的表達式,$表示根節點,點號表示下一級
那么在json提取器中設置變量名,json提取表達式
那么在接口2中如何使用提取到的變量呢?依舊是${變量名}
最后得到的測試計划如圖:
八、HTTP Cookie管理器
https://www.cnblogs.com/liulinghua90/p/9257552.html
https://www.cnblogs.com/liulinghua90/p/9257548.html