接口測試包含單接口測試和多接口測試,通過組合多個接口實現一組功能的驗證稱為多接口測試,單接口重在單個接口多種請求組合的響應斷言,多接口重在組合不同接口,實現流程的串聯和驗證。多接口測試涉及到接口之間參數的傳遞,比如AB兩個接口協同完成一個功能,A接口的響應要作為B接口的輸入,此處就需要用到Jmeter的關聯功能。本文提供兩個接口的串聯示例,展示如何應用Jmeter實現多接口的參數傳遞。
關聯就是把應用中動態變化的數據獲取到,將它保存為參數,提供給后面需要用到的地方進行使用,通過關聯可以實現多接口之間的參數傳遞。Jmeter常用兩種關聯組件:
-
正則表達式提取器
-
Json Extractor
接口示例
接口A:輸入用戶名,密碼創建用戶,返回新增用戶id
接口B:輸入用戶id,用戶名,密碼等信息實現編輯用戶(B接口基於A接口返回的新增用戶id實現數據修改)
正則表達式提取器
正則表達式提取器是一種后置處理器,它可以通過正則的方式提取請求中的響應數據,Jmeter的正則表達式提取器有如下選項
引用名稱:存儲匹配結果的變量名稱,可以是一個值也可以是一組值
正則表達式:匹配的正則表達式,正則表達式里面可以有多個正則
正則貪婪模式和非貪婪模式匹配:貪婪模式會盡可能多的匹配內容,非貪婪模式會盡可能少的匹配內容,貪婪模式和非貪婪模式的區別是在正則匹配后是否有?
模板:正則表達式提取器類型,樣式為:$n$,模板可自由組合,拼接組成新的字符串內容。
模板為$0$,則為整個表達式匹配到的內容;
模板為:$1$,則對應正則表達式中的第一個小括號內()匹配的內容;
模板為$2$,則對應正則表達式中的第二個小括號()匹配的內容;
模板為$1$$2$,則把2個()所匹配的內容拼接起來,$1$aa$2$拼接兩個變量的內容,並在中間加上aa
匹配數字:-1代表取全部數據,0代表隨機取值,1代表取第1個數據,2代表取第2個數據
缺省值:找不到匹配時的值
正則表達式提取實例
獲取接口A的響應報文
基於Jmeter正則表達式提取器編寫如下所示后置處理器,提取出響應報文的id
通過debugSampler查看變量的提取結果
在接口B(修改用戶)中使用接口A返回(新增用戶)的參數
Json提取器
Json提取器是一種后置處理器,它可以通過解析Json報文的方式提取請求中的響應數據,Jmeter的Json提取器有如下選項
變量名:存儲提取的變量名字
Json Path Expressions:Json Path 表達式
Match Numbers: 匹配的數量,0代表隨機獲取,1代表獲取第1個數據,-1代表獲取所有數據
Compute concatenation var (suffix_ALL):是否統計所有,即將匹配到的所有值保存為變量_ALL。
Default Values: 沒有匹配值時的提示信息
Json Extractor 提取到的值會存儲在變量里,使用方法和普通變量一樣,通過${}引用Json Extractor 的變量即可。Json Extractor存儲的變量名是基於提取器中變量名稱擴展的,建議通過添加DebugSampler獲取Json Extractor實際存儲值的變量名。
Json提取器實例
獲取接口A的響應報文
基於Jmeter Json提取器編寫如下所示后置處理器,提取出響應報文的id
通過debugSampler查看變量的提取結果
在接口B(修改用戶)中使用接口A返回(新增用戶)的參數
通過上述示例可以看到,正則表達式提取器和Json提取器的處理流程是一致的,只是提取方式不同。Jmeter通過添加相應的后置處理器可以解析到請求的返回結果,並且存儲為參數供后續接口使用,通過這種方式實現多請求的參數傳遞,從而實現接口的串聯測試。