Mobile Testing 與 Appium介紹

Mobile自動化測試系列的第二篇

內容包括Mobile Testing的基本概念

比較業界比較常用,開源的Mobile自動化測試架構

最後介紹Appium這套工具的原理與架構

Mobile App的類型

mobileapptype
Mobile App依照架構可分成三種主要類型
  1. Native App
  2. Web App
  3. Hybrid App

Native App

    針對特定手機系統並使用系統指定程式語言開發的App

    例如在iOS上用Swift或Objective-C, 在Android上用Java或Kotlin所開發的apps

Web App

    Web apps不需要像native apps一樣要從app store or market下載後安裝

    是由手機上的瀏覽器像是Chrome, Safari或Firefox來開啟, 不會佔用手機上儲存空間

Hybrid App

    Hybrid app基本上就是同時具備Native和web app的特性

    這類型的app會將Javascript, HTML和CSS執行在embedded webview

    外層用Native App wrapper包起來, 執行上跟Native app一樣要從app store下載安裝

Mobile App 測試上的挑戰

mobile-app-testing-scenarios
測試Mobile App要考量到許多不同因素
這些因素組合起來Mobile環境變得複雜且難以判斷

Mobile OS

    各種作業系統與版本間的功能、特性和限制都不同

    在某個版本上正常的功能不一定保證在其他作業系統版本就沒問題

Mobile Browser

    要測試web application對各種瀏覽器的相容性要花不少時間

Mobile Device

    市場上各品牌手機的解析度,輸入,硬體特性,軟體功能都有差異

    要覆蓋大部分測試手機, 準備這樣的環境需要花費不少成本

Network Carrier

    使用不同電信業者網路讓網路速度,穩定性與執行效能

    成為影響用戶體驗很重要的因素

Mobile User Location

    來自不同地區,國家的用戶所使用的語言,輸入方式,使用習慣都有很大的不同

    這也這增加了測試的範圍和複雜度

Common mobile automation frameworks

mobileautoframework
這些是目前業界上比較熱門的Mobile自動化測試框架

Calabash

    一套基於Cucumber的BDD框架, 可用來執行iOS與Android上的UI Test

KIF

    KIF(Keep it functional)是個iOS整合測式架構, 使用XCTest架構來測試iOS app 

UIAutomator

    Android內建提供給開發者做UI automation的工具

Robotium

    一套設計來測試Android native and web app的架構

Espresso

    由Google release用來做Android UI test的架構
    特色是執行速度快, 確保所有activity都啟動才會開始執行測試,
    降低各種等待所造成速度變慢或錯誤的情況

Appium

    一個開源, 跨平台的自動化測試架構, 目前在業界的使用率與活躍度最高
    

Mobile Automation Framework 比較

toolcomare
從這張比較表可以很看出Appium是目前市場上能同時支援跨平台, 多種程式語言和app類型的開發架構

Appium 是什麼? 可以吃嗎?

    一個移動端自動化測試開源工具,可以跨平台(iOS or Android)用一套API 來編寫測試案例

Appium 特色與優點

  1. 一套免費開源的mobile自動化測試工具
  2. 跨平台, 支援Native, Hybrid和Web app automation
  3. 不需要了解app內部邏輯或是重新compile app
  4. 同時支援iOS與Android 作業系統
  5. 支援幾乎所有熱門程式語言來開發

Appium 主要概念

Client/Server 架構

    1. Appium的核心是一個以Rest API溝通的Web Server

    2. Server接收從appium client的指令來驅動連接mobie device 

    3. Appium將執行結果以HTTP response格式顯示 

Session 架構

    1. 每次執行automation都會建立一條session

    2. 每一條session都會指定一個session ID

    3. 每個動作都會由送出 POST /session request給Server

Desired Capabilities

    一組key/value的組合由client送給Server 

    告訴Server端要啟動Session需要的所有參數資訊

Appium Server

    以Node.js 開發的HTTP Server

Appium Client

    支持各種程式語言的API library

    讓自動化腳本能依照WebDriver protocol送出request 

Appium 原理與架構

    1. Client Server架構

    2. 以WebDriver JSON Wire Protocol為基礎

    3. 與手機作業系統提供的自動化機制作互動式系統
appiumstructure01
  • 簡單運作流程:
      Appium client將測試腳本轉化成WebDriver Protocol URL, 通過Appium Server上的Node服務發送
    
      到各平台上的代理工具, 代理工具依照WebDriver 協議解析出要執行的操作, 然後調用個平台上的
    
      原生測式框架驅動UI動作, 再將測試結果依照之前的流程返還給Appium Server顯示在畫面上
    

iOS/Android詳細運作流程

architecturereal
    這張圖更詳細的說明整個iOS和Android上的action flow流程

    要注意的昰從iOS10以上版本Apple底層UI instrument framework改用XCUITest

    Android從7.0以後底層UI要改用UIAutomator 2

Appium在Android端工作流程

    1. Client端將webDriver腳本轉譯為JSONWireProtocol

    2. Appium在服務端啟動一個Servr(port 4723), Appium支持標準的WebDriver     JSONWireProtocol
    在這裡提供了一套REST的端口, Appium Server接收WebDriver client端發出的REST request,
    解析request內容, 調用對應的框架來執行操作

    3. Appium Server會把request轉發給中介Bootstrap.jar. Bootstrap監聽端口接收appium 命令
    最終通過調用UIAutomator來實現

    4. 最後Bootstrap將執行的結果返還給Appium Server. 

    5. Appium Server再將截果返還給appium client

Appium在iOS端工作流程

    流程和Android大致相同, 

    差別在步驟3是由Appium server在手機調用instrument.js啟動

    instrument.app, 將bootstrap.js 注入到手機進行UI互動

Appium Server就像斯斯一樣有兩種!

Appium-Desktop

  • 圖形化介面
  • 參數管理
  • 腳本錄製(不夠成熟)
  • UI 元件辨識
appiumguiserver

Appium Console

  • 主要版本, 更新最快
  • 運行於Node.js
  • 以Command Line參數方式來執行
appiumconsole

Appium Client Library

支援Python, Java, C#, Ruby, Javascript(Node.js), Objective-C, PHP

Tip of writing good test

  1. 減少重複的步驟
  2. 將共用的步驟放到setup, teardown之中
  3. 不要寫出要仰賴其他test case執行結果的case
  4. 減少不必要的測試步驟, 用最快的方式抵達想要的Check point

Reference:

Comments

  1. Your article is worth reading! You are providing a lot of valid information. This'll be really helpful for my reference. Do share more such articles.
    AWS course in Chennai
    AWS Certification in Chennai
    Cloud Training in Chennai
    DevOps Training
    Azure courses in Chennai
    VMware course
    AWS Training in Chennai
    AWS Training in Chennai

    ReplyDelete
  2. This comment has been removed by the author.

    ReplyDelete
  3. It is truly a well-researched content and excellent wording. I got so engaged in this material that I couldn’t wait to read. I am impressed with your work and skill. Thanks. electrical tag testing

    ReplyDelete
  4. Caesars Palace Hotel & Casino, Las Vegas - Mapyro
    This casino is an 8.5-acre hotel, 경상남도 출장안마 with 충청북도 출장샵 2,000-square-foot, 1,600 강원도 출장샵 slot 전주 출장안마 machines, and 70 table games. The casino is located 구리 출장안마 on a 4-acre lot along the  Rating: 4.4 · ‎32 reviews

    ReplyDelete

Post a Comment