miaomiao 高級測試工程師
7年測試工做經驗,參與產品的功能/自動化/性能測試;目前負責 Red.Q、Warden 產品的質量保障工做。
Red.Q 是豈安爲客戶提供業務風險情報服務的產品。API 是該產品的一個模塊,客戶能夠經過輸入不一樣的參數獲取不一樣的風險數據。
在測試該 API 的過程,就是對這個接口的測試,不一樣的 Token 對應不一樣的訂單,對應不一樣的標籤,對應不一樣的返回。本文主要介紹在測試該接口時總結的一些場景用法。正則表達式
目前接口測試的工具,例如 Postman/SoupUI,等大多都提供了接口的發送、響應結果的獲取、以及針對響應結果的斷言,均可以用來作接口的自動化測試,咱們目前選用的工具是 JMeter,各類工具大同小異。如對 JMeter 工具不瞭解的同窗請戳 Bioneck 分享的 Jmeter+Jenkins 文章。
實現本次自動化測試用到的組件介紹 :數據庫
一個最簡單的 HTTP 請求,由 host+ 端口 + 路徑 + 參數構成,調用 API 的設置以下:segmentfault
1) HTTP 請求默認值,設置好服務器 IP 和端口,全部做用範圍內的 HTTP 請求能夠再也不指定。服務器
2) HTTP 請求,設置路徑和參數異步
3) 調用完成後,經過查看結果樹查看調用結果。編輯器
須要每次請求時,把 request_id 放到 Header 內,隨請求一塊兒調用(HTTP 信息頭管理器)。
1) HTTP 信息頭管理器
將 HTTP 信息頭管理器放入 HTTP 請求下,該 HTTP 信息頭管理器內的參數,只對該 HTTP 請求生效。
右邊的設置,每次 HTTP 請求 Mock-server 時,會將 REQUEST-ID 加入到請求 Header 內。工具
2)查看結果樹內,能夠看到發送的 Header。性能
每次執行測試後,須要瞭解本次執行的結果正確與否,以上的步驟只能知道咱們返回了什麼,不能確認到底返回的對不對。這個時候須要用到斷言,對響應結果進行驗證。測試
1)響應斷言,提供對全部請求的響應結果內的內容進行斷言,通常爲文本斷言。spa
將響應斷言放入HTTP請求下,會對該HTTP請求調用的響應結果進行斷言。
要測試的文本放入測試的模式內,可添加多個驗證文本。
2) 查看結果樹內,若是與指定的內容不一致,請求會標記爲失敗,並給出失敗緣由。
部分場景下,要求每次調用 API 後,須要驗證對應的 [風險等級] 符合預期。而 [風險等級] 保存在數據庫內,須要經過 JDBC Request 來實現對數據庫的操做。
1)JDBC Connection Configuration,提供對數據庫的鏈接配置。
2) JDBC Request,設置查詢 SQL
驗證結果通常是查詢類的 SQL,QueryType 選擇 Select Statement;
若是須要在某個請求開始前對數據庫內的數據作新增修改刪除,則須要選擇 QueryType爲Update Statement;
3)在 JDBC Request 下,添加響應斷言,驗證響應結果與字符串一致。
每次調用 API 後,須要驗證 Token 的 [最近調用時間字段] 。該時間字段是存在數據庫內的時間戳,而咱們須要驗證 token 的最近調用時間在 15s 之內,而響應斷言組件沒法作到日期的比對,須要用正則表達式提取器將請求的響應結果提取出來,而後做爲一個變量,在 Bean Shell 內進行比對。
1)調用完請求後
添加 JDBC Request,設置查詢條件以下
響應結果
2) 在 JDBC Request 下添加正則表達式提取器,提取數據庫返回的時間戳字段,保存到變量內。
3) 在 JDBC Request 下添加 BeanShell 斷言,對正則表達式提取器內提取的變量與當前時間進行比對。
某 API 支持客戶進行異步調用,先發送一個異步請求提交數據(獲取一個 token),而後隔一斷時間後再(使用獲取到的 token)請求上一個請求的返回結果;須要用到定時器組件。
1)異步調用請求接口設置。
2)異步調用請求成功後,返回一個 query_id,若是要拿到真正的處理結果,須要在調用獲取結果的請求時,把 query_id 做爲一個參數。
3) 在異步請求下添加一個‘正則表達式提取器’,將異步調用返回的 query_id 保存到參數內。
4) 獲取異步調用結果的請求內,引用正則表達式提取出來的 query_id ,並做爲參數提交。
5) 異步調用通常不會立刻出結果,須要在獲取異步調用的結果請求以前等待一段時間
BeanShell Timer 內可設置線程等待 5s;
添加高斯定時器、固定定時器等定時器也可達到等待的效果;
定時器放在 HTTP 請求下,會先執行定時器,若是與 HTTP 請求是同級目錄,則每一個 HTTP 請求都會受定時器的時間影響。
如今幾乎全部從事 Web 測試的同窗都會使用 JMeter 或某種 API 工具來調用幾把接口,而須要作到接口自動化,免不了要加入參數化、關聯、斷言等高級用法,本文僅列出工做中用到的常見場景中的用法,有不對之處或測試之間的交流歡迎指出,謝謝。
以上。