Appium手机自动化测试[转]

时间:2021-09-11 06:01:40
Appium手机自动化测试
Weibo:seveniruby
TesterHome出品(公开版)
Appium维护情况
• 由SauceLabs支持,一家业界领先的测试产品公司,
有成熟的企业测试解决方案
• Saucelabs有基于appium的云产品
• 在Google举办的GATC2013大会上有过详细介绍
目前mobile自动化的方案
业界top框架综合对比
Appium的优点
• 跨架构,native hybrid webview
• 跨设备,android ios firefoxos
• 跨语言, java python ruby nodejs php
• 跨app, 可以在多个app之间交互
• 不依赖源代码
• 不限制测试框架和平台
基于Android的测试框架
Appium在Android上的架构
Appium在iOS上的架构
Appium架构
• Appium在4.1以上使用uiautomator
• 4.1以下使用selendroid
• Android上使用了instrumentation和
uiautomator两套技术
• iOS使用uiautomation
• 同时还支持firefox, 并可扩展其他平台
Appium的使用
• 安装nodejs
• 使用npm安装appium
• Appium启动
Appium的启动参数
• Appium –help 可以看到一些可选参数
• 通过参数可以配置如下内容
• 监听ip和端口
• 是否使用selendroid
• 配置android和ios相关的参数
• 启动app
• 默认开启4723端口接受webdriver请求
• 默认开启4724用于和android通讯
Remote webdriver调用
视频演示
• http://v.youku.com/v_show/id_XNjM0ODIxNT
Uy.html
Appium的加载流程
• 调用android adb完成基本的系统操作
• 向android上部署bootstrap.jar包并启动
• Forward android的端口到pc机器上
• Pc上监听端口接受请求,使用webdriver协议
• 分析命令并转通过forward的端口发给
bootstrap.jar
• Bootstrap.jar接受请求并把命令发给
uiautomator或者插桩体系
具体流程举例
• Webdriver的脚本执行 Element.send_keys
• 发送到remote webdriver
/wd/hub/session/xxx/keys
• pc处理请求并转发给android和iphone
• Bootstrap.jar调用uiautomator
• Uiautomator调用settext方法
Appium设计理念
• 使用webdriver协议与用户交互
• XPath抽象定位
• 底层调用各自平台的自动化技术
• 类似selenium的架构
Webdriver协议
• 使用webdriver协议,成熟标准,应用广泛
• 它即将成为w3c业界标准
• 跨语言, 不限制测试框架
• Remote WebDriver方式支持云测和集群模式
• PC端运行可以支持各种runtimes,不受限手
机环境
Appium支持主流语言
webdriver的capabilities配置
• App: 本地路径或者网络下载地址
• browserName: 兼容selenium, 并不使用
• Device: ios android firefoxos
• Version: Android API version, iOS Version
• Launch: 是否让appium自动启动app
Capabilities的配置例子
• Android2.3
• Android4.2
• iOS6.1
演示代码
元素定位
• Android和iOS的原生控件以及webview控件映射为特定的
命名, 比如把所有平台的按钮映射为button元素
• 把当前的结构树映射为html文档
• 通过xpath来选择元素
• 三种定位方式
• Name: id,label text
• Tag_name: component type
• Xpath
• 定位元素建议采用PageObject模式,使用XPath
• 不要在测试用例中使用XPath
Xpath支持语法列表

//button

//button[last()]

//button[1]

/button

Button

//button/text/webview

//button[1]/text/webview[3]

//button[@name='hi there']

//button[@other_attr='hi there']

//list/button[@name="hi there"]

//button[contains(@other_attr, "hi")]

//*[contains(@text, 'agree')]

//*[@text='agree']

//frame//button
Xpath映射关系查询
Xpath获取
• Appium inspector
• uiautomatorview
• android也可以使用selendroid的inspector
元素交互
• Webdriver已经支持
• 点击
• 输入
• 按键事件
• Mobile相关:
• 拖动
• 划动
• 长按
点击与输入
长按操作代码
通过execute_script执行mobile方法
一个完整的例子
Appium的灵活扩展
• Appium对webdriver协议进行了扩充
• 通过利用execute_script执行mobie操作
• 通过自身服务增加了一些处理命令,比如安装,
卸载, 加载app
• 也扩展支持一些平台专有的指令
• Webdriver即将成为W3C标准
• Appium在推动webdrive增强mobile特性
位置模拟演示
• 只支持android模拟器
原生,混合,web
• 三种主流的app设计模式
• 原生:
• 使用开发特定平台专用app
• 混合:
• Phonegap 百度轻应用
• Web:
• 使用html5技术开发
• jquery mobile, senchatouch
混合模式的自动化
• iOS
• Android
移动测试环境规划
• 私有移动测试云环境
• 针对android ios等各个主要版本的测试环境
• 模拟器为主, 应付日常测试需求
• 公共云服务
• 百度MTC Testin Saucelabs
• 真机为主, 可以测试更多场景. 测试覆盖度

移动云测试
• Saucelabs提供了appium的在线云环境
• 提供虚拟机
• 提供运行时的截图和录像
• 脚本执行非常简单
• Testin和MTC也各具特色
移动测试持续集成
• Appium运行于PC端
• 支持webdriver协议和Grid模式
• 可以实现无缝的持续集成
• 与底层单元测试互补, 实现分层自动化
Appium对RF的支持
• Appium支持webdriver协议
• 可以使用RFT来设计测试用例
• 需要对appium目前的版本打补丁
• 已经提需求给官方, 后续会更好的支持
• 我目前提供的版本已经支持appium
Robot的测试用例演示
• 打开淘宝, 输入小米手机并搜索
Appium应用注意事项
• Xpath的支持有问题,并不是完全的xpath功

• 一些app比如qq不允许简单的am start,需
要提升权限, 比如让appium扩展支持su
• Appium长时间运行不太稳定, 建议在执行测
试前重启appium
展望appium
• 目前还未到正式版,很多地方需要完善,但是代码
清晰,而且还有saucelabs的工程师维护,代码质量
有保证
• 架构非常优秀,扩展性很好,不会限制用户使用特
定的语言
• 已经成为mobile自动化事实上的标准
• Saucelabs云服务已经支持appium,MTC TESTIN后续
也可能会跟进,使appium成为标准的云端解决方案
Testerhome论坛
• 专注于移动测试与Web测试
• 技术型论坛
• Talk is cheap, Show me the code
• 公开的合伙人体系
• testerhome.com
我们的论坛
与appium互动里程碑
• Done
• 翻译了appium的文档
• 补充了测试用例类型
• 提交发现的issue
• Doing
• 改进appium
• 目标:
• 和saucelabs一起维护appium
• 技术交流与商业合作
• @恒温 @monkey @国文
更多技术爆料敬请期待
• Appium自动遍历
• Appium录制回放技术
• Android调试分析技术
• Android应用逆向分析与破解
Appium相关培训推荐
• Monkey移动测试培训
• http://www.testerhome.com/topics/276
• Appium培训公开课
• http://www.testerhome.com/topics/267
• TesterHome马上也要开展自己的培训体系, 敬请大家关注.
• 我们会利用已有技术体系, 并结合阿里, 百度等多家互联网公司
的移动测试经验,为你带来最实用的移动测试培训课程.
• 我们的努力只为成就你