Appium搭建

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • Appium 使用Appium的两种方式: 1. npm安装appium包; 2. 直接下载Appium桌面工具 ...
    sandy测试路阅读 1,948评论 0 2
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,569评论 25 707
  • Appium学习之路—环境搭建 说实话,Appium第一次接触还是在testerhome看到的,介绍说这个框架可以...
    点点寒彬阅读 9,921评论 10 34
  • 为什么一个人的时候,什么委屈都受得了,什么难过都咽得下,可是一但有人安慰,情绪就像泛滥的洪水,怎么也收不住。
    慌张girl阅读 128评论 0 0
  • 我估计再联系你,你有可能不会理我了。 你可能觉得我忘的太快了,也许还真的是吧。 但,这不是真的。 我也不知道该怎么...
    lisp阅读 171评论 0 3