【自研開源】出色的一站式自動化測試平臺ATP-UI自動化篇

前言:

ATP(Auror Test Platform)是一個集成接口-UI自動化的一體化測試平臺,關於ATP和如何對服務端接口測試方案已介紹了,這篇推文將介紹ATP對於UI自動化測試的解決方案。

你是否曾想過,不使用任何自動化框架,不寫代碼的情況下,寫好功能測試用例後,點擊某個按鈕,一個web系統/app就自動點來點去;並能按你的思路,在線執行UI自動化測試、迴歸測試;解決日常工作中一些重複繁瑣,無聊費事的工作。

沒錯,ATP已實現可在線執行web/手機的UI自動化測試。它讓測試工程師在做UI自動化測試時:

脫離測試框架、代碼、環境依賴在線運行

無需連接usb的在線真機運行

UI測試與api測試用例互相調用串場景運行

脫離Jenkins定時運行冒煙測試,測試計劃

先看一個移動端UI自動化用例運行效果:點擊執行按鈕→自動跳轉真機遠程控制界面,運行測試用例
在這裏插入圖片描述

本文將從以下幾點依次介紹:

UI自動化簡介與痛點所在
整理架構與設計思想
web端使用說明與開發思路
安卓端使用說明與開發思路
未來規劃路線

UI自動化測試簡介:

其實早在2004年ThoughtWorks公司,一個測試工程師就實現了基於JavaScript代碼庫的自動化測試工具,Selenium1.0誕生了。

**誤區:**UI自動化僅限對於界面的排版,按鈕,顏色等UI測試,但其實是通過界面UI來驗證系統業務邏輯

**原理:**通過腳本語言或者工具,模擬用戶行爲操作,最接近用戶真實場景,實現對web/app自動測試

**真實價值:**代替大量的UI重複操作,讓測試用例重複使用,縮短反饋週期,爲企業減少了時間和勞力成本。因爲從測試的行爲本質上看,人工UI測試和自動化UI測試沒有區別,唯一的區別是一個由人來執行點擊,一個由代碼或者工具執行

UI自動化的痛點-ATP的優勢:

不過我感覺到,大家極度關心的UI自動化測試離我們越來越遠。因爲在實踐中,經常是這樣的畫面:

熟悉某套自動化測試框架花了多久

熟悉某個組織用例和代碼的框架花多少天

寫完一大推自動化用例代碼後,多人協作,項目如何整合

各種運行環境依賴,如何可持續集成

行成完整的UI自動化體系耗時很長…

我們先看一個簡單web端自動化測試用例,

如圖所示:在這裏插入圖片描述
以上僅是一個測試用例,未涉及到數據、版本、項目整合、持續集成等,何況還有移動端UI自動化,選擇的自動化測試框架可能又不同…

想要做好UI自動化,基於擁有一些經驗豐富,熟悉一門開發語言和主流自動化測試框架的測試工程師的前提下。 這也是爲什麼UI自動化測試是處於測試金字塔最上層,因爲它確實投入成本大,專業性要求高

所以,當你還糾結選擇用什麼開發語言,用什麼測試框架來進行UI自動化的時候,越糾結,ATP研發對UI自動化測試的解決方案想法越是強烈,下面分析下倆者的利弊:在這裏插入圖片描述
換句話說,用ATP進行UI自動化測試,「低投入,高回報」。

說出來你還有可能不相信,ok,接下來,我們就來了解一下ATP的一些設計思想、實現過程以及功能效果展示,看它是如何來進行web和app的UI自動化測試,然後快速上手吧

ATP對於UI自動化前後端交互架構設計:

整體框架採用的是前後端分離:

前端:vue.js+elementUI

服務端:flask

數據庫:mysql,Redis

UI自動化框架:web端-seleniunm 移動端automator2
在這裏插入圖片描述

ATP對於UI自動化一些設計思想:

測試環境與測試用例分離

測試用例與被測頁面對象分離

頁面元素管理採用POM模型

用例管理:項目→系統→模塊(1~n)→用例集→測試用例

用例相互串聯:UI與UI用例,UI與接口用例串聯,實現業務串場景需求

web運行環境:Selenium grid分佈式用戶本地瀏覽器 ;chrome的headless模式、基於Docker的selenium/hub鏡像容器

app運行環境:用atx-serve對測試安卓真機進行集羣管理,僅需要知道測試機的ip,無需連接數據線,就可以進行真機自動化了

用例組織框架:unittest

測試報告:HTMLTestRunner庫

用例實時推送日誌:前後端建立WebSocket連接,在線調試與實時日誌

測試計劃:linux中Crontab命令觸發,批量定時執行用例

ATP平臺UI自動化核心功能:

測試用例增刪改查

用例支持(xmind、excel)導入/導出

頁面元素對象採用POM模型

用例批量複製

UI用例與UI用例之間可相互進行業務調用

UI用例與接口用例之間可相互調用

app可掃描用戶在ATP上傳的二維碼圖片

用例支持分佈式用戶本地/服務器運行/真機運行

支持用例批量運行

測試結果報告展示,附帶錯誤操作截圖

測試計劃,定時執行,發送email警告郵件

功能介紹和開發思路:

1.用例運行如何區分Web/App-環境與用例分離:

ATP是同時支持web端/app端的UI自動化測試,所以第一步先配置環境信息:被測系統的類型、URL/APP包名

**思路:**分別定義運行web/app倆個測試類,運行用例時前端調用一個run接口,根據前端請求參數中系統類型,然後添加相應的測試類至unittest.TestSuite然後運行

在這裏插入圖片描述
如圖所示:設置系統類型web,錄入網站的url
在這裏插入圖片描述
2.衆多的頁面對象元素如何管理-POM模式:

UI自動化原理是模擬用戶操作頁面上各種元素,換句話說首先得定位元素,因此第二步配置被測頁面的元素,ATP支持常見8種定位元素方法,先了解一下POM以及xpath定位控件

POM (Page Object Modle): 頁面根據系統來管理,而元素對象根據頁面來管理,可以將測試用例與被測頁面對象分離,頁面元素與系統分離

POM優勢:頁面元素對象根據系統統一管理,可重複利用;易於維護。例如,前端某個按鈕或名稱修改,所有操作到該按鈕的測試用例不需要修改,僅修改按鈕的元素值

**思路:**前端配置好頁面對象,以key-value的方式存儲於數據庫表中。當用例的操作步驟用到該頁面對象,將對象屬性作爲參數,去調用一個返回webElement的公共方法,此時就可進行click、move、send_keys等操作在這裏插入圖片描述
**靈活運用xpath:**xpath雖可通過瀏覽器開發者工具直接複製,但是複製的往往是絕對路徑而且不穩定。所以我們可以根據Dom節點屬性、文本值等方式相對路徑定位;把複雜的位置描述封裝到一條短短的字符串裏面,靈活、穩定且萬能

例如:同一元素,前者是複製的xpath,後者是寫的相對路徑xpath;這樣寫讓用例穩定且容易閱讀
在這裏插入圖片描述

如圖所示:配置某被測系統頁面元素,該系統下的用例就可直接引用這些對象,進行點擊、輸入操作
在這裏插入圖片描述
3.用例信息何如管理-以一個字典存儲,運行時再加載

配置系統環境和頁面對象之後,第三步就可新增測試用例;也證實上文提到的設計思想:測試環境、被測頁面對象都和測試用例分離,用例主要包括:

基本信息:添加用例標題,描述信息等

前置操作:初始化數據,數據庫操作、執行其它前置UI用例,讓用例更靈活,串聯成一些流程場景

操作步驟:支持元素點擊、鍵盤輸入、鼠標移動、執行javascript(例如滑動滾動條,切換窗口)、切換frame、執行接口測試用例、app掃描二維碼等等

預期結果:當前元素在頁面可見/不可見,可見的次數、元素可操作/不可操作、數據庫校驗等

**實現思路:**將前端配置好的測試用例所有信息以字典列表(因爲可能批量執行用例)的形式存儲於數據庫表中,運行用例的時候再去組裝和加載用例信息,再調用unittest中subTest方法和selenium API去執行用例

在這裏插入圖片描述
如圖所示:就是配置測試用例的過程

在這裏插入圖片描述
配置完成後,將直接以表格的形式展現整個用例的操作過程,一目瞭然,這個用例what to do,,仔細一看其就是一個功能測試用例,因爲ATP已將功能測試用例和UI自動化用例合二爲一:

如圖所示:就是一個登錄用例的過程

在這裏插入圖片描述
4 .用例運行環境(web端)-本地瀏覽器grid/headless

ok,所有配置工作都已就緒,我們就可在線執行UI自動化測試了,有點躍躍欲試!

如圖所示:可知被測系統類型是web端,它的URL在這裏插入圖片描述
點擊執行用例按鈕,會自動彈出一個瀏覽器,當然如果你只關心運行結果,可以選擇不彈出本地瀏覽器,它會在服務器上默默的運行,而且測試報告每步操作都附帶截圖

**思路:**運行環境本地瀏覽器grid/無頭模式headless

本地瀏覽器:使用Selenium Grid,遠程操作瀏覽器。服務器作爲hub,用戶本地瀏覽器作爲運行Node,

hub: 參數值表示管理中心的url地址

Node:連接hub進行節點註冊

通過SeleniumGrid可控制多臺機器多瀏覽器執行測試用例,如圖所示我在一臺機器上註冊5個瀏覽器node

在這裏插入圖片描述
也可選擇瀏覽器無UI界面在後臺運行:

chrome的headless模式
在這裏插入圖片描述
如圖所示:ATP在loading中,正在本地執行測試用例,然後自動彈出瀏覽器,打開了快遞100網站登錄
在這裏插入圖片描述
用例執行完成後:ATP loading完成,瀏覽器自動關閉,然後會顯示一個查看測試報告的按鈕

在這裏插入圖片描述
5.測試失敗如何在報告加截圖-HTMLTestRunner

測試報告使用第三方庫HTMLTestRunner

**思路:**使用selenium中get_screenshot_as_base64方法, 獲取頁面截圖的base64編碼
在這裏插入圖片描述
在這裏插入圖片描述
點擊顯示截圖按鈕:可循環查看操作過程,如圖所示,登錄測試用例,第一步:輸入了用戶名
在這裏插入圖片描述
6.app用例如何在線運行-集羣管理

app測試用例的配置與web測試用例配置完全一樣

實現思路:將測試機用atx-serve進行集羣管理,再遠程控制手機界面。

在服務器上啓動rethinkdb,再將測試機進行初始化:

$ rethinkdb --http-port 8090

$python -m uiautomator2 init 服務器 ip

這時打開url:測試機ip地址:7912/remote 就能訪問手機遠程控制界面

在這裏插入圖片描述
如圖所示:點擊運行按鈕,可選需要運行的測試機
在這裏插入圖片描述
點擊確定運行,自動進入遠程控制測試真機界面,運行了被測APP,且實時查看app的運行狀態
在這裏插入圖片描述
7.app如何進行掃描操作-二維碼push至手機sd卡

在編輯測試用例時,操作步驟選擇方式爲:掃描二維碼,然後上傳本地圖片,即可掃描二維碼

實現思路:用戶在前端上傳被掃描的二維碼圖片,後端儲存於服務器,再推送至測試手機sd卡的指定文件夾下在這裏插入圖片描述

app掃描時從相冊中去選擇,該指定文件夾下用戶上傳的二維碼圖片,實現掃描,之後再刪除圖片,保證每次該文件夾是用戶最新上傳的二維碼
對軟件測試感興趣可以掃一掃
8.如何定時測試計劃-Crontab命令

測試用例不僅可在線運行,可定時執行冒煙測試、測試計劃,然後發送郵件測試報告

思路:通過linux中Crontab命令觸發定時批量執行

如圖所示:每週1-5中午12點半,定時執行某個系統下的自動化測試用例
在這裏插入圖片描述
瞭解這些功能和效果展示後,對於ATP的UI自動化測試是不是能快速上手,不僅在項目交付中實現UI自動化測試,且將UI自動化用例與功能測試用例已合二爲一

未來規劃路線:

IOS移動端UI自動化

移動端app多維度的性能測試

用例多線程、併發執行,提高效率

支持視頻回放操作,快速定位出錯原因

結語:

ATP一體化測試平臺,讓接口和UI測試用例變得更簡單,讓QA更專注於測試用例本身的設計

這次的推文後,ATP已經介紹了接口測試方案,UI自動化測試,APP自動化,然而ATP遠不止這些功能,還有接口壓測、基準測試等等,請繼續關注我們,不要吝嗇你們的需求和建議,我們會不斷的完善優化。

ATP會支撐和伴隨着質量保證部,在項目交付過程中起到保質提效的作用

整理了一份216頁軟件測試大廠面試題,以及2020推薦最新的簡歷模板,送給小夥伴們,關注公衆號程序員一凡回覆【簡歷】自行領取,和一些小夥伴建立一個技術交流羣,一起探討技術,分享技術資料,旨在共同學習進步,如果感興趣就加入我們吧!
在這裏插入圖片描述
在這裏插入圖片描述

視頻課相關資料加羣1079636098獲取,還可領取更多軟件測試面試題資料和Python自動化/測試開發學習資料。

目前測試平臺項目研發已經完成並且在Github開源,有興趣的朋友可以去Github下載https://github.com/ooqitech/ATP

祝你事業順利!