實戰(zhàn)一下,手把手教你徒手?jǐn)]一個自動化平臺
前言
今天來跟大家分享一個自己的作品--基于Springboot+layui實現(xiàn)接口自動化平臺
回顧這段歲月,甘苦自知,既有遇到難點一籌莫展、食之無味的困窘,也有解決難題調(diào)試成功的欣喜,堪稱五味雜陳
人言奮斗的歲月最充實,果然如此
?閑言幾句:讀了幾篇文章,頗有幾番質(zhì)疑技術(shù)的言論,在我看來,技術(shù)是一把刀,越鋒利越好,如果這把刀發(fā)揮不了功效,那是拿刀的人出了問題,而非刀本身。當(dāng)然,技術(shù)一定要結(jié)合業(yè)務(wù),否則就成了無柄之刃,再鋒利也是徒勞。
?
好,正式開始。平臺采用的技術(shù)棧有:
-
后端:Springboot、mysql、redis -
前端:jQuery、layui
平臺數(shù)據(jù)采用分層設(shè)計,即將接口自動化所需的數(shù)據(jù)分為【項目管理】、【接口列表】、【用例管理】、【測試集合】、【測試結(jié)果】五個部分
如下圖所示:
平臺入口,顏值即正義,盡量弄得漂亮一點,也讓人有使用的欲望

1 項目管理
項目管理,定義了公司系統(tǒng)的基本框架。以新浪新聞為例,我將做如下分割:
-
平臺:新浪新聞 -
項目:體育 -
模塊:西甲 -
IP 地址:略
項目模塊層,有以下規(guī)范和特點:
-
項目管理頁面決定了每個接口的歸屬,當(dāng)我們新增接口時,必須創(chuàng)建在已有模塊下,而不能隨心所欲地添加。因為平臺使用人眾多,如果不做此約束,數(shù)據(jù)將會十分混亂。 -
通常情況下,每個項目對應(yīng)著自己的 IP 地址。這個平臺中,每個模塊對應(yīng)著一個 IP 地址,還是有一些數(shù)據(jù)冗余,但如果為了消除數(shù)據(jù)冗余而再增加一層,就不是三表關(guān)聯(lián)而是四表關(guān)聯(lián)了,開發(fā)難度倍增,使用起來也略顯繁瑣。 -
每個模塊定義了 IP 地址后,該模塊下的接口將直接繼承,不需要再單獨為接口定義 IP 地址了。
2 接口列表
當(dāng)項目模塊創(chuàng)建后,就可以在該模塊下添加接口了。
接口層有以下規(guī)范和特點:
-
這個頁面定義了一個接口的基本信息,包括路徑、請求方法、參數(shù)類型等,但不會定義具體的參數(shù)以及其他信息,這些信息留到用例頁去定義。 -
每個接口只能有一條記錄,新增時根據(jù)接口路徑進行判重,以便進一步增強數(shù)據(jù)規(guī)范性,防止出現(xiàn)明明是一個接口,但接口名稱不一樣的情況。 -
新增接口時,平臺、項目、模塊皆為選擇項(可選擇的數(shù)據(jù)來源于【項目管理】),而不能自行填入。
3 用例管理
用例管理是對接口的進一步描述,是最核心的部分,也是開發(fā)難度最大的一個模塊。用例可以直接調(diào)用調(diào)試:
用例層具有以下規(guī)范和特點:
-
用例依賴于接口而存在,只有在接口列表頁創(chuàng)建了某個接口后,才能在此頁面創(chuàng)建該接口的用例,用例將自動繼承所屬接口和模塊的屬性,比如 IP 地址和路徑等。 -
一個接口可以有多個用例,用例之間參數(shù)值不同。 -
用例類型分為標(biāo)準(zhǔn)用例、正常用例、異常用例,所謂標(biāo)準(zhǔn)用例是指該用例的參數(shù)等信息都是能確保用例能正常執(zhí)行并獲取正常響應(yīng)結(jié)果的用例,每個接口下只能有一個標(biāo)準(zhǔn)用例,「當(dāng)接口下創(chuàng)建了標(biāo)準(zhǔn)用例后,再次創(chuàng)建用例時,直接復(fù)制其參數(shù)信息等數(shù)據(jù),極大增加創(chuàng)建用例的便利性」。 -
操作欄點擊【執(zhí)行】按鈕后,將發(fā)起一次接口請求,參數(shù)為該用例的數(shù)據(jù)。 -
點擊【編輯】可以修改用例的基本信息。 -
點擊【詳情】,進入用例詳情頁。
用例詳情頁有以下幾大部分:
1、基本信息:用例的描述性信息,自動讀取。其中,所屬平臺、所屬項目、所屬模塊等信息,讀取自用例所屬的模塊,接口名稱、接口路徑等讀取自用例所屬的接口。
2、請求參數(shù),包括請求頭和請求體兩部分。
3、關(guān)聯(lián)提取:這個功能是為后續(xù)【測試集合】準(zhǔn)備的,當(dāng)你準(zhǔn)備把一個用例加入測試集合,且測試集合后續(xù)的接口的參數(shù)依賴該用例響應(yīng)結(jié)果的值,就需要在關(guān)聯(lián)處理做預(yù)處理
比如一個登錄用例,需要在響應(yīng)結(jié)果中提取 token 并提供給后續(xù)接口使用,就可以按圖中示例,添加一條關(guān)聯(lián)提取規(guī)則:
-
變量名:提取到的信息暫存到內(nèi)存中時對應(yīng)的變量名 -
路徑表達(dá)式:需要提取的內(nèi)容對應(yīng)的路徑,其書寫格式與使用規(guī)則與 Jmeter 的【 JSON Extractor 】完全一致。 -
缺省值:當(dāng)提取預(yù)期內(nèi)容失敗時,給變量名賦予的值。
4、結(jié)果斷言:目前包括常規(guī)斷言和 Beanshell 斷言兩種形式,其中常規(guī)斷言包括:包含、相等、JSON 三種方式(已經(jīng)能覆蓋大多數(shù)應(yīng)用場景,后續(xù)可以繼續(xù)豐富)
5、結(jié)果示例是接口返回結(jié)果的示例:
4 測試集合
測試集合可以說是這個接口自動化平臺的意義之所在。在接口自動化中,單接口調(diào)用參考價值有限,多個接口按照業(yè)務(wù)邏輯組成一條流程,才是接口自動化意義所在。當(dāng)一系列接口用例創(chuàng)建完成后,在【測試集合】頁面可以按照業(yè)務(wù)邏輯將它們組裝起來,形成一個任務(wù)隊列。
下面說明一下如何編輯一條測試集合:
-
點擊【編輯】按鈕,將進入測試集合詳情頁,在該頁面可以非常方便地增減用例、調(diào)整用例順序。
-
點擊【+】按鈕,進入用例添加頁面:
-
通過選定一系列篩選條件,【用例】行將展示所有符合篩選條件的用例,選擇想要的用例后,點擊【提交】即將該用例添加到測試集合的用例列表中。
-
選擇了用例后,回到測試集合詳情頁,用例順序調(diào)整完畢后,點擊【提交】按鈕,將信息保存到數(shù)據(jù)庫。同時,程序會自動生成【用例隊列】(用例 ID 組成的隊列)和【隊列描述】(用例對應(yīng)的接口名稱組成的隊列)。
5 測試結(jié)果
在【測試集合】頁面選擇執(zhí)行某條測試集合后,程序?qū)⒆x取其對應(yīng)的用例隊列,并依次執(zhí)行每個用例,最終生成一條測試集合的測試結(jié)果,并持久化保存在數(shù)據(jù)庫中。
點擊【詳情】按鈕,進入測試結(jié)果詳情頁,查看某條測試結(jié)果的詳情:
雙擊某行,彈出該行對應(yīng)的響應(yīng)結(jié)果:
接口測試平臺功能大體上就以上,還有很多需要優(yōu)化的地方,比如
-
定時任務(wù),將以項目或測試集合為單位布置定時任務(wù)執(zhí)行 -
結(jié)果報告,這個功能常有的華麗麗的測試報告,個人覺得華大于實,有精力再搞搞吧 -
交互優(yōu)化,測試數(shù)據(jù)頁面左側(cè)增加樹狀列表,方便數(shù)據(jù)查找
AirPython 公眾號的交流群已經(jīng)建立,群里可以領(lǐng)取 Python 相關(guān)學(xué)習(xí)資料,大家可以一起學(xué)習(xí)交流,效率更高,如果是想發(fā)推文、廣告、砍價小程序的敬請繞道!
一定記得備注「 交流群 」,不然不會通過好友
掃碼添加,備注:交流群
