轉載本文需註明出處:微信公眾號EAWorld,違者必究。
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 -執行資料庫腳本;
點擊「Test cases」Tab頁,可以表格形式展示rf測試用例;也可切換到「source」Tab頁,直接以源碼形式展示,看個人習慣選擇視圖編寫腳本即可;
測試數據層:分為「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的工件路徑一致。
1)添加Robotframework任務,輸入測試用例路徑以及介質倉庫,選擇測試執行機(測試執行機需提前安裝好robotframework運行環境),點擊執行。
2)robotframework任務執行完畢後,點擊進入「自動化測試」tab頁,顯示本次運行相關信息(包括測試環境、運行開始結束以及持續時間)和測試報告、日誌連結。
查看每次運行後的測試報告。這就讓我們的自動化工作變得更加簡單,只考慮如何將測試用例寫好即可,無需考慮CICD工作。
題外話:
普元devops產品,以自身提供的RF自動化測試功能為基礎,極大程度的簡化了自動化測試的CICD工作,讓測試工程師更專注於維護測試用例和框架的編寫,且提供自動化測試報表,讓自動化過程透明化。整個rf框架歷時兩個月,中間不斷修正,在這個過程中又接觸到其他的自動化測試方案,還有很多需要完善和更改的地方,期待後面的框架訂正吧【測試數據將更改為寫在excel中,從excel中讀取測試數據,並將每條測試用例的測試結果寫在excel中】。歡迎各位小夥伴來溝通RF或者其他自動化測試方案~
關於作者:冰糖糯米,普元測試工程師,目前參與Devops項目的功能測試以及接口自動化測試工作。致力於測試技術的研究和開發。