1. 程式人生 > >零基礎APP自動化測試教程(一)

零基礎APP自動化測試教程(一)

APP自動化框架選擇

目前較火的自動化工具特點對比:

  • Appium(適用於Android&iOS;支援多語言;不需要應用原始碼)
  • Uiautomator(適用於Android;僅Java語言;不需要應用原始碼)
  • Robotium(適用於Android;僅Java語言;不需要應用原始碼)
  • Calabash(適用於Android&iOS;Ruby語言(其他語言不友好);iOS上需要應用原始碼)

通過上面的比較,其實已經可以看出我們應該去選擇哪款工具了,這裡不妨再囉嗦一下選擇Appium原因及它的其他優點:

  • 目前國內關於它的討論如火如荼,方便查閱相關資料
  • 支援眾多的多語言,任性選擇開發語言是一件幸福的事情
  • 不需要應用原始碼,給予測試開發工作一定的自由度
  • 能跨應用進行測試,很好很強大
  • 支援iOS及Android平臺,面對雙平臺APP時,媽媽再也不用擔心我用兩套測試框架了,減少認知成本
  • 支援Android原生及混合應用,Come on,任憑開發人員怎麼折騰我都能招架的住

Appium介紹

首先,來一段官方風格的簡介去介紹Appium

Appium是一個開源、跨平臺的測試框架,可以用來測試原生及混合的移動端應用。Appium支援IOS、Android及FirefoxOS平臺。Appium使用WebDriver的json wire協議,來驅動Apple系統的UIAutomation庫、Android系統的UIAutomator框架。Appium對IOS系統的支援得益於Dan Cuellar’s對於IOS自動化的研究。Appium也集成了Selendroid,來支援老android版本。Appium支援Selenium WebDriver支援的所有語言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl語言,更可以使用Selenium WebDriver的Api。Appium支援任何一種測試框架。如果只使用Apple的UIAutomation,我們只能用javascript來編寫測試用例,而且只能用Instruction來執行測試用例。同樣,如果只使用Google的UIAutomation,我們就只能用java來編寫測試用例。Appium實現了真正的跨平臺自動化測試。

下面再由我帶來一段Appium的原理介紹:
Appium之所以牛掰,是因為它是一個高大全的測試框架。能夠跨平臺(Android&iOS),支援多種開發語言,而讓它擁有這些特性的原因還是得益於它的WebDriver API了。我們可以簡單的把它理解為測試指令碼和手機系統的中間層,它對底層的自動化框架進行了封裝並且暴露出一個統一的API,客戶端無論是用什麼語言編寫指令碼都能夠通過HTTP請求將其恰如其分的傳送給伺服器完成自動化操作,如下圖所示:


那麼如何利用該款神器開展我們的自動化測試工作呢?來談談大體的流程。
首先我們需要根據測試用例逐條編寫相應的測試指令碼,驗證該指令碼的可行性後加入指令碼庫。接下來就是執行我們的指令碼庫,並輸出測試結果,這裡可以用到Jenkins

達到持續整合的自動化測試目的,將程式碼的構建、驗證、測試結果的輸出合為一體。具體方案還需繼續深入研究。


Appium實踐

說了這麼多背景知識,可能各位看官早已不耐煩了,那麼趕緊來實戰一把,通過一個“小栗子”教大家一步步使用Appium。

安裝Appium環境

工欲善其事必先利其器,安裝Appium執行及開發環境是第一步。這裡我拿Window平臺下的Android APP測試環境舉例。
需要安裝的檔案列表清單:

  1. 安裝Android環境,沒什麼太多可說的,需要強調的一點是,請將Android SDK存放在沒有空格的路徑下,如:C:\Program-Files\Android\android-sdk是OK的,而C:\Program(空格)Files\Android\android-sdk是Sorry的。如果你執意要在路徑中加空格,那我只能敬你是條漢子,因為後面你可能會碰到Appium執行指令碼失敗的情況發生。
  2. 安裝Node.js,這裡去官網下載安裝包安裝即可,別忘了在系統中新增對應的環境變數。
  3. 安裝Appium,同樣可以去官網下載最新的安裝包安裝即可。
  4. 安裝開發語言環境,這裡我用的是Pyhthon,所以需要安裝其對應的環境。這裡的環境包括Python的開發環境及對應的依賴庫(Appium_Python_Client),該庫可以使用以下命令列進行快速安裝:
    pip install Appium-Python-Client
    其他語言類似,同樣需要安裝開發語言環境和對應的依賴庫,這裡就不贅述,請自行搜尋對應的方法。

編寫指令碼

這裡我編寫了一個Python指令碼來在真機上執行我正在跟的一款神奇的APP,驗證使用者登入登出功能是否能夠正常使用,並將異常結果截圖儲存,以方便我們後續定位問題。

# -*- coding: utf-8 -*-
from appium import webdriver
from time import sleep

def login():
    try:
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '6.0.1'
        desired_caps['deviceName'] = 'Galaxy S6'
        desired_caps['appPackage'] = 'dji.go.v4'
        desired_caps['appActivity'] = 'dji.pilot.main.activity.DJILauncherActivity'
        driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

        driver.find_element_by_name('我').click()
        driver.find_element_by_name('登入').click()
        driver.find_element_by_name('請輸入註冊郵箱').send_keys('account')
        driver.find_element_by_id('dji.go.v4:id/cw1').send_keys('password')
        driver.find_element_by_name('登入').click()
        sleep(3)

        driver.find_element_by_name('設定').click()
        driver.find_element_by_name('退出DJI帳號').click()
        driver.find_element_by_name('確定').click()
        sleep(1)
        driver.quit()
    except Exception as e:
        print(e)
        driver.get_screenshot_as_file("failed.jpg")
        return False
    return True

if __name__=='__main__':
    if(True==login()):
        print("該條用例執行成功")
    else:
        print("該條用例執行失敗")

該段程式碼實現的邏輯是:啟動APP並讓APP按照我們指定的路徑進行登入登出操作,如果未按照要求進入下一個介面,則會報出異常訊息,此時我們將該異常介面截圖儲存到指定資料夾下,判定用例執行失敗並結束該指令碼,反之則用例執行成功。

執行指令碼

在執行指令碼前,我們需要連上真機並開啟Appium,點選右上角的”Android機器人”圖示,將PlatformVersion調整為我們真機對應的Android系統版本,Device Namet填寫為指令碼中所應的裝置名。如果是Android模擬器使用者,則請將PlatformVersion調整為我們模擬器對應的Android系統版本。


在設定完畢後,點選右上角的“三角形”箭頭執行Appium。而後,我們只要執行剛剛編寫的指令碼即可,靜靜的等待測試結果輸出。下圖是這款神奇APP的登入介面,指令碼啟動APP後會自動點選登入按鈕並輸入賬號/密碼,而後再登出賬號,退出APP。


檢視結果

比如,這裡我故意輸錯登入密碼,使該條驗證是否能正常登入登出的用例執行失敗,此時程式會反饋“該條用例執行失敗”並將異常截圖儲存到我們指定的路徑中去。


總結,這篇文章給大家初略介紹了為什麼選擇Appium及通過一個小例子介紹如何安裝使用Appium。然而通過一篇博文可能依舊不能夠靈活應用Appium做自動化測試工作,後續會為大家帶來更加詳細的使用方法,敬請期待。

我是Gavin,一個樂於分享的測試從業者,歡迎與我交流,如需轉載本文請註明出處。