移動端自動化測試策略

2021-12-29 Thoughtworks測試



隨著移動網際網路的深入發展,移動端APP的需求不斷增加,越來越多的數位化企業開始注重其APP的建設。在市場競爭日益加劇的今天,網際網路為快不破的方法論也影響著當下企業的決策。企業紛紛實行移動端產品的快速迭代模式:如阿里提出的2-1-1模式,美團的單周發版節奏等,這也給研發團隊帶來了移動端高效測試的壓力,各大公司紛紛開始了移動端自動化測試的探索與實踐之路。

相較於API自動化測試以及Web自動化測試而言,移動端自動化測試的實施成本相對較高,原因一方面是因為移動端由於Android與iOS兩大陣營都有自己獨立的生態體系,而且相比於Google的Android系統,  蘋果的iOS 系統生態更加封閉一些:如只能依靠蘋果提供的工具鏈等。同時由於開源工具和框架還不夠穩定和豐富,移動端自動化測試面臨了很多新的挑戰:不同的機型,系統版本,解析度,網絡抖動等等,都會影響到自動化測試執行的結果。要想在移動端做好自動化測試,團隊需要制定與其項目相匹配的測試策略與方法。

在設計移動端自動化測試策略的時候,我們可以思考以下幾個問題,看我們能否給出合理的理由:

為什麼要做移動端自動化測試,自動化測試的價值在哪裡

你的項目中質量內建成熟度如何?

如果單元測試足夠覆蓋的情況下,是否還有必要做端到端自動化測試?是否已經有移動端專項測試體系了,如性能,安全,兼容性,穩定性等?

你的團隊是否已經有完善的基礎設施了,如Mobile CI/CD ?


如果連打包,構建,分發都不是自動且持續的,先解決這個問題,再來考慮自動化測試吧。要想富,先修路。

分層測試策略

在不同的層,我們所關注的重點會有所不同。

因此需要使用分層測試策略,制定不同的測試目標:

實現核心穩定的用例自動化,用於每次的迭代回歸測試

對於新功能或者頻繁變動的功能,採用手工探索性測試

APP 的可用性與UX測試,可以引入產品和設計人員參與測試

對於一些UI樣式和兼容性等需求,使用自動遍歷測試

APP的穩定性,可以採用隨機測試,並且採集測試過程中的設備性能數據

APP性能和安全測試,需要採用安全和性能專項測試策略

用例穩定性設計

自動化測試用例的穩定性和可維護性非常重要,關係到自動化的成效,需要關注以下幾點:

1. 使用穩定的測試框架和工具

 很多人喜歡造輪子,沒有對開源框架的優缺點進行評估和分析,就開始自己實現一個簡易版的框架和工具,在這裡是不太推薦的,

一個穩定的測試框架是自動化測試的基礎,在規模化的自動化測試工程中,穩定比靈活更加重要。我們可以在開源框架不符合需求的情況下,先進行二次開發,也不要貿然就從零開始自己寫一個。


2. 失敗重試機制,智能等待策略,智能判斷等

自動化測試執行過程中,可能會遇到各種各樣的突發異常,如網絡波動,內存溢出導致APP進程被系統強制殺死等,因此必須要考慮容錯處理,避免因環境的問題導致用例執行失敗。

3. 好的測試用例設計方法

好的用例設計方法,可以使我們的用例具備更好的可維護性以及可讀性。我們可以採用以下幾種業內常用的設計方法:

好的測試框架需要具備以下九個特點:

穩定性(框架必須有很多真實的使用案例,並且有穩定的版本,以及社區持續維護)

可擴展性 (用戶可以很方便進行二次開發)

清晰的架構 (框架的設計必須清晰,模塊化)

易於使用 (讓測試開發人員可以用更多的精力投入用例編寫上,而不是去耗費時間熟悉框架)

跨平臺支持(windows, linux, macos)

可集成性 (可以與不同的CI平臺集成,如Jenkins, GoCD, Bamboo等)

報告 (有易讀的測試報告)

日誌 (有友好的日誌與錯誤提示)

技術棧支持 (可以支持多種語言技術棧工具)

業內有很多開源的測試框架,大部分具備上述這些特點,如開源社區的Robot Frameowork, Cucumber, 提供商業支持的Katalon,  以及阿里的Macaca 和網易的Airtest等,深入研究其中一種即可,詳情可以參見這些項目的官網。

Robot Framework: https://robotframework.org/

Cucumber: https://cucumber.io/

Katalon: https://www.katalon.com/

Airtest: http://airtest.netease.com/

Macaca: https://macacajs.github.io/zh/

選擇移動端測試工具,目前業界使用比較多的移動端自動化測試工具有Appium, 它可以同時支持Android和iOS 模擬器和真機的自動化測試。下圖是Appium的一個技術原理圖。Appium採用B/S架構設計,整體分為服務端和客戶端兩個部分,Appium服務端是用nodejs實現的,提供REST API 服務的一個WEB伺服器,主要是用來管理測試執行和結果反饋的。Appium客戶端則提供了多種語言的三方庫支持,可以方便開發人員使用自己熟悉的語言調用Appium客戶端三方庫來與Appium服務端進行交互。

為什麼Appium是使用最廣的移動端自動化工具,這也與它的設計理念有關:


Appium 的理念

Appium 旨在滿足移動端自動化需求的理念,概述為以下四個原則:

你不應該為了自動化而重新編譯你的應用或以任何方式修改它。

你不應該被限制在特定的語言或框架上來編寫運行測試。

移動端自動化框架不應該在自動化接口方面重造輪子。

移動端自動化框架應該開源,在精神、實踐以及名義上都該如此

自動化測試腳本不僅僅是本地執行,從下圖 DORA給出的《2019 DevOps 報告》中可以看出,持續自動化測試是未來的趨勢,因此必須要將自動化測試腳本集成到CI環境中。

一個好的持續測試需要關注以下四點:

速度 (Speed)
可靠性 (Reliability)
數量 (Quantity)
維護性(Maintenance)


自動化測試工程腳手架

自動化測試工程腳手架的目的是用於快速初始化一個測試工程項目,並且引入一些最佳的規範實踐。同時對測試工程模塊化劃分,更有利於測試用例的開發與維護。

測試腳本版本控制管理

測試腳本也需要進行版本化管理,這樣可以方便多人協作用例的開發維護,同時使用一定的分支策略,也保障了測試腳本的穩定性。

 腳本可維護性

BDD + PageObject 構建可讀性與可維護性的用例

用BDD的方式來編寫測試用例,基於Gherkin語法,Given-When-Then 這樣的用例更加易讀。

使用PageObject來對UI頁面和頁面上的操作進行封裝與頁面對象建模,從而實現對上層用例屏蔽底層的具體實現細節,達到更好的功能復用。

我們可以通過一些指標來度量自動化測試的效果,並且快速給出反饋。

測試的因素指標
目標
自動化測試是否有意義跟蹤因實際缺陷導致的自動化測試失敗的數量,以及因自動化測試腳本本身編碼質量問題而導致的自動化測試執行失敗的數量。測試失敗始終代表著產品中存在實際缺陷自動化測試是否在流水線中執行   檢查是否所有測試套件均在每個流水線觸發器中運行自動化測試在主流水線和主工作流中運行。在驗收測試、探索性測試和生產環境中發現的 Bug 數量。所發現的 Bug 的比例隨時間的變化。在「修復成本較低」的測試階段發現更多 Bug,團隊可針對在探索性測試期間和生產環境中發現的 Bug 增加自動化測試,同時添加單元測試以發現在驗收測試中發現的 Bug。自動化測試ROI 持續統計自動化測試的投入與收益比隨著時間推移,自動化測試的投入穩定,收益逐步增長

其他細節指標還有很多,可以選擇團隊中關注的部分來統計度量:

自動化測試需求覆蓋率

自動化測試在測試用例中的佔比

自動化測試通過率/失敗率

缺陷逃逸率

缺陷發現率

自動化測試執行時間

自動測試失敗流水線終止比率

Flaky Test不可靠測試用例數

更多.

我們可以用開源的框架和工具快速搭建一套多端自動化測試架構,並且具備高度的可擴展性。

工具清單🧾

通用測試框架:Robot Framework

APP測試工具:Appium

Web測試工具:Selenium

API測試工具:Requests

iOS底層框架:XCUITest

Android底層框架:Google UIAutomator2

持續集成平臺:Jenkins

消息通知平臺:Slack, 企業微信, Email

雲測平臺:Testin, SauceLabs, BrowserStack

執行環境:Docker

1. 如果單元測試足夠覆蓋的情況下,是否還有必要做端到端自動化測試?

從測試金字塔中可以看出,每一層的側重點不同,而且都是不可或缺的。

這是因為單元測試是對軟體中最小的單元進行功能驗證和測試(從內部結構上),完備的最小單元功能的測試覆蓋率並不能保證端到端不出問題。而UI端到端自動化測試是對軟體提供的端到端業務功能模擬用戶操作進行驗收(從外部行為上)。並且基於2/8原則:用戶最常用的功能大致佔軟體所提供功能的20%,我們可以重點保障高業務價值,且穩定的核心功能自動化,加快回歸測試效率,同時可以增強團隊信心。

2. 如果團隊已經實現了95%甚至更高的單元測試覆蓋率,「是否還有必要做端到端自動化測試」呢?

單元測試100%覆蓋率,覆蓋的是什麼,分支?語句?

高百分比的單元測試覆蓋率並不直接等同於高代碼質量,也可能出現需求漏做,異常漏處理等情況。更不能直接等同於業務功能需求的覆蓋率。單元測試有其自身的價值,如增強重構信心等;但是不能說100%的單元測試,就不需要其他測試手段,除非我們明確知道單元測試和外部行為的映射關係,那麼通常我們不太好說單元測試對外部行為的影響,因此也不能完全依賴於單元測試,而是需要多種測試手段從不同維度來保障系統功能正確性。

3. 對於移動端的可測性,目前有無相對成體系的評價標準?


移動端應用的可測性相對於API或者Web UI而言,還是偏低的;網絡/數據,應用狀態,APP內部存儲等都缺乏可觀察性,對可測性也帶來了挑戰;

目前業內也都在探索一些移動端可測性的一些方法,比如通過deeplink來直接進入到待測頁面,避免前序路徑複雜或者難以到達等,或者Mock數據來構造場景驗證UI功能等,不過體系化的評價標準,目前還沒有,大家都還在積累一些實踐經驗。


相關焦點

  • Appium 必須掌握的移動端自動化測試框架
    移動應用在企業中的地位越來越重要,為了更好將產品推向市場,企業對移動軟體測試的要求越來越高,為了完成大量的高強度移動端的測試需求,掌握高校的移動自動化測試工具則成為每一個軟體測試工程師必備的要求。這裡為大家詳細介紹一下Appium——一款軟體測試工程師必須掌握的開源測試自動化框架。
  • Appium+Python做移動端自動化測試
    第一章 導言  1.1 編制目的  該文檔為選用Appium作為行動裝置原生(Native)、混合(Hybrid)、移動Web(Mobile Web)應用UI自動化測試的相關自動化測試人員、開發人員等提供參考。
  • 京東JMAC,完美解決移動自動化測試的常見問題
    >>>>  背景提到移動端自動化測試就不得不提及目前幾大開源的移動端自動化測試工具/框架,主流工具有Appium、Athrun、Robotium、UiAutomator、Monkey、Selendroid等。
  • 移動APP自動化測試框架對比
    移動APP的UI自動化測試長久以來一直是一個難點,難點在於UI的」變」, 變化導致自動化用例的大量維護。
  • 自動化測試框架結構圖
    點擊上方"AllTests軟體測試",設為星標第一時間關注技術乾貨!
  • 為上移動端做準備 桌遊《七大奇蹟》開啟測試
    為上移動端做準備 桌遊《七大奇蹟》開啟測試 來源:www.18183.com 作者:四毛 時間:2015-07-15
  • 移動App測試中的最佳做法
    每項開發的新功能都需要進行測試。移動app測試中功能測試是一個重要方面,移動測試員應該要進行手動測試和自動化測試。剛開始測試時,測試員必須把 移動app  當做「黑盒」一樣進行手動測試,看看提供的功能是否正確並如設計的一樣正常運作。除了經典軟體測試,像點擊按鈕看看會發生什麼,測試員還必須執行更多功能 的行動裝置專門的測試。
  • Adjust發布iOS14端移動營銷用戶許可獲取指南
    2020年11月13日訊 —— Apple計劃將在iOS14端實施的隱私變更於2021年初落地。新規讓數據處理的過程變得更加透明,同時也讓廣告主在iOS端定向用戶的方式產生巨大變化,讓移動營銷人員需要重新評估應用整體用戶獲取和定向策略。
  • 移動端異常數據測試
    背景在測試階段或者在一些特殊環境,經常因為某些數據導致客戶端崩潰.
  • APP自動化測試系列之Appium介紹及運行原理
    Appium介紹Appium是一個開源測試自動化框架,可用於原生,混合和移動Web應用程式測試。它使用WebDriver協議驅動IOS,Android和Windows應用程式。Appium是開源的移動端自動化測試框架;Appium可以測試原生的、混合的、以及移動端的web項目;Appium可以測試IOS,Android應用;Appium是跨平臺的,可以用在osx,windows以及linux桌面系統上;Appium支持Ruby、Python、Java、JavaScript、Objective C、php
  • 【推薦】移動App測試中的最佳做法
    他在軟體開發和測試方面幹了七年,自2010年起,他一直在德國漢堡的XING AG公司就職,幾個項目裡,比如XING調查和XING建議,他負責測試管理,測試自動化和測試執行。Daniel現在是XING移動和XING API團隊的質量保證團隊負責人。在XING移動團隊中,他還負責XING安卓和iPhone Apps的測試管理和測試自動化。
  • Windows-UI自動化:如何選擇合適的測試框架
    作者:萌萌說到UI自動化測試,大多數人第一反應就是移動端UI測試;但是隨著產品的不斷迭代和發展,我們的業務往往會不再局限於移動端
  • 微軟發布網頁自動化測試工具Playwright for Python
    微軟強化其端到端測試工具Playwright,使其不僅能夠使用JavaScript,對網頁應用程式進行測試,現在還擴張支持Python,讓Python開發者也能方便地,對網頁應用程式執行端到端測試。開發者可以從PyPI安裝Playwright for Python函數庫,開始測試工作。端到端測試是利用程序自動與UI交互,以驗證應用程式功能的方法,微軟提到,自動化端到端測試,可以讓開發團隊更快且更有自信地交付程序代碼,而且因為現在團隊交付速度要求更快,又需要構建可在多設備上執行的應用程式,所以測試的壓力也越來越大。
  • API測試全接觸:策略、類型、步驟和自動化測試工具
    這就是為什麼作為測試人員的我們,必須通過測試API,以求獲得最大的測試覆蓋率(test coverage)的原因。  而作為集成測試的一部分,API自動化可以協助加速測試的進程並提高效率。由於目前大多數公司都在業務層面上使用到了RESTful微服務和API,因此對於API的測試已經成為了任何發布測試計劃中的關鍵環節之一。
  • 不只是移動 App 應用測試方法,還有測試思路……
    移動端測試還是 PC 端測試,業務測試其實都屬於 GUI 測試的範疇,所以基本的測試思路,比如基於頁面對象封裝和基於業務流程封裝的思想是相通的。  移動端應用的測試其自身特點,和其他傳統測試又有一些獨特的測試方法與思路。
  • 自動化測試實踐經驗分享(附視頻)
    ,埃森哲中國卓越測試中心負責人陳曉鵬做《基於BDD的敏捷測試案例分享》主題演講,陳曉鵬指出,「做自動化測試,一定要跟CI/CD和DevOps做集成,把從Idea到實施上線到最終交付市場的整條鏈條打通,只有實現業務端的敏捷,自動化測試才能發揮最大的價值。」
  • 如何做好軟體系統自動化測試?
    系統級測試一般指對交付的系統進行端到端的測試,驗證系統是否滿足所有功能和非功能需求。一般而言,系統測試是整個測試實踐最重要的,但也是成本最大的測試。為了讓系統測試能夠有效並且低成本,我們先來看看系統測試在整個測試象限中的位置和分類。如上在敏捷測試四象限,將所有測試實踐分為四大類。
  • 漫談服務端測試
    基於客戶端的測試使用最廣泛的還是Webdriver框架,但是在快速交付的速度中基於UI的自動化測試收到各種局限,這種局限主要來自於維護的成本高和不可確定性,但是並不能說UI自動化測試沒有它的價值,事實上任何一個測試的技術需要應用到合適的場景和環境中。
  • Appium 1.18.1 發布,移動應用自動化測試工具
    Appium 是一個開源、跨平臺的自動化測試工具,最初主要用於測試原生和輕量移動應用,包括 iOS 和 Android ,目前還支持對 Windows 平臺上的應用的自動化測試。
  • 接口自動化測試與Tesla自動化測試平臺
    引言我們今天要講的tesla,不是電動汽車,而是字節跳動內部的服務端自動化測試平臺——Tesla。在服務端測試中,接口測試是非常重要的。【使用代碼來進行接口測試】簡單來說,代碼對測試用例的組織和抽象能力更強,並且執行和驗證的能力更強,所以接口測試進階的形態是使用代碼來進行描述。但同時需要注意的是,代碼和自動化不是萬能的,也不是唯一決定測試水平的要素。【流水線技術】流水線的使用標誌著測試真正進入了自動化。