1.什么是Appium?
Appium 是一个开源、跨平台的自动化测试工具,用于测试原生和轻量移动应用,支持 iOS, Android 和 FirefoxOS 平台。Appium 驱动苹果的 UIAutomation 库和 Android 的 UiAutomator 框架,使用 Selenium 的 WebDriver JSON 协议。
2.基本原理:Client/Server Architecture
appium的核心其实是一个暴露了一系列REST API的server。这个server的功能其实很简单:监听一个端口,然后接收由client发送来的command。翻译这些command,把这些command转成移动设备可以理解的形式发送给移动设备,然后移动设备执行完这些command后把执行结果返回给appium server,appium server再把执行结果返回给client。
在这里client其实就是发起command的设备,一般来说就是我们代码执行的机器,执行appium测试代码的机器。狭义点理解,可以把client理解成是代码,这些代码可以是java/ruby/python/js的,只要它实现了webdriver标准协议就可以。
这样的设计思想带来了一些好处:
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.搭建环境(android):
软件准备:jdk、android sdk、node、appium、python、python-client、selenium(ant,apache_maven)
1) appium:是一个开源、跨平台的自动化测试工具
2)node:用javascript编写服务器端程序,让javascript脱离web浏览器的限制,像C#、JAVA、Python等语言一样在服务器端运行,这也让一些熟悉Javascript的前端开发人员进军到服务器端开发提供了一个便利的途径。
3)JDK:写Java的applet和应用程序的程序开发环境
4)sdk:即Android Software Development Kit.它提供了在Windows/Linux/Mac平台上开发Android应用的开发组件,包含了在Android平台上开发移动应用程序的各种工具集。
5)python 是一种面向对象、直译式计算机编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。
6)selenium2:ThoughtWorks公司开发的web自动化测试工具
(ant:Java 开源组织 Apache 的一个项目,是一个基于 java 的 build 工具,apache_maven:项目管理及自动构建工具)
4.安装步骤
1.安装jdk&配置JAVA_HOME环境变量:(略)java下载地址
运行java -version检验
2.安装python(略)
3.安装appium:
1)brew install node # get node.js 安装nodejs
npm是一个node包管理&分发工具。有了npm,可以很快的找到特定服务要使用的包,进行下载、安装以及管理已经安装的包。
安装完成后打开终端输入node -v,检查是否安装成功。输入npm,验证node.js是否安装成功。
2)npm install -g appium # get appium
(注意:通过npm安装appium会比较慢(需翻墙),可以尝试内网镜像)
安装完成输入 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环境变量:ANDROID_HOME、PATH
配置完成可以命令行输入:Android,根据能否打开Android SDK Manager判断是否配置完成。
或者:命令行键入appium-doctor命令检验环境
再或者:
/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
#其他机型可能需要稍作调整
#-*- 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("//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("//android.widget.TextView[contains(@text, '确定')]").click()
sleep(2)
driver.find_element_by_xpath("//android.widget.TextView[contains(@text, '跳过')]").click()
# 准备登出
#此处紧接登录过程,所以注释掉一个步骤
#driver.find_element_by_xpath("//android.widget.TextView[contains(@text, '我')]").click()
driver.find_element_by_id('com.duitang.main:id/iv_setting_menu').click()
# 使用缓慢拖动swipe来拖动屏幕,duration表示持续时间
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("//android.widget.Button[contains(@text, '确定')]").click()
driver.quit()
参考文档:
Appium Python API
Appium python API
Appium简明教程
新手学appium