Appium手机自动化测试Weibo:seveniruby 更新日期: 2013-‐12-‐28TesterHome出品(公开版)Testerhome.comQQ群: 3155086262 官方网站 Appium项目介绍维护情况 • 由SauceLabs支持 • Saucelabs是海外一家业界领先的测试产品公司, 有成熟的企业测试解决方案和基于appium的云产品 • 在Google举办的GATC2013大会上有过详细介绍 • 2013年12月Selenium官方组织宣布放弃自己的mobile项目, 改而支持Appium Selendroid iosdriver框架目前mobile自动化的方案业界top框架综合对比百度Cafe框架阿里Athrun14-3-14 cafe vs athrun • athrun的设计理念有问题 • athrun国内反应一般, 没在github发布 • 侧面了解althrun在重构 • cafe技术和理念都很好 • 其他公司反馈效果好 • 开放性好, 支持与appium的集成 • 推荐cafe Appium的优点• 跨架构,naLve hybrid webview • 跨设备,android ios firefoxos • 跨语言,java python ruby nodejs php • 跨app, 可以在多个app之间交互 • 不依赖源代码 • 不限制测试框架和平台 基于Android的测试框架Appium在Android上的架构Appium在iOS上的架构Appium架构• Android上使用了instrumentaLon和uiautomator两套技术 • Appium在4.1以上使用uiautomator • 4.1以下使用selendroid • iOS使用uiautomaLon • 支持firefoxStartUp• 阅读官方的文档和我们已经翻译的文档 • 阅读官方的代码示例 • 阅读appium的源代码 • 分析appium的logAppium的使用• 安装nodejs • 使用npm安装appium • Appium启动 Appium的启动配置• Appium –help• 配置设备超时时间 • 配置使用的虚拟机 • 配置log文件 • …• 默认开启4723端口接受webdriver请求 • 默认开启4724用于和手机通讯 Remote webdriver调用视频演示 • Jonathan Lipps Appium: Mobile AutomaLon Made Awesome • hYp://v.youku.com/v_show/id_XNjU0MDM0NTI0.html • Jonathan Lipps -‐ LXJS2013 -‐ Appium • hYp://v.youku.com/v_show/id_XNjUzOTU2NjQ4.html • 乙醇的appium视频教程之appium入门及原理剖析 • hYp://v.youku.com/v_show/id_XNjQzMjI4NDcy.html • hYp://v.youku.com/v_show/id_XNjQzODIwMzA4.html • Appium自动化测试演示 • hYp://v.youku.com/v_show/id_XNjM0ODIxNTUy.html • 密码是testerhome.comAppium的加载流程• 调用android adb完成基本的系统操作 • 向android上部署bootstrap.jar包并启动 • Forward android的端口到pc机器上 • Pc上监听端口接受请求,使用webdriver协议 • 分析命令并转通过forward的端口发给bootstrap.jar• Bootstrap.jar接受请求并把命令发给uiautomator或者插桩体系一个android上的操作流程• 1. Webdriver的脚本执行Element.send_keys • 2. 发送到remote webdriver /wd/hub/session/xxx/keys• 3. pc处理请求并转发给android和iphone • 4. Bootstrap.jar调用uiautomator • 5. Uiautomator调用seYext方法Appium设计理念• PC端运行 • 使用webdriver协议与用户交互 • XPath抽象定位 • 底层调用各自平台的自动化技术 • 类似selenium的架构 Webdriver协议• 使用webdriver协议,成熟标准,应用广泛 • 它即将成为w3c业界标准 • 跨语言, 不限制测试框架 • Remote WebDriver方式支持云测和集群模式 • PC端运行可以支持各种runLmes,不受限手机环境 Appium支持主流语言webdriver的capabiliLes配置• App: 本地路径或者网络下载地址 • browserName: 兼容selenium, 并不使用 • Device: ios android firefoxos • Version: AndroidAPIversion,iOSVersion• Launch: 是否让appium自动启动appCapabiliLes的配置例子• Android2.3• Android4.2• iOS6.1演示代码 元素定位 • Android和iOS的原生控件以及webview控件映射为特定的命名, 比如把所有平台的按钮映射为buYon元素 • 把当前的结构树映射为html文档 • 通过xpath来选择元素 • 三种定位方式 • Name: id,label text content-‐desc • Tag_name: component type• Xpath • 定位元素建议采用(Screen Object)PageObject模式,使用XPath Xpath支持语法列表• //buYon• //buYon[last()]• //buYon[1]• /buYon• BuYon• //buYon/text/webview • //buYon[1]/text/webview[3]• //buYon[@name='hi there']• //buYon[@other_aYr='hi there']• //list/buYon[@name=hi there]• //buYon[contains(@other_aYr, hi)]• //*[contains(@text, 'agree')]• //*[@text='agree']• //frame//buYon • 目前还不是完整的xpath,appium1.0会支持有全功能的xpath支持Xpath映射关系查询Xpath获取• Appium inspector• Uiautomatorviewer • Uiautomator events• android也可以使用selendroid的inspector元素交互 • Webdriver已经支持 • 点击 • 输入 • 按键事件 • Mobile相关:• 拖动 • 划动 • 长按 点击与输入 长按操作代码 通过execute_script执行mobile方法发送特殊event• 发送ctrl+v • driver.execute_script 'mobile: keyevent', {'keycode'=50, 'metastate'=28672}• 发送v字符 • driver.execute_script 'mobile: keyevent', {'keycode'=50}• 具体的事件代码请参考各自平台的event文档 一个完整的例子 中文输入问题 • 两个解决方法:• 1. 安装UTF7IME输入法, 并使用对应的Java库编码待输入中文 • 2. 使用复制粘贴方法. 长按某个输入框, 并模拟ctrl+v的按键, 别触发搜狗输入法, 搜狗输入法有bug, 会拦截ctr+v,其他输入法没有此类问题.Appium的灵活扩展• Appium对webdriver协议进行了扩充 • 通过利用execute_script执行mobie操作 • 通过自身服务增加了一些处理命令,比如安装, 卸载, 加载app• 也扩展支持一些平台专有的指令 • Webdriver即将成为W3C标准 • Appium在推动webdrive增强mobile特性 位置模拟演示 • 目前只支持android模拟器原生,混合,web• 三种主流的app设计模式 • 原生: • 使用开发特定平台专用app• 混合:• Phonegap 百度轻应用 • Web: • 使用html5技术开发 • jquery mobile, sencha touch混合模式的自动化 • iOS • AndroidAppium对RF的支持• Appium支持webdriver协议 • 可以使用RFT来设计测试用例 • 需要对appium目前的版本打补丁 • 已经提需求给官方, 后续会更好的支持 • 我目前提供的版本已经支Robot, 如果企业有需求, 我们也乐意打造完全支持的商业版本.Robot的测试用例演示• 打开淘宝, 输入小米手机并搜索 移动测试环境规划 • 私有移动测试云环境 • 针对android ios等各个主要版本的测试环境 • 模拟器为主, 应付日常测试需求 • 公共云服务 • 百度MTC TesLn Saucelabs • 真机为主, 可以测试更多场景. 测试覆盖度高 移动云测试 • Saucelabs提供了appium的在线云环境 • 提供虚拟机 • 提供运行时的截图和录像 • 脚本执行非常简单 国内移动云测平台 • TestIn • 提供商业服务.• 价格贵.• 服务好 • 技术差 • MTC• 百度云计算计划的一部分 • 免费 • 没有商业服务 • 技术优秀 • 两者功能各有特色, 可以去相关网站参考 • 限于篇幅, 不做详细介绍 移动测试持续集成 • Appium运行于PC端 • 支持webdriver协议和Grid模式 • 可以实现无缝的持续集成 Appium应用注意事项• Xpath的支持有问题,并不是完全的xpath功能, 在即将发布的1.0版本中会提供完全的支持 • 一些app比如qq不允许简单的am start,需要提升权限, 比如让appium扩展支持su • Appium长时间运行不太稳定, 建议在执行测试前重启appium 展望appium• 目前还未到正式版,很多地方需要完善,但是代码清晰,而且还有saucelabs的工程师维护,代码质量有保证 • 架构非常优秀,扩展性很好,不会限制用户使用特定的语言 • Appium已经成为mobile自动化事实上的标准 • Saucelabs云服务已经支持appium,MTC TESTIN后续也可能会跟进,使appium成为标准的云端解决方案 • Selenium官方组织宣布放弃自身mobile项目转而支持appium • 国内使用appium的公司在逐渐增多 Appium 1.0 coming soon• 与selenium3协议融合, selenium新版本将支持appium的api • 提供定位,网速控制, 电源等硬件访问a