1. 程式人生 > >在 Windows 10下搭建 Appium + Android +python自動化測試環境

在 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。

  1. JRE = JVM + Java SE 標準類庫,相當於Java程式最基本的執行環境。
  2. JDK = JRE + 開發工具集,包括javac編譯工具等等。

JRE只有50多MB,JDK則接近200MB,請前往Java官網下載最新版安裝,選擇64位。

安裝 Android Studio / SDK

以前的教程裡都會讓你去裝 Android SDK,但現在你從Google或者Bing裡很難搜尋到 Android SDK的下載連結,因為目前

官網推薦的做法有兩個:

  1. 安裝Android Studio (包含 Android SDK) – 推薦
  2. 僅安裝Android SDK 命令列工具

新版本的Android SDK和以前也不太一樣,以前我們有一個 SDK Manager.exe 的工具用於更新和下載各版本的API,還有一個 AVD Manager.exe 的工具可以模擬各種型號的安卓裝置。最新的 SDK 工具把UI 介面基本都去掉了,只留下命令列工具,具體的使用可以參閱官方文件:

那麼多一事不如少一事,我建議推薦你直接安裝Android Studio,這樣不僅省事,而且萬一你想寫個App玩玩,也是極其方便的。

android-sdk-download

安裝過程非常簡單,雙擊後一路Next,中間你也可以另外指定SDK的安裝目標路徑(不建議修改)。安裝好之後,直接啟動 Android Studio,首先會提示你聯網下載一些必要的工具(你需要一個好的網路和梯子)。

一切就緒後,你可以在啟動介面就可以開啟 SDK Manager。

sdk-manager-from-launch

或者新建一個工程,從工程介面開啟SDK Manager。

sdk-manager-from-project

SDK Manager 開啟之後,使用的方法就一目瞭然了。這就是個讓你更新API和各種開發工具的工具。

sdk-manager-usage

如果只是為了自動化測試其實你只要記住SDK安裝目錄就可以了,不需要安裝任何多餘的工具。SDK的安裝目錄在配置環境變數時需要用到。

如果你的網路不暢通,那麼需要先設定代理。接下來才能安裝你想要的SDK版本和開發者工具。

安裝 Android 模擬器

如果你已經安裝了Android Studio,模擬器也已經有了,從工程介面找到AVD Manager的按鈕,按照下圖三個步驟就可以新增並啟動一個模擬器。

avd-manager

每當你安裝新版本的模擬器都是需要翻牆或者代理的,最開始啟動Android Studio時它已經給你下一個最新版的Android,我當前模擬器中的Android版本是7.1.1。

如果一切順利,那麼當你啟動模擬器後,你就可以看到一臺虛擬的Android裝置了,手動測試基本條件已經達成,自動化測試指日可待。

android-avd-start

多說幾句,除了使用 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。

appium-start

關閉命令列或者按 Ctrl - C 就可以停止 Appium Server。

安裝方式二: 使用Appium安裝包

網上很多教程所引導的Appium安裝包一般在百度網盤或者bitbucket裡,其實這兩者都不是最新的。最新版的安裝包應該從官網下載,Appium 目前託管在github,正確的下載地址應該為:

最新版的Appium 桌面安裝後啟動是這樣的。

appium-desktop

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

appium-desktop-error

注意,你可以不安裝Appium 桌面版,但是命令列版應該還是需要安裝的,因為自動化測試執行時一般都是通過命令啟動和關閉Appium,桌面版並不提供命令列功能,只是為了除錯方便。

安裝 Appium-Client

本文只討論Python實現的Appium測試,所以你只需要允許以下命令:

1 pip install Appium-Python-Client

如果需要使用其他程式語言,下表供參考:

必要的環境變數設定

如果你已經安裝了appium-doctor,那麼你只要執行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進行檢查。不出意外,你應該能通過檢查。

完成第一個自動化測試

終於來到了動真刀真槍的時候了,很多人一開始就放棄了,更多人開始了之後就放棄了,走到這一步真的挺不容易的。

開始寫程式碼之前有些事情你應該清楚:

  1. 模擬器或者測試機必須是Ready的狀態,每次啟動模擬器都很費時間,所以建議模擬器不要關閉,通過程式碼來啟動模擬器是一個辦法,但是時間成本有點高。
  2. 如果是除錯程式碼階段,建議保持Appium桌面版長期執行,遠端執行時再通過程式碼自動啟動和關閉Appium。
  3. 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')

執行效果:

appium-hello

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