[Android] 使用 Appium 在 Mac 上自動化測試 app

[Android] 使用 Appium 在 Mac 上自動化測試 app

今天在公司上了一個用 Appium 來做 app 自動化測試的課程,

Tony 講師主要的文章在這裡:

Appium手機自動化測試從頭學 –Windows/Android環境安裝篇

 

講師的環境是 Windows + eclipse + Java,

不過因為我現在已經很習慣在 Mac 上工作了,

而且我的 Android IDE 已經換成 Android Studio 了

因此決定在 Mac 上裝一次看看囉,

在 Mac + Android Studio + Python 上也實作一次~

 

1. 準備 Android 環境

這邊可以參考 將 eclipse 專案移轉至 Android Studio 上了 這一篇,

先把 Android SDK、Android Studio 和模擬器都裝好~

不過老實說因為後面是用 python 來實作測試程式,

因此 Android Studio 只是讓我拿來開啟模擬器用的 😛

 

2. 安裝 Appium

用 Homebrew 安裝 Appium:

brew cask install appium

 

裝好之後啟動 Appium,會問你是否要授權給 Appium 執行 iOS 模擬器,

選 Yes 就行了:

Screen Shot 2015-08-27 at 8.40.07 AM  

 

3. 驗證 Appium 設定是否正確 

Appium 提供了一個 Appium Doctor 的功能,可以檢查 Appium 是否設定正確,

點下工具列上的聽診器圖示:

Screen Shot 2015-08-27 at 1.03.24 PM  

 

會跳出一個 terminal 視窗,開始執行 Appium Doctor 做檢查~

像它一開始有檢查出來我的 JAVA_HOME 和 ANDROID_HOME 環境變數沒設定,

於是我在我的 ~/.bash_profile 加了下面兩行:

export ANDROID_HOME=/Users/testuser/Library/Android/sdk
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"

 

如果沒有問題的話,就會出現 All checks  were successful 的訊息:

testuser@localhost ~ $ '/opt/homebrew-cask/Caskroom/appium/1.3.7/Appium.app/Contents/Resources/node/bin/node' '/opt/homebrew-cask/Caskroom/appium/1.3.7/Appium.app/Contents/Resources/node_modules/appium/bin/appium-doctor.js'
Running iOS Checks
✔ Xcode is installed at /Applications/Xcode.app/Contents/Developer
✔ Xcode Command Line Tools are installed.
✔ DevToolsSecurity is enabled.
✔ The Authorization DB is set up properly.
✔ Node binary found at /usr/local/bin/node
✔ iOS Checks were successful.
Running Android Checks
✔ ANDROID_HOME is set to "/Users/testuser/Library/Android/sdk"
✔ JAVA_HOME is set to "/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home."
✔ ADB exists at /Users/testuser/Library/Android/sdk/platform-tools/adb
✔ Android exists at /Users/testuser/Library/Android/sdk/tools/android
✔ Emulator exists at /Users/testuser/Library/Android/sdk/tools/emulator
✔ Android Checks were successful.
✔ All Checks were successful

 

4. 安裝 Selenium 與 Appium 的 Web Drivers

Appium 事實是基於 Selenium 實作的,

因此先照 使用 Selenium web driver 作 web automation 這篇寫的,

把 selenium 給 python 用的套件裝好,

這樣才能使用 python 來操作 selenium~

 

接著還得再安裝 Appium 給 python 使用的套件 Appium-Python-Client

sudo pip install Appium-Python-Client

 

安裝好了之後,應該就可以成功使用 python 引用 Appium 的 web driver 了:

python -c "from appium import webdriver"

 

5. 用 Python web driver 撰寫測試程式

這邊要做的測試程式很簡單,就只是開啟手機上的預設瀏覽器,

瀏覽到 Yahoo!奇摩的首頁後,點下「科技」這個連結而已~ 

 

先來看一下完整的測試程式:

# -*- coding: utf-8 -*-
from appium import webdriver
from selenium.webdriver.common.by import By
import time
import unittest
class OpenBrowserToYahoo(unittest.TestCase):
def setUp(self):
# Prepare desired server capabilities
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['browserName'] = 'Browser'
desired_caps['autoWebview'] = True
# Start web driver
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
self.driver.implicitly_wait(30)
def test_open_browser_to_yahoo(self):
driver = self.driver
driver.get("https://tw.yahoo.com")
driver.find_element(By.XPATH, "//li[contains(text(), '科技')]").click()
time.sleep(30)
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()

 

在使用 Appium 前,得先設定好 server capabilities

像我設定的是使用 Android 模擬器上的預設瀏覽器,

並且在開啟瀏覽器後,把 default context 自動設定在它的 web view 上面,

這樣之後 find_element_xxx() 之類的操作就是在那個 web view 上進行~

 

server capabilities 決定好了之後,

就讓 web driver 連到 http://localhost:4723/wd/hub 這個 Appium 的固定網址,

這樣子 setUp() 函式就完成了~

 

在測試函式 test_open_browser_to_yahoo() 中,

做的事情其實就跟 Selenium 一模一樣,

先用 driver.get() 瀏覽至 Yahoo! 網頁,

再用 find_element() 找到包含「科技」這個字的 <li> 後點下去,

就可以看到瀏覽器上顯示科技類的新聞了~

後面的 sleep 只是為了讓我可以看到上述的結果,

不然其實事情做完後,瀏覽器很快就會被關掉了~

 

6. 開啟 Android 模擬器與 Appium,開始執行測試程式

在執行測試程式前,模擬器和 Appium 都得先啟動才行~

 

首先把 Android 模擬器執行起來,非常建議使用 x86 的 image,

搭配上開啟 Intel 硬體加速,Android 模擬器可以快很多~

 

接著按下 Appium 右上角的 Launch 按鈕,Appium 就啟動了~

可以看到下面跑出一堆訊息,如果有看到 Responding to client with success,

應該就代表 Appium 和模擬器之間連線沒有問題了:

Screen Shot 2015-09-07 at 12.35.03 AM  

 

接著用 python 執行剛剛寫的測試程式,

順利的話可以看到模擬器裡的瀏覽器被開起來,

原本預設先開到 Google,後來被轉到 Yahoo,

接著點下了科技這個連結,顯示了科技類的新聞:

Untitled   

 

在執行的時候,如果遇到了 A new session could not be created 的問題,

通常是前一個連線還沒結束,

可以稍微等一下,或者是直接按 Appium 視窗上的 Stop 再重新 Launch,

一樣要等待 Responding to client with success 的訊息出現後,

再來執行測試程式~

 

不過要注意的是,目前 Appium 好像沒辦法用在 Genymotion 模擬器上面,

我如果開啟的是 Genymotion 模擬器的話,

執行測試程式時,只會看到瀏覽器一直被開起來,Idle 一陣子後關掉,

接著又開起來這樣子的無窮迴圈…

 

這篇簡單的介紹了一下在 Mac 上使用 Appium 來對 Android 模擬器自動化操作,

之後有其他的實作再來分享囉~

 

(本頁面已被瀏覽過 1,182 次)

One thought on “[Android] 使用 Appium 在 Mac 上自動化測試 app

  1. 您好
    請問您能分享實作appium時該如何判斷操作結果的標準嗎
    如何判斷結果的Pass/Fail

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料