[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 就行了:
3. 驗證 Appium 設定是否正確
Appium 提供了一個 Appium Doctor 的功能,可以檢查 Appium 是否設定正確,
點下工具列上的聽診器圖示:
會跳出一個 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 和模擬器之間連線沒有問題了:
接著用 python 執行剛剛寫的測試程式,
順利的話可以看到模擬器裡的瀏覽器被開起來,
原本預設先開到 Google,後來被轉到 Yahoo,
接著點下了科技這個連結,顯示了科技類的新聞:
在執行的時候,如果遇到了 A new session could not be created 的問題,
通常是前一個連線還沒結束,
可以稍微等一下,或者是直接按 Appium 視窗上的 Stop 再重新 Launch,
一樣要等待 Responding to client with success 的訊息出現後,
再來執行測試程式~
不過要注意的是,目前 Appium 好像沒辦法用在 Genymotion 模擬器上面,
我如果開啟的是 Genymotion 模擬器的話,
執行測試程式時,只會看到瀏覽器一直被開起來,Idle 一陣子後關掉,
接著又開起來這樣子的無窮迴圈…
這篇簡單的介紹了一下在 Mac 上使用 Appium 來對 Android 模擬器自動化操作,
之後有其他的實作再來分享囉~
One thought on “[Android] 使用 Appium 在 Mac 上自動化測試 app”
您好
請問您能分享實作appium時該如何判斷操作結果的標準嗎
如何判斷結果的Pass/Fail