前言
本來並不打算寫這么一篇文章,但是實踐下來發現網上的各種教程里大致有兩個問題。一是文章有些跟不上時代,目前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玩玩,也是極其方便的。

下載地址:https://developer.android.com...
安裝過程非常簡單,雙擊后一路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。
Appium 官網: http://appium.io/
安裝方式一: 使用NodeJS 安裝
首先到[NodeJS官網]()下載安裝最新的NodeJS,Windows下屬於傻瓜安裝。安裝好之后你可以配置NodeJS的安裝源,在國內一般都用taobao的鏡像,速度還不錯。
在個人目錄下新建一個 .npmrc 文件,寫入:
registry=https://registry.npm.taobao.org/
然后使用npm命令安裝 Appium
npm install -g appium
建議順便安裝一下appium-doctor,通過運行appium-doctor命令可以快速檢查appium的環境問題。
npm install -g appium-doctor
如果安裝成功,那么就可以通過 appium 命令啟動appium server。

關閉命令行或者按 Ctrl - C 就可以停止 Appium Server。
安裝方式二: 使用Appium安裝包
網上很多教程所引導的Appium安裝包一般在百度網盤或者bitbucket里,其實這兩者都不是最新的。最新版的安裝包應該從官網下載,Appium 目前托管在github,正確的下載地址應該為:
最新版的Appium 桌面安裝后啟動是這樣的。

功能上和老的版本沒太大區別,但是日志和UI顯示更加清晰,一旦錯誤發生讓你更容易找到問題所在。

注意,你可以不安裝Appium 桌面版,但是命令行版應該還是需要安裝的,因為自動化測試運行時一般都是通過命令啟動和關閉Appium,桌面版並不提供命令行功能,只是為了調試方便。
關於Appium的介紹,這里有一份非常好的文檔:http://appium.io/slate/cn/master
安裝 Appium-Client
本文只討論Python實現的Appium測試,所以你只需要允許以下命令:
pip install Appium-Python-Client
如果需要使用其他編程語言,下表供參考:
| 語言/框架 | Github版本庫以及安裝指南 |
|---|---|
| Ruby | https://github.com/appium/ruby_lib |
| Python | https://github.com/appium/python-client |
| Java | https://github.com/appium/java-client |
| JavaScript (Node.js) | https://github.com/admc/wd |
| Objective C | https://github.com/appium/selenium-objective-c |
| PHP | https://github.com/appium/php-client |
| C# (.NET) | https://github.com/appium/appium-dotnet-driver |
| RobotFramework | https://github.com/jollychang/robotframework-appiumlibrary |
必要的環境變量設置
如果你已經安裝了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”。代碼如下:
from appium import webdriver desired_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')
運行效果:

恭喜你,你已經開始進入移動端的自動化測試的大門了!
