1. 程式人生 > 其它 >使用Robot Framework實現多平臺自動化測試

使用Robot Framework實現多平臺自動化測試

基於Robot Framework、Jenkins、Appium、Selenium、Requests、AutoIt等開源框架和技術,成功打造了通用自動化測試持續整合管理平臺(以下簡稱“平臺”),顯著提高了測試質量和測試用例的執行效率。

01 設計目標

  • 平臺通用且支援不同型別的自動化測試平臺框架輕量、開放、靈活,有強大豐富的測試庫,全面支撐PC桌面應用(如核心櫃檯和網上交易系統)、Web應用(如商城網廳)、APP應用(如手機證券)、介面(如櫃檯周邊介面)、資料庫(如Oracle)等自動化測試,便於後續持續測試開發和集中統一管理。
  • 平臺支援自動化測試全流程平臺展示介面統一、清晰、簡潔,覆蓋測試用例設計、測試指令碼開發、測試執行、測試報告生成等流程。通過對測試流程實現統一管理,降低測試人員使用平臺的門檻。
  • 平臺具有良好的擴充套件性、易維護性平臺支援協同工作、分散式測試執行,能與版本管理工具、軟體缺陷管理系統、企業郵件系統等整合,同時在專案不斷迭代的過程中,自動化測試指令碼能彈性調整和程式碼複用。

02 架構設計

平臺採用元件化的思想和分層架構,可分為4層,每一層都實現特定的功能,並提供介面給其它層呼叫:

圖1 平臺架構設計

  • 最底層是被測系統,主要明確被測物件的形態。平臺支援APP、Web和PC應用測試,以及介面、資料庫等測試。
  • 往上是測試庫。平臺除提供如程序、字串、集合、截圖處理等基礎測試庫外,還提供Web、APP、介面等專用測試的擴充套件測試庫,以支援不同的被測系統選擇相應的測試庫。
  • 中間是測試框架,其作用包括用例管理、測試資料管理、測試執行、測試報告等。
  • 最上面則是持續構建層,負責任務、機器、排隊等控制和排程,自動完成整個測試作業過程。

03 平臺實現

在自動化框架選型上,我們選擇Robot Framework(以下簡稱“RF”)作為自動化測試平臺的核心底層框架,Jenkins作為持續整合與任務排程平臺,同時選擇AppiumLibrary、Selenium2Library、RequestsLibrary、AutoItLibrary等作為擴充套件測試庫,以應對不同的測試需求。

(1)RF框架

RF是一款功能豐富並且擴充套件性強的開源自動化測試框架,主要用於輪次較多的迴歸測試。

框架通過關鍵字的組合形成測試邏輯,最終通過各個底層測試庫與被測系統互動,完成測試工作。

RF框架為APP、Web、介面、資料庫測試等提供了標準的底層關鍵字API,測試人員只需在這些關鍵字的基礎上開發自定義指令碼,即可滿足自身測試的要求。

圖2 RF架構圖

(2)AppiumLibrary

Appium是一個開源、跨多平臺多語言的測試框架,相比其它框架,它支援iOS和Android平臺上的原生、Web和混合應用自動化測試,可在平臺間重用程式碼,編寫測試指令碼和執行測試時不需要對原始碼重新編譯,在指令碼的編寫和實現上對程式語言沒有太多要求,測試更輕量靈活。

AppiumLibrary是RF框架基於Appium的第三方擴充套件應用程式測試庫,可支援券商手機證券APP自動化測試開發。

圖3 Appium架構圖

(3)Selenium2Library

Selenium是為了實現多平臺Web應用程式測試而專門設計的自動化測試工具套件,具有可擴充套件、跨平臺、多瀏覽器支援等特性。Selenium 2集成了WebDriver,WebDriver通過原生瀏覽器支援或者瀏覽器擴充套件直接控制瀏覽器,測試人員可根據不同的平臺、不同瀏覽器選擇不同的WebDriver去執行測試。

Selenium2Library是RF框架基於Selenium2的Web測試庫,可支援券商商城、網廳等Web應用自動化測試開發。

圖4 WebDriver架構圖

(4)RequestsLibrary

介面測試一般用於多系統間互動開發,或擁有多個子系統的應用系統開發的測試。Requests是用Python語言編寫,基於urllib,採用Apache2 Licensed開源協議的HTTP庫,可滿足HTTP介面測試需求。RequestsLibrary是RF框架下的API測試庫,可支援券商IFS或其它自定義開發介面自動化測試開發。

(5)AutoIt桌面應用測試

AutoIt是一款用於對Windows GUI進行自動化操作的軟體,它可以模擬鍵盤按鍵,、滑鼠移動以及視窗或控制元件的操作來實現自動化任務。AutoItLibrary是RF框架基於AutoIt的Win32桌面應用測試庫,可支援券商核心櫃檯、網上交易等桌面應用系統自動化測試開發。

圖5 Au3Info識別GUI物件示例

(6)Jenkins持續整合

Jenkins是一種開源的持續整合工具,它支援svn、Git等多種SCM配置管理工具,可根據專案要求設定定時構建(如每小時、每次間隔時間或每天晚上幾點鐘等)或觸發構建(如原始碼提交觸發),支援Shell指令碼、Windows批處理、Ant構造等多種構建方法,從而滿足在不同作業系統上執行。

Jenkins支援分散式構建(類似於Selenium Grid),可實現多主機多工並行執行。Jenkins還提供豐富的外掛支援,安裝Robot Framework plugin外掛後可執行RF自動化測試用例。

圖6 Jenkins+RF+AppiumLibrary自動化測試示例

04 平臺的創新點

1、平臺架構靈活、適應場景廣,滿足多種不同型別自動化測試

平臺基於輕量的RF開源框架,具有良好的擴充套件性,通過整合不同的開源擴充套件測試庫可滿足不同型別、不同平臺和應用的測試:

  • RF+AppiumLibrary可實現APP自動化測試,且可在iOS和Android之間重用程式碼,只需要編寫出一個統一的測試指令碼就可以執行在不同的平臺上,這種方式將極大提高自動化測試指令碼的使用率,節省編寫和除錯測試指令碼的時間;
  • RF+Selenium2Library則可實現Chrome、IE、Firefox等多瀏覽器下的Web應用程式自動化測試;
  • RF+AutoItLibrary可實現一般Win32桌面應用程式自動化測試;
  • RF+RequestsLibrary可實現介面自動化測試,等等

所以該平臺具有相當強的靈活性、相容性和易用性,尤其適用於核心櫃檯、網上交易、手機證券等介面變化不大、軟體生命週期長,經常推出新版本的產品自動化測試。

2、平臺實現端到端自動化測試管理,一站式圖形展示資訊

平臺支援用例管理、指令碼開發除錯、任務分散式排程執行、測試報告呈現全流程

圖7 平臺測試管理

圖8 測試日誌及報告

3、基於資料和關鍵字驅動的自動化測試,靈活應對被測試系統變更

平臺克服了傳統自動化框架錄製回放模式指令碼高耦合性的缺點,具有高健壯性、高複用性和良好的維護性:

  • 支援資料驅動模式,測試資料和指令碼分離,測試資料變更無需修改指令碼,提高了自動化測試指令碼的可複用性。
  • 實現介面元素統一管理,介面元素和測試指令碼分離,應用程式介面變動只要修改失效的介面元素即可,無需大量修改指令碼,提高了指令碼的可維護性。
  • 業務流程測試基於可以靈活組合的關鍵字指令碼進行控制,通過增加關鍵字即可實現測試框架的功能擴充套件。
  • 指令碼結構釆用分層設計思想,將自動化測試指令碼分成用例層、流程層、頁面元素層和變數集合層,方便實現高內聚、低耦合的測試指令碼設計。圖9 分層自動化測試

05 平臺的實施效果

1、提高測試用例設計質量和業務場景的覆蓋度

東莞證券自動化測試專案自實施以來,用例粒度和覆蓋度得到了較大改善,手機APP交易、介面、Web(網廳/商城/有財貸)、核心櫃檯、網上交易的測試用例分別達到1645、153、76、569和1168個,用例規模平均增長近8倍,基本覆蓋所有交易類業務。平均自動化率達65%以上,極大提升了產品研發團隊的質量信心。

2、提升測試用例執行效率,加快產品投產速度

自動化測試提高了測試用例執行的效率和準確性,降低了生產應用系統的故障率。另外持續整合儘早地介入,減少了版本延遲釋出的可能性。以東莞證券手機APP交易自動化測試為例,之前版本迭代週期是2-3個月,開展自動化測試後縮短至1個月;以往一輪15人天的手動測試改為自動化執行後不到2人天。按平均每月迭代一次計算,全年可省近150人天的測試資源。如對接獨立的測試櫃檯(支援7*24執行)並增加多臺裝置並行執行,自動化測試效率還可大幅提升;該專案已投入近20輪版本迭代測試,發現缺陷17個。

06 總結

東莞證券基於開源的RF框架從0到1建立起通用自動化測試體系,並在手機APP、核心櫃檯、網上交易、介面、商城、網廳等專案中落地,同時結合Jenkins實現自動化測試持續整合和分散式構建,有效支撐了敏捷和快速迭代過程

限於篇幅,本文並未就APP、Web、桌面應用、介面等自動化測試開發方法展開詳細論述,而是提供一種建立通用自動化測試持續整合管理平臺的思路,希望對其他券商有一定的啟發和借鑑意義。