為什么做接口自動化
什么是接口測試?
接口測試是測試系統(tǒng)組件間接口的一種測試。接口測試主要用于檢測外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個子系統(tǒng)之間的交互點。測試的重點是要檢查數(shù)據(jù)的交換,傳遞和控制管理過程,以及系統(tǒng)間的相互邏輯依賴關(guān)系等。
做接口自動化的原因

我把認(rèn)為比較重要的原因有以下幾點:
越來越多的系統(tǒng)采用前后端分離架構(gòu)、微服務(wù)架構(gòu),各服務(wù)之間更多的通過各種接口實現(xiàn)信息的互通,對接口直接進(jìn)行測試,可以更全面的覆蓋各類測試場景;
如果僅依賴通過前端進(jìn)行測試,由于前端對入?yún)?shù)據(jù)的一些邏輯控制,會造成有些測試場景無法測試到,特別是安全測試方面的場景無法覆蓋;
敏捷測試對測試效率上的要求很高,測試自動化的占比應(yīng)該要遠(yuǎn)大于手工測試占比,才能比較好的勝任敏捷的要求;
一般實際工作中,實施接口自動化要優(yōu)先于界面自動化,因為在實際實施中,接口自動化腳本的維護(hù)成本要低于界面自動化,穩(wěn)定性也要好很多;
如今業(yè)務(wù)系統(tǒng)復(fù)雜度越來越高,單純依賴手工回歸,成本會急劇增加且測試效率大幅下降,接口自動化測試是一種非常好的解決方案,另外加上有很多工具的支持,接口自動化成為很多項目測試中必須要做的一塊。
測試分層模型

要做接口自動化,我們要先熟悉測試分層模型,從圖中可以知道接口測試處于金字塔的第2層。針對業(yè)務(wù)邏輯自動化測試層,主要分為接口自動化和界面自動化。從測試體量上來看,接口自動化要大于界面自動化,這是綜合測試成本、測試成效等多方面考慮的結(jié)果。實際項目中,更多的是一種紡錘形的測試分層模型,中間最大的一部分是接口自動化,因為單元測試往往落地效果不好,項目的質(zhì)量提升更多的依靠接口自動化來實現(xiàn)。
需要哪些準(zhǔn)備工作
接口自動測試的準(zhǔn)備工作基本包括以下:

自動化工具選型
我們在進(jìn)行接口自動化測試前,首先要選擇適合的測試工具,磨刀不誤砍柴工,工具選好了,后面的測試工作也易于開展。關(guān)于工具的選型不是本文的重點,在此不過多展開。對于剛接觸接口測試的同學(xué),可以本著易于上手、適合自己、滿足項目需求這三點來選擇。
目前常用的測試工具如下:

建議:
如果你第一次接觸接口自動化,可以先選擇 Postman 開展接口自動化,該工具使用簡單易于入門,當(dāng)然更深入使用該工具,還是需要費些時間研究學(xué)習(xí)一下,該工具的支持的功能還是很強大。
本文的實戰(zhàn)樣例會采用 Jmeter 進(jìn)行展示,因為筆者演示的項目使用的測試工具就是 Jmeter。大家閱讀本篇文章時,重點要放在測試思路如何組織上,具體接口用例的實現(xiàn)形式上可以忽略,不同工具的實現(xiàn)形式是不一樣的。
測試環(huán)境準(zhǔn)備
測試環(huán)境準(zhǔn)備可分為兩部分:被測系統(tǒng)環(huán)境準(zhǔn)備和測試客戶端環(huán)境準(zhǔn)備

1)被測系統(tǒng)環(huán)境準(zhǔn)備
該環(huán)境就是被測系統(tǒng)的運行環(huán)境準(zhǔn)備,進(jìn)行測試前,我們肯定需要知道要測試哪個系統(tǒng),這個系統(tǒng)的訪問地址是多少,這樣我們才能進(jìn)行后續(xù)的測試工作。
測試環(huán)境最好由測試人員自己維護(hù)起來,這樣避免依賴開發(fā)人員,也能加強測試人員對測試環(huán)境管控,避免環(huán)境被人隨意改動,影響測試工作。
最開始的測試環(huán)境部署,最好要請教開發(fā)人員,盡量保證測試環(huán)境各項配置與生產(chǎn)基本一致,避免因為配置不同,遺漏某些bug。當(dāng)然像數(shù)據(jù)庫這樣的配置肯定要使用測試環(huán)境專用的配置,連接測試數(shù)據(jù)庫,決不能直接連接生產(chǎn)數(shù)據(jù)庫進(jìn)行測試。
2)測試客戶端環(huán)境準(zhǔn)備
該環(huán)境的準(zhǔn)備比較簡單,就是部署有測試工具的客戶端環(huán)境,最簡單的方式就是本機部署安裝測試工具,當(dāng)然也有比較復(fù)雜的客戶端環(huán)境準(zhǔn)備,如你要做持續(xù)集成測試,可能要集成 Jenkins,環(huán)境部署上就會復(fù)雜好多,初學(xué)者可以先不關(guān)注。
因采用不同的測試工具,客戶端環(huán)境準(zhǔn)備上會有所不同,具體的依據(jù)自己采用的測試工具來準(zhǔn)備。
注:目前我采用的測試工具是 Jmeter,客戶端環(huán)境準(zhǔn)備比較簡單,只需安裝好 java 運行環(huán)境,從官網(wǎng)下載 Jmeter 安裝包解壓即可使用。
獲取接口文檔

測試工具和測試環(huán)境準(zhǔn)備就緒之后,那下一步是不是就可以開始測試了,當(dāng)然還不行,按照正常思路,你得知道要測試什么,依據(jù)什么來測試,搞清楚這些才能開始下一步的測試工作。
在傳統(tǒng)的瀑布軟件流程中,測試人員在做某個系統(tǒng)的手工功能測試時,測試人員會首先從業(yè)務(wù)人員或開發(fā)人員那邊獲取需求文檔、系統(tǒng)設(shè)計文檔,通過這些文檔了解學(xué)習(xí)被測系統(tǒng),測試用例也會依據(jù)這些文檔來進(jìn)行編寫。
如果你的項目采用敏捷開發(fā)模式,文檔雖然不多,但依然可以從產(chǎn)品經(jīng)理那里獲取產(chǎn)品設(shè)計原型、PRD 文檔等,據(jù)此來了解被測系統(tǒng),進(jìn)行用例分析和編寫工作。
說了上面這么些,只是給大家一個對照,對于接口測試,同樣也需要首先獲取一些文檔,依據(jù)這些文檔來了解被測接口,并進(jìn)行用例分析和編寫。不過需要注意,接口文檔形式比較多樣,有的項目組可能采用 word 文檔,更多可能采用一個系統(tǒng)維護(hù)接口文檔(如:RAP、eolink 等),也有的組采用 Swagger 工具生成。
目前測試最多的是 http 類的接口(一般以 RESTful API 居多),也有 WebService 類接口,本篇演示內(nèi)容會以 RESTful API 風(fēng)格的 http 類接口來進(jìn)行展示。
實際項目展示
目前這個項目采用 eolink 這款工具來維護(hù)接口文檔,使用這塊工具來維護(hù)接口文檔還是非常方便(該項目使用的是老版本的 eolink),具體展示如下:
- 接口列表展示

- 刪除應(yīng)用”接口維護(hù)內(nèi)容展示


測試數(shù)據(jù)準(zhǔn)備和設(shè)計測試用例
上面內(nèi)容準(zhǔn)備就緒后,就可以開始接口測試用例的設(shè)計,用例設(shè)計完畢后只需要再準(zhǔn)備一些初始測試數(shù)據(jù),就可以開始進(jìn)行接口的調(diào)試與測試工作了。
測試數(shù)據(jù)準(zhǔn)備和設(shè)計測試用例可以同步進(jìn)行,說起測試數(shù)據(jù)準(zhǔn)備,我們要準(zhǔn)備哪些內(nèi)容呢?這個就要看具體的項目了,舉個例子:如果你這個項目是需要用戶登錄的,那至少你要準(zhǔn)備你的測試用戶。當(dāng)然你要明確一點,并不是所有數(shù)據(jù)都是測試前要準(zhǔn)備好的,很多測試數(shù)據(jù)可能是一邊測試一邊準(zhǔn)備的,因為只有測試到某個接口,才知道需要準(zhǔn)備哪些數(shù)據(jù),對于數(shù)據(jù)準(zhǔn)備這塊,依據(jù)實際情況靈活處理即可。
對于測試數(shù)據(jù)按照我自己總結(jié)的思路可以從如下三個角度考慮:

測試數(shù)據(jù)準(zhǔn)備思路
個人感覺做接口自動化最麻煩的地方是對測試數(shù)據(jù)的準(zhǔn)備和規(guī)劃,測試數(shù)據(jù)準(zhǔn)備的好不好非常影響腳本的健壯性,經(jīng)常會因為測試數(shù)據(jù)問題,造成用例跑不過,影響接口自動化的成效。
對于測試數(shù)據(jù)準(zhǔn)備,我的一般把測試數(shù)據(jù)分為兩類:①死數(shù)據(jù);②活數(shù)據(jù)。
1)死數(shù)據(jù)
死數(shù)據(jù)指在測試前準(zhǔn)備好的測試數(shù)據(jù),這些數(shù)據(jù)往往都是手工在被測系統(tǒng)中準(zhǔn)備好的,直接作為腳本的初始化參數(shù)供腳本使用。這部分的數(shù)據(jù)建議不要太多,不然會導(dǎo)致前期準(zhǔn)備時間比較長。能夠當(dāng)做死數(shù)據(jù)來準(zhǔn)備的數(shù)據(jù),建議是一些比較固定的、后續(xù)測試中不太容易發(fā)生變化的數(shù)據(jù),像類似用戶名密碼這樣的數(shù)據(jù),在后續(xù)測試中不易發(fā)生變化,對后續(xù)數(shù)據(jù)維護(hù)成本不會太大。
2)活數(shù)據(jù)
建議更多的測試數(shù)據(jù)以活數(shù)據(jù)的形式準(zhǔn)備,這樣可以提高腳本的自動化率,減少后續(xù)手工的干預(yù),活數(shù)據(jù)的準(zhǔn)備手段比較多,我主要使用如下幾種方式:
- 編寫SQL查庫
- 通過執(zhí)行相關(guān)接口來提取準(zhǔn)備
- 編寫腳本自動生成
測試數(shù)據(jù)準(zhǔn)備實戰(zhàn)演示
為幫助大家更好的理解,這里拿之前用 Jmeter 做的接口自動化中的數(shù)據(jù)準(zhǔn)備案例給大家做一下演示:
死數(shù)據(jù)

上圖是目前我這個項目設(shè)置的死數(shù)據(jù),有用戶方面數(shù)據(jù),團(tuán)隊方面數(shù)據(jù)、應(yīng)用方面數(shù)據(jù),這些數(shù)據(jù)一般手工創(chuàng)建好后,后續(xù)一般不會有太多調(diào)整。
活數(shù)據(jù)
- 編寫 SQL 查庫


圖中 SQL 腳本用來獲取刪除狀態(tài)的用戶名,用于后面用例(“錯誤值檢查(傳入已經(jīng)刪除的username),接口返回失敗”)的測試數(shù)據(jù)。
- 通過執(zhí)行相關(guān)接口來提取準(zhǔn)備


圖中通過創(chuàng)建應(yīng)用和查詢應(yīng)用列表接口來準(zhǔn)備測試數(shù)據(jù)“擁有所有環(huán)境的應(yīng)用 id”,用于后面用例的測試。
- 編寫腳本自動生成

圖中為了生成 appName 這字段值,用了Jmeter 的自帶函數(shù)“${__time(MMdd-HHmm-SSS,tt)}” 來生成不會重復(fù)的應(yīng)用名稱,保證后續(xù)測試該字段不會重復(fù)(后臺程序不允許該字段重復(fù)),從而使腳本能夠多次成功運行。
以上是對接口自動化需要做哪些工作的整體思路闡述,進(jìn)一步思考,細(xì)心的同學(xué)會發(fā)現(xiàn),對前期的準(zhǔn)備工作,包括接口文檔,環(huán)境等,需要一個平臺管理,這樣可以起到極大提升效率的作用,包括后續(xù)的腳本編寫,Jmeter 工具雖然很簡單易用,也能滿足需求,但腳本結(jié)構(gòu)上還是過于靈活,比較適合單兵作戰(zhàn),不太適合團(tuán)隊協(xié)作。
既能兼顧接口文檔維護(hù)、環(huán)境管理,又能用來做接口自動化的測試,比較推薦 Eolink,最新版本功能豐富易用,幫助項目團(tuán)隊更好的對 API 接口進(jìn)行管理和測試。
給大家展示一下該平臺對于 API 接口設(shè)計維護(hù)、環(huán)境管理、測試數(shù)據(jù)維護(hù)、Mock 的功能。
1)API 接口設(shè)計維護(hù)
平臺提供了多種 API 維護(hù)方式:手工表單維護(hù)、通過模板創(chuàng)建、自動生成 API 文檔等,并對 API 有狀態(tài)和歷史版本的管理。


2)環(huán)境管理
在接口測試中往往需要在不同環(huán)境中進(jìn)行測試,對于環(huán)境,Eolink 項目環(huán)境的管理模塊,方便統(tǒng)一對環(huán)境進(jìn)行管理。


3)測試數(shù)據(jù)維護(hù)
對于一個測試平臺,測試數(shù)據(jù)維護(hù)功能是必須的,Eolink 可以添加維護(hù)多組測試數(shù)據(jù),并支持動態(tài)賦值。

4)Mock功能
在開發(fā)聯(lián)調(diào)中 Mock 功能是使用最多的,少量自動化測試場景也需要 Mock,eolink 平臺提供了高級 Mock 功能,可以滿足一些復(fù)雜場景的 Mock 需求。

