本來并不打算寫這么一篇文章,但是實踐下來發現網上的各種教程里大致有兩個問題。一是文章有些跟不上時代,目前android開發和測試的技術更新都比較快,內容有些過期。二是細節部分不是太完整,拼拼湊湊也能完成,但對新手來說就比較痛苦。那么,我也來試著總結一下自己踩過的坑。
備注:Android自動化測試環境和開發環境并不完全相同,測試環境可以很簡單粗暴,很多工具可以不用安裝,比如JDK,SDK Tools,測試腳本用C#,Python都可以完成;但是開發環境一般都是需要JDK和不少編譯工具。
Windows 10 Pro 64bit + Python 3.5.3
如果只是自動化測試用,安裝JRE就可以了,如果需要開發或者調試APK,那么請安裝JDK。
JRE只有50多MB,JDK則接近200MB,請前往Java官網下載最新版安裝,選擇64位。
以前的教程里都會讓你去裝 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 Studio,模擬器也已經有了,從工程界面找到AVD Manager的按鈕,按照下圖三個步驟就可以添加并啟動一個模擬器。
每當你安裝新版本的模擬器都是需要翻墻或者代理的,最開始啟動Android Studio時它已經給你下一個最新版的Android,我當前模擬器中的Android版本是7.1.1。
如果一切順利,那么當你啟動模擬器后,你就可以看到一臺虛擬的Android設備了,手動測試基本條件已經達成,自動化測試指日可待。
多說幾句,除了使用 Android SDK 自帶的模擬器外,我們還有兩個選擇,一是使用真機,速度和體驗上會更好。另外一個選擇就選擇別的模擬器產品,比如 [Genymotion](),因為是商業軟件,所以對個人用戶(免費)會有諸多限制,盡管如此,其成熟度也比Android SDK自帶的模擬器高很多。因為這兩個方案的具體實現涉及到的內容比較多,故不在本文討論。
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,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安裝包一般在百度網盤或者bitbucket里,其實這兩者都不是最新的。最新版的安裝包應該從官網下載,Appium 目前托管在github,正確的下載地址應該為:
最新版的Appium 桌面安裝后啟動是這樣的。
功能上和老的版本沒太大區別,但是日志和UI顯示更加清晰,一旦錯誤發生讓你更容易找到問題所在。
注意,你可以不安裝Appium 桌面版,但是命令行版應該還是需要安裝的,因為自動化測試運行時一般都是通過命令啟動和關閉Appium,桌面版并不提供命令行功能,只是為了調試方便。
關于Appium的介紹,這里有一份非常好的文檔:http://appium.io/slate/cn/master
本文只討論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')
運行效果:
恭喜你,你已經開始進入移動端的自動化測試的大門了!
原文轉自:https://segmentfault.com/img/remote/1460000009282667