1.什么是Appium?
Appium 是一個(gè)開源、跨平臺(tái)的自動(dòng)化測(cè)試工具,用于測(cè)試原生和輕量移動(dòng)應(yīng)用,支持 iOS, Android 和 FirefoxOS 平臺(tái)。Appium 驅(qū)動(dòng)蘋果的 UIAutomation 庫和 Android 的 UiAutomator 框架,使用 Selenium 的 WebDriver JSON 協(xié)議。
2.基本原理:Client/Server Architecture
appium的核心其實(shí)是一個(gè)暴露了一系列REST API的server。這個(gè)server的功能其實(shí)很簡(jiǎn)單:監(jiān)聽一個(gè)端口,然后接收由client發(fā)送來的command。翻譯這些command,把這些command轉(zhuǎn)成移動(dòng)設(shè)備可以理解的形式發(fā)送給移動(dòng)設(shè)備,然后移動(dòng)設(shè)備執(zhí)行完這些command后把執(zhí)行結(jié)果返回給appium server,appium server再把執(zhí)行結(jié)果返回給client。
在這里client其實(shí)就是發(fā)起command的設(shè)備,一般來說就是我們代碼執(zhí)行的機(jī)器,執(zhí)行appium測(cè)試代碼的機(jī)器。狹義點(diǎn)理解,可以把client理解成是代碼,這些代碼可以是java/ruby/python/js的,只要它實(shí)現(xiàn)了webdriver標(biāo)準(zhǔn)協(xié)議就可以。
這樣的設(shè)計(jì)思想帶來了一些好處:
1.可以帶來多語言的支持;
2.可以把server放在任意機(jī)器上,哪怕是云服務(wù)器都可以;(是的,appium和webdriver天生適合云測(cè)試)
Session
session就是一個(gè)會(huì)話,在webdriver/appium,你的所有工作永遠(yuǎn)都是在session start后才可以進(jìn)行的。一般來說,通過POST /session這個(gè)URL,然后傳入Desired Capabilities就可以開啟session了。
開啟session后,會(huì)返回一個(gè)全局唯一的session id,以后幾乎所有的請(qǐng)求都必須帶上這個(gè)session id,因?yàn)檫@個(gè)seesion id代表了你所打開的瀏覽器或者是移動(dòng)設(shè)備的模擬器。
Desired Capabilities
Desired Capabilities攜帶了一些配置信息。最重要的作用是告訴server本次測(cè)試的上下文。這次是要進(jìn)行瀏覽器測(cè)試還是移動(dòng)端測(cè)試?如果是移動(dòng)端測(cè)試的話是測(cè)試android還是ios,如果測(cè)試android的話那么我們要測(cè)試哪個(gè)app? server的這些疑問Desired Capabilities都必須給予解答,否則server不買賬,自然就無法完成移動(dòng)app或者是瀏覽器的啟動(dòng)。
3.搭建環(huán)境(android):
軟件準(zhǔn)備:jdk、android sdk、node、appium、python、python-client、selenium(ant,apache_maven)
1) appium:是一個(gè)開源、跨平臺(tái)的自動(dòng)化測(cè)試工具
2)node:用javascript編寫服務(wù)器端程序,讓javascript脫離web瀏覽器的限制,像C#、JAVA、Python等語言一樣在服務(wù)器端運(yùn)行,這也讓一些熟悉Javascript的前端開發(fā)人員進(jìn)軍到服務(wù)器端開發(fā)提供了一個(gè)便利的途徑。
3)JDK:寫Java的applet和應(yīng)用程序的程序開發(fā)環(huán)境
4)sdk:即Android Software Development Kit.它提供了在Windows/Linux/Mac平臺(tái)上開發(fā)Android應(yīng)用的開發(fā)組件,包含了在Android平臺(tái)上開發(fā)移動(dòng)應(yīng)用程序的各種工具集。
5)python 是一種面向?qū)ο蟆⒅弊g式計(jì)算機(jī)編程語言,具有近二十年的發(fā)展歷史,成熟且穩(wěn)定。它包含了一組完善而且容易理解的標(biāo)準(zhǔn)庫,能夠輕松完成很多常見的任務(wù)。
6)selenium2:ThoughtWorks公司開發(fā)的web自動(dòng)化測(cè)試工具
(ant:Java 開源組織 Apache 的一個(gè)項(xiàng)目,是一個(gè)基于 java 的 build 工具,apache_maven:項(xiàng)目管理及自動(dòng)構(gòu)建工具)
4.安裝步驟
1.安裝jdk&配置JAVA_HOME環(huán)境變量:(略)java下載地址
運(yùn)行java -version檢驗(yàn)
2.安裝python(略)
3.安裝appium:
1)brew install node # get node.js 安裝nodejs
npm是一個(gè)node包管理&分發(fā)工具。有了npm,可以很快的找到特定服務(wù)要使用的包,進(jìn)行下載、安裝以及管理已經(jīng)安裝的包。
安裝完成后打開終端輸入node -v,檢查是否安裝成功。輸入npm,驗(yàn)證node.js是否安裝成功。
2)npm install -g appium # get appium
(注意:通過npm安裝appium會(huì)比較慢(需翻墻),可以嘗試內(nèi)網(wǎng)鏡像)
安裝完成輸入 appium &/appium -v查看是否安裝成功
其他安裝方式:
bitbucket 百度云
個(gè)人推薦下載appium-1.4.13.dmg文件!!
3)npm install wd # get appium client
其他方式:
pip install Appium-Python-Client
tar -xvf Appium-Python-Client-X.X.tar.gz
cd Appium-Python-Client-X.X
python setup.py install
或者:
git clone git@github.com:appium/python-client.git
cd python-client
python setup.py install
4)appium & # start appium
4.安裝android sdk
5.安裝ADT_bundle:(安裝Android Studio)
6.設(shè)置Android環(huán)境變量:ANDROID_HOME、PATH
配置完成可以命令行輸入:Android,根據(jù)能否打開Android SDK Manager判斷是否配置完成。
或者:命令行鍵入appium-doctor命令檢驗(yàn)環(huán)境
再或者:
/Applications/Appium.app/Contents/Resources/node_modules/appium/bin/appium-doctor.js
export ANDROID_HOME=/android-sdk-macosx
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home
Running Android Checks
? ANDROID_HOME is set to "/Users/yanglu/Downloads/android-sdk-macosx"
? JAVA_HOME is set to "/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home."
? ADB exists at /Users/yanglu/Downloads/android-sdk-macosx/platform-tools/adb
? Android exists at /Users/yanglu/Downloads/android-sdk-macosx/tools/android
? Emulator exists at /Users/yanglu/Downloads/android-sdk-macosx/tools/emulator
? Android Checks were successful.
5.運(yùn)行appium
-查看安卓設(shè)備號(hào):adb devices
-命令行運(yùn)行appium:appium -a 127.0.0.1 -p 4723 -U 003bb116 --no-reset或者打開appium客戶端,點(diǎn)擊lanch開啟appium服務(wù)
#堆糖app登錄登出簡(jiǎn)易自動(dòng)化方式
#可行機(jī)型:MI4、MI3
#其他機(jī)型可能需要稍作調(diào)整
#-*- coding: UTF-8 -*-
from appium.webdriver.common.touch_action import TouchAction
from appium import webdriver
from time import sleep
desired_caps = {}
desired_caps['device'] = 'android'
desired_caps['platformName'] = 'Android'
desired_caps['version'] = 'Default'
desired_caps['deviceName'] = 'Default'
desired_caps['unicodeKeyboard'] = 'True'
desired_caps['resetKeyboard'] = 'True'
desired_caps['appPackage'] = 'com.duitang.main'
desired_caps['appActivity'] = 'com.duitang.main.activity.SplashActivity'
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 準(zhǔn)備登錄
sleep(8)
driver.find_element_by_xpath("http://android.widget.TextView[contains(@text, '我')]").click()
sleep(2)
name = TouchAction(driver)
name.press(x=666, y=1290).release().perform()
driver.find_element_by_id('com.duitang.main:id/account_et').send_keys(u'六六222')
driver.find_element_by_id('com.duitang.main:id/password_et').send_keys('123456')
driver.find_element_by_xpath("http://android.widget.TextView[contains(@text, '確定')]").click()
sleep(2)
driver.find_element_by_xpath("http://android.widget.TextView[contains(@text, '跳過')]").click()
# 準(zhǔn)備登出
#此處緊接登錄過程,所以注釋掉一個(gè)步驟
#driver.find_element_by_xpath("http://android.widget.TextView[contains(@text, '我')]").click()
driver.find_element_by_id('com.duitang.main:id/iv_setting_menu').click()
# 使用緩慢拖動(dòng)swipe來拖動(dòng)屏幕,duration表示持續(xù)時(shí)間
sleep(2)
driver.swipe(start_x=805, start_y=1666, end_x=805, end_y=956,duration=1000)
driver.find_element_by_id('com.duitang.main:id/logout').click()
driver.find_element_by_xpath("http://android.widget.Button[contains(@text, '確定')]").click()
driver.quit()
參考文檔:
Appium Python API
Appium python API
Appium簡(jiǎn)明教程
新手學(xué)appium