首頁>技術>

Devops作為技術中臺的重要組成部分之一,其下“自動化測試”功能也是不可或缺的一環,如何結合DevOps自身提供的自動化測試功能,做好DevOps的介面自動化呢?首先要先了解DevOps為自動化測試提供了哪些功能,如何使用該功能進行自動化測試,以及如何設計測試框架等等,本文將會為大家一一解答。

DevOps作為技術中臺的“效率&精益“平臺,集成了多方測試工具供使用。目前整合的自動化測試工具有:robot-framework 、Jmeter。

目錄:

1.為什麼採用RobotFramework?

2.什麼是RobotFramework?

3.RF如何做介面測試?

4.如何在DevOps中執行rf指令碼並生成測試報告

一、為什麼採用RobotFramework?

針對介面、web網頁、app自動化測試的工具有很多:selenium、jmeter、soapui、robotFramework、postman等,如何選擇適合自己的自動化測試工具?此時便要看具體需求和業務。

應需求:為DevOps產品做自動化介面測試,那DevOps自身集成了jmeter和rf框架,且採用jmeter或者rf工具,能使自動化測試過程在DevOps中“資料視覺化”,每次執行後的各項測試資料指標(包括測試結果、測試報告、成功率、失敗率等)直接在DevOps中進行展示、更是省略了自行配置jenkins進行自動化執行部署等操作,對於管理人員以及測試人員而言,均有受益。

又考慮到測試人員技術水平,相對而言,rf簡單易上手,所以rf突出重圍,成為此次自動化工具角逐的“冠首”。

二、什麼是RobotFramework?

Robot Framework是一款python編寫的功能自動化測試框架,可匯入各第三方測試庫(例如:Selenium2Library、RequestsLibrary、DatabaseLibrary、HttpLibrary.HTTP),透過關鍵字進行web或介面自動化測試。

RF特性:

1、rf測試用例支援文字檔案儲存,使用製表符分隔資料,可方便使用任何文字編輯器,或者excel編輯測試用例,也可使用HTML格式建立用例;

2、測試用例支援變數使用,可使用IF、ELSE以及For迴圈語句;

3、支援關鍵字驅動、資料驅動和行為驅動;

4、利用已有關鍵字,測試人員可進一步“封裝”,形成更高級別的行為;

5、測試人員可使用Python編寫自己所需的關鍵字;

6、測試報告和日誌為HTML格式,便於閱讀;

7、使用簡單,更好理解以及上手等

三、RF如何做介面測試?

1、RF指令碼編輯工具:可透過RED工具(該工具百度文獻參考多,這裡不做介紹)或者eclipse來編輯Robot FrameWork測試用例;個人用的eclipse,更方便進行關鍵字的檢視,具體可參考文獻:https://www.cnblogs.com/Simple-Small/p/9229397.html。

2、準備好rf環境【python環境、robotframework安裝、JDK1.8+Eclipse+RED外掛】;

3、安裝第三方庫,提供介面測試的關鍵字:RequestsLibrary(在rf中,python語言的介面測試庫名稱為RequestsLibrary)、DatabaseLibrary、HttpLibrary.HTTP等;

若匯入httplibrary庫出錯,可參考以下文獻進行除錯:

4、在robot指令碼中引入所需各庫:

5、認識RequestLibrary以及DatabaseLibrary中的關鍵字。

掌握各關鍵字含義以及用法,是利用RF做自動化測試的核心。在.robot檔案中,滑鼠懸浮在關鍵字上,會顯示該關鍵字用法,或者按住CTRL鍵,滑鼠點選可進入到py檔案中,直接檢視該關鍵字的實現和描述,RF介面測試主要用到以下紅框關鍵字,還有其他語法例如FOR迴圈、json資料格式轉換等需要掌握。RF基本語法以及關鍵字用法此處不做詳細解析,對此有興趣者可透過各學習網站搜尋關鍵字:robotframework,檢視對應影片學習即可;接下來主要以筆者實踐rf介面自動化框架的二次封裝為主線展開(為筆者個人實踐,多處還有待後期改善,不完善處請諒解)。

6、下圖為筆者根據使用場景和需求,設計的RF介面自動化的基本框架:

這裡將rf框架封裝為5層:工具類層、關鍵字層、基礎資料層、測試資料層和用例層。

工具類層:若rf已存的關鍵字不滿足需求,可自行編寫py函式實現;

關鍵字層:將複用率高的程式碼塊進行提取封裝,成為新關鍵字。例如:

connectDatabase -連線資料庫;initDocData -執行資料庫指令碼;

測試資料層:分為“sql指令碼” 和“ py檔案”兩類。

sql指令碼中儲存insert語句,為“刪改查”介面準備基礎資料,在測試用例執行之前進行資料庫指令碼初始化操作(使用Suite Setup);Py檔案 : LIST__addIDoc為新增介面的測試資料,其校驗資料對應為:LIST__assertAddIDoc。.py檔案中儲存list型別資料,作為“增”[post]介面的測試資料以及各介面的校驗資料;如圖所示,其中“刪改查”[delete/put/get]介面的校驗資料需根據sql中的資料進行設計,一條測試資料對應一條校驗資料,其List下標相同,保證進行資料遍歷時測試資料和校驗資料能一一對應。

測試用例層:使用關鍵字,編寫測試用例指令碼。

獲取測試資料組,利用FOR迴圈,根據測試資料的List長度【即測試資料組數】遍歷請求引數:

傳送相應請求,獲取返回值,同時校驗返回值是否與預期相符:

關鍵字assertResult:為自定義關鍵字,引數有三個:介面返回值response、當前介面校驗資料List、測試資料下標,若返回值狀態碼與預期狀態碼一致,則繼續透過testcase關鍵字校驗responseContent值是否與預期值相等,若狀態碼不相等,則直接跳過進入下一迴圈【這裡校驗和測試資料需嚴格按照“下標一一對應”規則 ,否則在校驗時則無法正確匹配,且測試資料有幾組,則校驗資料也應有幾組,否則將報錯】。

關鍵字testcase:有兩個引數:response返回值和對應的校驗資料,主要用作responseContent內容與校驗資料的比對,若校驗資料中所有key對應的value值,都與responseContent裡同一key的value值相同【responseContent包含校驗資料】,則校驗透過。

總結:

1、預置測試資料和校驗資料(透過sql指令碼和Py檔案中儲存List型別資料) ;

2、透過testcase前置條件,連線資料庫並執行sql指令碼初始化資料,且進行登入操作,將“認證”值設定為全域性變數,供後續介面使用;

3、編寫測試用例,利用for迴圈遍歷測試資料,傳送請求,並獲取同List下標的校驗資料,進行返回值的校驗;

至此整個測試流程結束。小夥伴們get到我的整個框架設計了嗎?

四、如何在DevOps中

執行RF指令碼並生成測試報告

到這裡可能會有人問:測試報告和日誌如何處理?這時候就要結合我們的DevOps產品,前言講過DevOps為自動化測試做了哪些工作,是的,就是利用DevOps整合的rf任務,和拉取程式碼庫程式碼任務,進行rf指令碼的執行,執行完畢後,會將生成的測試報告儲存在:與釋出到nexus的工件路徑一致。

檢視每次執行後的測試報告。這就讓我們的自動化工作變得更加簡單,只考慮如何將測試用例寫好即可,無需考慮CICD工作。

題外話:

普元devops產品,以自身提供的RF自動化測試功能為基礎,極大程度的簡化了自動化測試的CICD工作,讓測試工程師更專注於維護測試用例和框架的編寫,且提供自動化測試報表,讓自動化過程透明化。整個rf框架歷時兩個月,中間不斷修正,在這個過程中又接觸到其他的自動化測試方案,還有很多需要完善和更改的地方,期待後面的框架訂正吧【測試資料將更改為寫在excel中,從excel中讀取測試資料,並將每條測試用例的測試結果寫在excel中】。歡迎各位小夥伴來溝通RF或者其他自動化測試方案~

關於作者:冰糖糯米,普元測試工程師,目前參與Devops專案的功能測試以及介面自動化測試工作。致力於測試技術的研究和開發。

19
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Spring Cloud Gateway應用詳解1之謂詞