接口測試
接口測試基本設置
新建一個場景
- 新建一個場景並填寫基本信息
配置環境
-
入口
-
配置http項:注意是https還是hhtp
-
配置數據庫:沒有sql請求不需要配置
請求預設
- 共享cookie:和jmeter的一樣,但如果有csrf認證或者其他需要后面接口提供cookie的,可以不勾選。
我這里需要csrf認證,第一個接口提供csrf_token,返回的cookie我不需要,所以不勾選,不然會覆蓋后面登錄接口的cookie,所以我的cookie是通過參數傳遞的
- 失敗繼續:這個不多說
場景變量
- 普通變量:入口
添加變量:關閉窗口自動保存
使用變量:${變量名}
- 列表變量:只有一個值要寫成
1,
主要用在for循環,這里用變量不用加${}
- csv文件變量:這里的變量名稱無所謂,到時候取值看的是csv文件的行名稱作為變量;其次是如果文件帶中文,要GBK編碼
添加請求
自定義請求
- 入口:這個需要注意的是,要點擊空白處才會出現,點擊某個請求了再點擊這個出來的就是斷言提取這些操作
- 把下面幾個填了:請求體內部可以直接使用變量,和jmeter一樣
請求頭有特殊參數的,要傳入,比如上面說的不貢獻cookie,就要自己傳
- 請求處理:斷言
選擇jsonpath斷言:比正則方便
如果你跑過一次了,也可以選擇獲取推薦斷言,就不用手輸了。
jsonpath的使用可以在這個網站試試:jsonpath測試 - 請求處理:提取
和斷言操作類似,點擊復制可以直接把提取的變量粘貼使用。
導入
- 當一個場景用法固定,我們就可以把這個場景作為公共的請求場景,比如登錄、增刪改查一些數據等等。有一個前提是導入的場景不可修改,要修改的話就只能復制。此外導入的場景也要選擇環境才能運行。略
循環
- 次數循環:略
- for循環:列表變量講了,這里不講
- while循環:
首先需要通過自定義腳本設置循環初始值:
再設置循環條件:循環時間是總循環時間,超過這個時間就算沒有循環完也要終止
循環值累加:注意變量都是文本格式,需要轉換類型
jsonpath語法
- 在斷言和參數提取的時候,可能需要用到jsonpath語法,網上有說明,這里給個基本示例:獲取data下的content列表中name等於myname的id,有時候這里的變量
${myname}
可能需要加上引號"${myname}"
才生效,原因可能和數據類型有關。$.data.content[?(@.name==${myname})].id
單接口封裝
- 說明:
這里說下我的一個思路,我們通常需要對單接口進行封裝,以便我們在進行集成測試的時候引用這些接口,這樣方便統一管理。又知道集成測試分成正向測試和反向,所以我們的場景一定要能兼容這兩種情況。
單接口
- 單接口參數盡量變量化
- 在接口請求上添加一個自定義腳本說明出入參和入參設置,然后不啟用該腳本
- 引用環境
- 不設置斷言
環境管理
- 說明:為了盡量讓單接口解耦,所以我單接口封裝盡量簡單,同時為了場景靈活多變,我把集成測試中出現的變化盡量都放在了環境中(雖然感覺還是有很多問題,目前能想到最靈活維護還算輕松的方式)
請求頭的靈活性
- 在環境中通過條件啟動設置差異化的http配置,可實現不同請求http配置不一樣,解決了比如登錄不需要token,其他請求需要token的問題
請求體的靈活性
- 我們引用單接口的時候需要自己添加一個自定義腳本並復制單接口中的說明腳本進行修改。目前只適合邏輯性的異常場景,對於請求結構性的異常場景是不適合的。
斷言的靈活性
- 在環境中設置全局性的斷言,且斷言值設置為變量。這里其實默認了返回值的格式必須固定了。
- 在環境通用設置中設置斷言變量和值,值默認是正向斷言值,但我們需要異常斷言的時候,只需要在單接口腳本中重設斷言變量進行覆蓋就行了。
自定義腳本
自定義腳本基礎規則
- ms的自定義腳本支持beanshell、python、groovy(java)、js,當我們選擇其中一種語法,其實就是選擇了該語法和beanshell的混合語法,比如我們使用python,則腳本既能輸入python語法也能輸入beanshell語法,但是某一行只能使用其中一種,需記住beanshell語法都是
;
號結尾。
變量
列表變量常識
- 獲取列表元素或者整個列表:方式是
列表變量名_index
,圖中a和b都是獲取第一個元素,all是獲取整個列表
如果我們項把index作為變量,有兩種方式,一種就是通過${變量}
的方式,還有一種是把整個列表變量名_index
作為變量:上下兩種方式效果一樣
創建列表變量&添加元素
- 創建列表變量
- 往列表變量中添加元素
獲取列表變量元素
- 先設置列表變量:這里創建了一個列表變量dataTypeList,后面的
_${數字}
是在列表變量中的index
如果我們需要控制index,可以加入循環變量:注意,下面注釋的那種方式 i
不生效,原因暫不清楚。
- 循環列表變量:循環的變量可以通過兩種方法獲取,推薦上一種,下面的只適合非列表變量。
- 直接獲取列表變量:不需要循環的時候可以用這種方式
要控制獲取列表變量的index,可以加入java變量:
- 補充:通過字符串創建列表,這樣更方便
先通過腳本傳入特定格式的文本變量:
再轉化成列表變量:
自定義腳本問題匯總
json轉義錯誤
- 如果一個腳本參數是json,正常情況下直接轉義作為參數即可,但如果json參數本身里面還要轉義,多重轉義會導致數據格式錯誤。這個時候就需要一些特殊的轉義方式:比如轉義一次再
\\\
換成\\\\\\
,具體情況要根據json內部參數轉義次數而定
python語法糖
- ms自定義腳本不能使用python語法糖,比如格式化字符串的
f
,只能用format
。