在 Windows 10下搭建 Appium + Android +python自動化測試環境
轉:https://betacat.online/posts/2017-05-03/setup-appium-automation-test-environment/
前言
本來並不打算寫這麼一篇文章,但是實踐下來發現網上的各種教程裡大致有兩個問題。一是文章有些跟不上時代,目前android開發和測試的技術更新都比較快,內容有些過期。二是細節部分不是太完整,拼拼湊湊也能完成,但對新手來說就比較痛苦。那麼,我也來試著總結一下自己踩過的坑。
備註:Android自動化測試環境和開發環境並不完全相同,測試環境可以很簡單粗暴,很多工具可以不用安裝,比如JDK,SDK Tools,測試指令碼用C#,Python都可以完成;但是開發環境一般都是需要JDK和不少編譯工具。
實踐平臺
Windows 10 Pro 64bit + Python 3.5.3
安裝 JAVA 環境
如果只是自動化測試用,安裝JRE就可以了,如果需要開發或者除錯APK,那麼請安裝JDK。
- JRE = JVM + Java SE 標準類庫,相當於Java程式最基本的執行環境。
- JDK = JRE + 開發工具集,包括javac編譯工具等等。
JRE只有50多MB,JDK則接近200MB,請前往Java官網下載最新版安裝,選擇64位。
安裝 Android Studio / SDK
以前的教程裡都會讓你去裝 Android SDK,但現在你從Google或者Bing裡很難搜尋到 Android SDK的下載連結,因為目前
- 安裝Android Studio (包含 Android SDK) – 推薦
- 僅安裝Android SDK 命令列工具
新版本的Android SDK和以前也不太一樣,以前我們有一個 SDK Manager.exe 的工具用於更新和下載各版本的API,還有一個 AVD Manager.exe 的工具可以模擬各種型號的安卓裝置。最新的 SDK 工具把UI 介面基本都去掉了,只留下命令列工具,具體的使用可以參閱官方文件:
那麼多一事不如少一事,我建議推薦你直接安裝Android Studio,這樣不僅省事,而且萬一你想寫個App玩玩,也是極其方便的。
安裝過程非常簡單,雙擊後一路Next,中間你也可以另外指定SDK的安裝目標路徑(不建議修改)。安裝好之後,直接啟動 Android Studio,首先會提示你聯網下載一些必要的工具(你需要一個好的網路和梯子)。
一切就緒後,你可以在啟動介面就可以開啟 SDK Manager。
或者新建一個工程,從工程介面開啟SDK Manager。
SDK Manager 開啟之後,使用的方法就一目瞭然了。這就是個讓你更新API和各種開發工具的工具。
如果只是為了自動化測試其實你只要記住SDK安裝目錄就可以了,不需要安裝任何多餘的工具。SDK的安裝目錄在配置環境變數時需要用到。
如果你的網路不暢通,那麼需要先設定代理。接下來才能安裝你想要的SDK版本和開發者工具。
安裝 Android 模擬器
如果你已經安裝了Android Studio,模擬器也已經有了,從工程介面找到AVD Manager的按鈕,按照下圖三個步驟就可以新增並啟動一個模擬器。
每當你安裝新版本的模擬器都是需要翻牆或者代理的,最開始啟動Android Studio時它已經給你下一個最新版的Android,我當前模擬器中的Android版本是7.1.1。
如果一切順利,那麼當你啟動模擬器後,你就可以看到一臺虛擬的Android裝置了,手動測試基本條件已經達成,自動化測試指日可待。
多說幾句,除了使用 Android SDK 自帶的模擬器外,我們還有兩個選擇,一是使用真機,速度和體驗上會更好。另外一個選擇就選擇別的模擬器產品,比如 Genymotion,因為是商業軟體,所以對個人使用者(免費)會有諸多限制,儘管如此,其成熟度也比Android SDK自帶的模擬器高很多。因為這兩個方案的具體實現涉及到的內容比較多,故不在本文討論。
安裝 Appium
Appium是開源的自動化測試框架,主要用於iOS,Android以及Windows apps等移動平臺的自動化測試。官網的介紹說是它實現一套適用於移動端的WebDriver協議,所以使用Appium時用的還是依賴於Selenium,和Web自動化測試的主要區別就在Driver不一樣。
舉一個例子,如果我們需要用Google Chrome來跑Selenium的自動化測試,那麼首先需要一個ChromeDriver。如果需要跑在IE上,那麼需要一個IEDriver。那麼現在需要在移動端比如Android裡跑Selenium,這時候你需要一個Appium就夠了,它擔當了Driver的角色。Appium實現了一套標準的WebDriver,只要Appium服務起來之後,你的程式碼只需要和Appium互動,Appium會去告訴裝置該幹嘛幹嘛。這裡提到的裝置可以是iOS或者Android,甚至是Windows Phone 和Firefox OS。
安裝方式一: 使用NodeJS 安裝
首先到NodeJS官網下載安裝最新的NodeJS,Windows下屬於傻瓜安裝。安裝好之後你可以配置NodeJS的安裝源,在國內一般都用taobao的映象,速度還不錯。
在個人目錄下新建一個 .npmrc 檔案,寫入:
1 | registry=https://registry.npm.taobao.org/ |
然後使用npm命令安裝 Appium
1 | npm install -g appium |
建議順便安裝一下appium-doctor,通過執行appium-doctor命令可以快速檢查appium的環境問題。
1 | npm install -g appium-doctor |
如果安裝成功,那麼就可以通過 appium
命令啟動appium server。
關閉命令列或者按 Ctrl - C 就可以停止 Appium Server。
安裝方式二: 使用Appium安裝包
網上很多教程所引導的Appium安裝包一般在百度網盤或者bitbucket裡,其實這兩者都不是最新的。最新版的安裝包應該從官網下載,Appium 目前託管在github,正確的下載地址應該為:
最新版的Appium 桌面安裝後啟動是這樣的。
功能上和老的版本沒太大區別,但是日誌和UI顯示更加清晰,一旦錯誤發生讓你更容易找到問題所在。
注意,你可以不安裝Appium 桌面版,但是命令列版應該還是需要安裝的,因為自動化測試執行時一般都是通過命令啟動和關閉Appium,桌面版並不提供命令列功能,只是為了除錯方便。
安裝 Appium-Client
本文只討論Python實現的Appium測試,所以你只需要允許以下命令:
1 | pip install Appium-Python-Client |
如果需要使用其他程式語言,下表供參考:
必要的環境變數設定
如果你已經安裝了appium-doctor,那麼你只要執行appium-doctor命令就可以知道你還需要設定哪些環境變數,比如:
不要慌,其實你只需要設定以下環境變數:
環境變數 | 值 |
---|---|
ANDROID_HOME | Android SDK 的安裝位置 |
JAVA_HOME | JDK 或者 JRE 的安裝位置 |
加入 PATH | %ANDROID_HOME%\tools |
加入 PATH | %ANDROID_HOME%\platform-tools |
加入 PATH | %JAVA_HOME%\bin |
加入 PATH | %ANDROID_HOME%\build-tools\??version?? (可選) |
最後一個環境變數是為了更方便地使用aapt這個工具,完成環境變數配置後你可以再次執行appium-doctor進行檢查。不出意外,你應該能通過檢查。
完成第一個自動化測試
終於來到了動真刀真槍的時候了,很多人一開始就放棄了,更多人開始了之後就放棄了,走到這一步真的挺不容易的。
開始寫程式碼之前有些事情你應該清楚:
- 模擬器或者測試機必須是Ready的狀態,每次啟動模擬器都很費時間,所以建議模擬器不要關閉,通過程式碼來啟動模擬器是一個辦法,但是時間成本有點高。
- 如果是除錯程式碼階段,建議保持Appium桌面版長期執行,遠端執行時再通過程式碼自動啟動和關閉Appium。
- Appium會根據你的測試程式碼去尋找符合要求的裝置,如果你啟動了多臺虛擬機器或者連線了多臺實體機,請顯式地在程式碼中指定裝置名稱或者版本號。
第一個自動化測試需求很就簡單,就是啟動內建的撥號軟體,搜尋 “hello toby”。程式碼如下:
1234567891011121314 | from appium import webdriverdesired_caps = {}desired_caps['platformName'] = 'Android'desired_caps['platformVersion'] = '7.1.1'desired_caps['deviceName'] = 'Android Emulator'desired_caps['appPackage'] = 'com.android.dialer'desired_caps['appActivity'] = 'DialtactsActivity'driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)driver.find_element_by_id('com.android.dialer:id/search_box_collapsed').click()search_box = driver.find_element_by_id('com.android.dialer:id/search_view')search_box.click()search_box.send_keys('hello toby') |
執行效果:
恭喜你,你已經開始進入移動端的自動化測試的大門了!