我們在做接口測試過程中,往往會遇到以下幾種情況
- 每次發送請求,都需要更改參數值為未使用的參數值,比如手機號注冊、動態時間等
- 上一個接口的請求體參數用於下一個接口的請求體參數
- 上一個接口的響應體參數用於下一個接口的請求體參數,比如:sessionId、token
- 上一個接口的響應體參數用於下一個接口的url接口地址中
- 上一個接口的響應頭參數用於下一個接口的請求體參數,比如:token
- ......
針對以上種種情況,我們都可以通過參數化和正則提取的方式來解決
一、參數化
舉例演示,提供一個注冊和登錄的接口,請求體需要手機號和密碼進行注冊登錄,並且注冊過的賬號再次注冊會提示已注冊,因為不管是未注冊還是已注冊的手機號去注冊接口都會調用成功,所以我會在注冊接口上添加一個斷言
注冊接口:
登錄接口:
斷言:
我們再次注冊時,就會斷言失敗
1.用戶定義的變量
上面的示例看到,每次去調用接口都要手動修改手機號碼,並且注冊和登錄接口都要同步修改,這樣操作相當繁瑣,針對這個問題我們使用用戶定義的變量的工具進行優化
在線程組上:右鍵—>添加—>配置元件—>用戶定義的變量
我們把注冊和登錄的手機號和密碼都提取出來放到這里
定義了之后,我們需要調用該參數,調用方式是在對應的取樣器里,使用${key}的格式替換取樣器請求體里的值,這樣我們就可以每次只修改一次就可以在所有的接口上通用了
雖然在此基礎上已經得到了相應的優化,我們能不能做到每次運行的時候都不用去修改用戶定義的變量里面的值呢?答案是可以的,這時候我們要使用到函數助手,構造相應的隨機函數
對於函數的各種用法,這里不做說明,可以通過函數助手的幫助去查看各個函數的使用方法
我們通過函數助手來構造一個生成隨機手機號的方法來替換用戶定義的變量的值
2.CSV數據文件設置
該方法也是參數化的一種場景,我們可以提前使用csv文件或者其它文本文件(txt、log、xml、json...)構造大量數據,然后再讀取文件里面的內容引用到對應的接口當中去,這里要注意的是在國內csv我們使用excel編輯器保存后遇到中文會出現亂碼的情況,因此需要進行轉碼后才能正常使用!
在線程組上:右鍵—>添加—>配置元件—>CSV 數據文件設置
我們先構造測試數據
然后配置CSV數據文件設置:
此時我們可以直接替換接口參數的值為該變量名稱,但是不可以替換用戶定義的變量的值,會引用不到
執行結果如下:
我們如果設置並發量為5,則會依次讀取每一行數據
3.用戶參數
在用戶定義的變量中使用隨機生成手機號的方式執行,它的執行原理是在整個線程組執行會話之前創建一次后,執行過程中的所有線程都會去使用這個值,並不是每個線程組使用時都會隨機生成不一樣的值,所以在並發測試中,遇到這種情況就不行了,因此我們可以用戶參數的工具來使得每個線程組調用的時候都能隨機生成一個隨機數
在線程組上:右鍵—>添加—>前置處理器—>用戶參數
我們可以將上面用戶定義的變量中由函數助手生成的函數拿到用即可
我們將接口參數化替換
設置並發為10,查看結果:
二、正則提取
上面我們處理的是隨機數,這里我們則要通過一些方法將下個接口要使用的參數用上個接口的請求體、響應頭或者響應體中提取出來,以此來處理接口依賴的問題,因為暫時沒有好的實例,這里只講使用方法
1.JSON提取器
在指定的接口取樣器上:右鍵—添加—后置處理器—JSON提取器
我們在查看結果樹里面將JSON Path Tester調出來,可以進行編寫表達式進行測試驗證表達式是否正確,注意該提取器只適用於接口的json響應體
JSON提取器的表達式語法格式為:$.key的格式
如果響應體遇到嵌套列表的形式,如:
{"domain": [ {"id": "sdfhhsdfafvgg"}, {"name": "Tom"} ] }
如果要提取name的值,表達式為:$.domain[1].name
{ "tenant": "admin", "domain": [ {"id": "sdfhhsdfafvgg", "name": "Tom"}, {"id": "234gdgdh45h", "name": "Jerry"} ] }
如果要提取所有name的值,表達式為:$..name 返回結果為一個列表
我們將正確的表達式填入到JSON提取器的配置當中,后面的接口就可以通過${變量名稱}的方式調用該參數
2.正則表達式提取器
在指定的接口取樣器上:右鍵—添加—后置處理器—正則表達式提取器
正則表達式的格式:左邊界(.*?)右邊界 以code為例:
我們執行一次查看提取結果:
更多關於正則表達式的語句請跳轉到此博客地址:https://www.cnblogs.com/xiaogongjin/p/11986493.html