轉(zhuǎn)轉(zhuǎn) App UI自動化進(jìn)化史

發(fā)表于 討論求助 2023-05-10 14:56:27

一、?概述

背景

  • 每個版本都需要執(zhí)行大量的老功能回歸Case,重復(fù)工作量較大

  • 隨著App功能的逐漸增加、回歸測試點逐漸增多,在保證測試覆蓋度的前提下,整體的回歸測試時長在增長,增加了測試壓力

  • 在針對老功能回歸測試的過程中,因回歸測試點比較多,可能存在測試點漏測的情況

目標(biāo)

  • 覆蓋大部分的回歸測試Case,幫助大家執(zhí)行部分功能的回歸測試,減少回歸測試的人工成本

  • 利用UI自動化測試 自由分配、隨時可執(zhí)行的優(yōu)勢,增加已有功能的測試頻率,在版本開發(fā)工程中,盡早發(fā)現(xiàn)因新更改影響已有功能的情況

  • 不局限于已有功能的驗證,利用UI Case的操作場景,在執(zhí)行過程中進(jìn)行其他數(shù)據(jù)的收集,供其他測試類型使用

  • 對線上已發(fā)布的版本,進(jìn)行主流程功能監(jiān)控

二、?框架介紹

1、UI自動化框架

UI自動化測試框架有很多,基于以下幾點考慮,選擇使用Appium框架

  • 轉(zhuǎn)轉(zhuǎn)Android & iOS 的App功能交互&設(shè)計始終保持一致,使用Appium可以保證一套操作邏輯,兩端都可以使用,減少Case創(chuàng)建&維護(hù)成本

  • Appium支持 Native 、Webview 、混合頁面的測試

  • 屬于外部測試框架、結(jié)合支持多種語言的優(yōu)點,更方便擴(kuò)展使用

2、UITest框架結(jié)構(gòu)

框架是UI的基礎(chǔ),框架的穩(wěn)定及易用,決定了UI自動化的整體流程的效率及穩(wěn)定

3、業(yè)務(wù)Case

結(jié)構(gòu)

參考PageObject設(shè)計模式,將Case的結(jié)構(gòu)進(jìn)行拆分管理,解耦的同時,更便于維護(hù)

case存放位置

  • app業(yè)務(wù)

屬于基礎(chǔ)業(yè)務(wù),存放在UITest框架內(nèi)部,可供其他業(yè)務(wù)使用部分已封裝好的操作場景

  • 其他業(yè)務(wù)

為了支持多業(yè)務(wù)使用框架,避免共同在單一工程中維護(hù)代碼時互相影響,對框架進(jìn)行了擴(kuò)展支持

每個業(yè)務(wù)可以單獨新建獨立的工程進(jìn)行Case的編寫及維護(hù)。只需將UITest框架放置在工程內(nèi),將保存測試集的suite文件通過傳參 或 在suite文件中調(diào)用UITest執(zhí)行接口,就可以觸發(fā)執(zhí)行

4、測試結(jié)果

本地存儲

  • 存儲位置:每次執(zhí)行都會在工程-report目錄中創(chuàng)建獨立的文件夾存儲測試結(jié)果

  • 存儲內(nèi)容:設(shè)備執(zhí)行Log(框架執(zhí)行過程中的log,非設(shè)備本身的log)、失敗Case截圖、便于匯總查看的報告文件(html)

線上存儲

每次的執(zhí)行結(jié)果都會上報結(jié)果平臺,存到數(shù)據(jù)庫中,便于查看歷史記錄及詳細(xì)的執(zhí)行數(shù)據(jù)

三、?UI自動化進(jìn)化過程

1、控件定位方式

iOS Native控件定位方式

  • 初期:主要以XPATH為主 + Text 的方式定位控件,XPATH 定位較慢,App布局改變后需要重新維護(hù)

  • RD幫助補(bǔ)充 控件 NAME屬性后:將主要使用XPATH的方式定位,更改為主要使用NAME & Text的方式,降低了控件定位耗時,降低了Case執(zhí)行耗時

圖像識別 方式擴(kuò)展

  • 初期:iOS和Android存在大量的共用圖片、每個控件基本只有一張圖片,在不同分辨率的設(shè)備上得到的相似度不同,會影響匹配結(jié)果判斷

  • 為每個平臺創(chuàng)建單獨目錄保存圖片:避免相同控件在不同平臺上,圖像略有不同,不能使用同一張圖片識別

  • 同控件根據(jù)不同分辨率,分別截圖取樣:定位控件時,先計算設(shè)備分辨率,優(yōu)先查找同分辨率的圖片樣本進(jìn)行識別

  • 通過圖片名稱查找圖片樣本:沒有通過分辨率查找到對應(yīng)圖片樣本后,根據(jù)圖片名稱查找通用圖片

支持Webview 控件

  • 初期:只執(zhí)行了Native 控件的識別及操

  • 現(xiàn)在:增加多種Webview定位方式的支持,從而增加了對M頁功能的較好支持

2、控件操作方法

驗證控件是否存在

圖像識別

  • 初期:只根據(jù)Element中存儲的完整圖片名稱,查找圖片

  • 現(xiàn)在:Element中存儲的為圖片名稱關(guān)鍵字,根據(jù)平臺查找平臺目錄,優(yōu)先根據(jù)分辨率+名稱查找圖片樣本,未找到再根據(jù)圖片名稱查找

iOS控件增加實際顯示位置判斷

  • 初期:通過Text/Name 定位的控件,與page_source對比,根據(jù)enable & visible的值,判斷是否可用,其他定位方式通過Driver.find,查找到就認(rèn)為可用。實際上Appium 執(zhí)行時獲取iOS的page_source并不穩(wěn)定,發(fā)現(xiàn)同一頁面,有時可以獲取到iOS 中 當(dāng)前頁面已加載出的所有控件(包含為顯示在屏幕區(qū)域內(nèi)的),并不能進(jìn)行有效操作,并且有些被Tab Bar由于被遮擋而不能正常操作到

  • 現(xiàn)在:增加控件位置的計算、判斷是否在屏幕可操作的區(qū)域內(nèi),若不在有效區(qū)域內(nèi),雖然可定位到,但因不可操作,也認(rèn)為其不存在,配合滑動操作,將控件滑動到有效區(qū)域再操作

點擊方法擴(kuò)展

  • 初期:只支持Native控件的點擊操作

  • 擴(kuò)展支持WebElement類型

  • 添加專項數(shù)據(jù)收集支持

滑動方法優(yōu)化

  • 根據(jù)設(shè)備屏幕分辨率,計算準(zhǔn)確的坐標(biāo)值,進(jìn)行滑動

  • 解決iOS滑動不好控制的問題,較好的控制滑動幅度

3、執(zhí)行策略

觸發(fā)方式擴(kuò)展

  • 初期:執(zhí)行參數(shù)較少,基本只在配合CI時使用,本地多數(shù)還是直接運行UiTest.py觸發(fā)執(zhí)行的方式

  • 擴(kuò)展更多的執(zhí)行參數(shù),更自由、方便的控制執(zhí)行配置,也可以較好的為外部的其他腳本/平臺提供支持

  • 封裝執(zhí)行接口函數(shù),供外部工程調(diào)用框架執(zhí)行時使用,參數(shù)與命令行參數(shù)一致,

多平臺同時執(zhí)行

解決多平臺依次執(zhí)行,整體時間過長,效率比較低的問題

  • Android / IOS 使用不同的預(yù)設(shè)起始端口啟動Appium,互相不沖突

  • 使用多進(jìn)程的方式,每個平臺啟動一個單獨的進(jìn)程用來啟動Case執(zhí)行

  • 利用執(zhí)行參數(shù) –o 或者 修改config中的optionsystem,控制當(dāng)次執(zhí)行時使用的平臺

多平臺多設(shè)備同時執(zhí)行相同Case

在進(jìn)行功能測試的同時進(jìn)行兼容性測試

  • 在每個平臺進(jìn)程內(nèi),根據(jù)設(shè)備列表,為每個設(shè)備分配Appium端口,互不沖突

  • 為每個設(shè)備再啟動一個進(jìn)程,獨立執(zhí)行Case

  • 每個設(shè)備單獨統(tǒng)計測試結(jié)果、保存、發(fā)送報告

  • 利用 –d 參數(shù)可以控制使用的設(shè)備

多平臺多設(shè)備分配Case執(zhí)行

Case 量越來越多,單設(shè)備全量Case的執(zhí)行時長越來越長,多設(shè)備分配Case執(zhí)行,可以提高執(zhí)行效率、縮短整體耗時

  • 根據(jù)Case列表篩選出每臺設(shè)備都需要執(zhí)行的初始化Case及 需要分配的Case集,結(jié)合設(shè)備列表,分配Case集,為每一個設(shè)備創(chuàng)建獨立的testsuite文件

  • 為每個設(shè)備分配一個進(jìn)程,執(zhí)行對應(yīng)的testsuite

  • 當(dāng)同平臺的所有設(shè)備都執(zhí)行完后,以平臺為維度,進(jìn)行結(jié)果匯總,保存結(jié)果、發(fā)送報告

  • 利用 –g 參數(shù)可以控制是否分配Case執(zhí)行

4、整個框架執(zhí)行邏輯對比

初期:

現(xiàn)在:

5、UICase篩選依據(jù)

UI自動化 Case 并不能保證100%的覆蓋所有的功能Case,在不同的階段的Case篩選依據(jù)會有所不同

  • 建設(shè)初期(欠債)階段:以回歸測試的CheckList為依據(jù),根據(jù)功能模塊的重要性,設(shè)定優(yōu)先級,逐步添加Case

  • 參與版本周期(進(jìn)度持平)階段:新功能Case的添加,優(yōu)先以冒煙測試用例為依據(jù),篩選出UI Case 覆蓋范圍,再添加額外的Case

四、未來

在Case可覆蓋功能 、執(zhí)行策略等方面,現(xiàn)有的UITest框架均已滿足了基本需求,可穩(wěn)定使用,后續(xù)的工作都為擴(kuò)展,目的是增強(qiáng)UI 自動化的作用,利用UI自動化做更多的事情

  • 利用UI Case ,獲取更多的數(shù)據(jù),驅(qū)動更多種類型的測試

  • 可視化查看、操作、控制UI 自動化 及相關(guān)測試的進(jìn)行

  • 持續(xù)集成、與CI結(jié)合、更自由、敏捷的執(zhí)行

發(fā)表
26906人 簽到看排名