1.什么是Appium?
Appium 是一個開源断傲、跨平臺的自動化測試工具,用于測試原生和輕量移動應用,支持 iOS, Android 和 FirefoxOS 平臺徐矩。Appium 驅(qū)動蘋果的 UIAutomation 庫和 Android 的 UiAutomator 框架粮宛,使用 Selenium 的 WebDriver JSON 協(xié)議窥淆。
2.基本原理:Client/Server Architecture
appium的核心其實是一個暴露了一系列REST API的server。這個server的功能其實很簡單:監(jiān)聽一個端口巍杈,然后接收由client發(fā)送來的command忧饭。翻譯這些command,把這些command轉(zhuǎn)成移動設備可以理解的形式發(fā)送給移動設備筷畦,然后移動設備執(zhí)行完這些command后把執(zhí)行結(jié)果返回給appium server词裤,appium server再把執(zhí)行結(jié)果返回給client。
在這里client其實就是發(fā)起command的設備鳖宾,一般來說就是我們代碼執(zhí)行的機器吼砂,執(zhí)行appium測試代碼的機器。狹義點理解鼎文,可以把client理解成是代碼渔肩,這些代碼可以是java/ruby/python/js的,只要它實現(xiàn)了webdriver標準協(xié)議就可以拇惋。
這樣的設計思想帶來了一些好處:
1.可以帶來多語言的支持周偎;
2.可以把server放在任意機器上抹剩,哪怕是云服務器都可以;(是的蓉坎,appium和webdriver天生適合云測試)
Session
session就是一個會話澳眷,在webdriver/appium,你的所有工作永遠都是在session start后才可以進行的袍嬉。一般來說境蔼,通過POST /session這個URL,然后傳入Desired Capabilities就可以開啟session了伺通。
開啟session后箍土,會返回一個全局唯一的session id,以后幾乎所有的請求都必須帶上這個session id罐监,因為這個seesion id代表了你所打開的瀏覽器或者是移動設備的模擬器吴藻。
Desired Capabilities
Desired Capabilities攜帶了一些配置信息。最重要的作用是告訴server本次測試的上下文弓柱。這次是要進行瀏覽器測試還是移動端測試沟堡?如果是移動端測試的話是測試android還是ios,如果測試android的話那么我們要測試哪個app矢空? server的這些疑問Desired Capabilities都必須給予解答航罗,否則server不買賬,自然就無法完成移動app或者是瀏覽器的啟動屁药。
3.搭建環(huán)境(android):
軟件準備:jdk粥血、android sdk、node酿箭、appium复亏、python、python-client缭嫡、selenium(ant,apache_maven)
1) appium:是一個開源缔御、跨平臺的自動化測試工具
2)node:用javascript編寫服務器端程序,讓javascript脫離web瀏覽器的限制妇蛀,像C#耕突、JAVA、Python等語言一樣在服務器端運行讥耗,這也讓一些熟悉Javascript的前端開發(fā)人員進軍到服務器端開發(fā)提供了一個便利的途徑有勾。
3)JDK:寫Java的applet和應用程序的程序開發(fā)環(huán)境
4)sdk:即Android Software Development Kit.它提供了在Windows/Linux/Mac平臺上開發(fā)Android應用的開發(fā)組件,包含了在Android平臺上開發(fā)移動應用程序的各種工具集古程。
5)python 是一種面向?qū)ο蟀ā⒅弊g式計算機編程語言,具有近二十年的發(fā)展歷史,成熟且穩(wěn)定雇逞。它包含了一組完善而且容易理解的標準庫荤懂,能夠輕松完成很多常見的任務。
6)selenium2:ThoughtWorks公司開發(fā)的web自動化測試工具
(ant:Java 開源組織 Apache 的一個項目塘砸,是一個基于 java 的 build 工具,apache_maven:項目管理及自動構(gòu)建工具)
4.安裝步驟
1.安裝jdk&配置JAVA_HOME環(huán)境變量:(略)java下載地址
運行java -version檢驗
2.安裝python(略)
3.安裝appium:
1)brew install node # get node.js 安裝nodejs
npm是一個node包管理&分發(fā)工具节仿。有了npm,可以很快的找到特定服務要使用的包掉蔬,進行下載廊宪、安裝以及管理已經(jīng)安裝的包。
安裝完成后打開終端輸入node -v女轿,檢查是否安裝成功箭启。輸入npm,驗證node.js是否安裝成功蛉迹。
2)npm install -g appium # get appium
(注意:通過npm安裝appium會比較慢(需翻墻)傅寡,可以嘗試內(nèi)網(wǎng)鏡像)
安裝完成輸入 appium &/appium -v查看是否安裝成功
其他安裝方式:
bitbucket 百度云
個人推薦下載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.設置Android環(huán)境變量:ANDROID_HOME荐操、PATH
配置完成可以命令行輸入:Android,根據(jù)能否打開Android SDK Manager判斷是否配置完成。
或者:命令行鍵入appium-doctor命令檢驗環(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.運行appium
-查看安卓設備號:adb devices
-命令行運行appium:appium -a 127.0.0.1 -p 4723 -U 003bb116 --no-reset或者打開appium客戶端珍策,點擊lanch開啟appium服務
#堆糖app登錄登出簡易自動化方式
#可行機型:MI4托启、MI3
#其他機型可能需要稍作調(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)
# 準備登錄
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()
# 準備登出
#此處緊接登錄過程,所以注釋掉一個步驟
#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()
# 使用緩慢拖動swipe來拖動屏幕攘宙,duration表示持續(xù)時間
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簡明教程
新手學appium