使用macaca进行移动端hybird自动化测试(二)

Macaca

macaca是阿里开源的基于Node.js开发的自动化测试工具,支持native,hybird,moblie web,关于macaca具体的内容参见官网macaca.

macaca是如何驱动自动化测试的呢?事实上macaca和appium在架构和一些应用层面有很多相似的地方。

作为client的我们可以使用不同语言去编写测试脚本,其中测试脚本遵循webdriver协议,client向测试框架启动的server发送http请求。正因为client和server是基于http进行通讯的,因此client可以支持不同的编程语言。server通过解析HTTP的request,然后调用IOS提供的UIAutomation库来进行模拟点击等的操作,操作完成后移动设备会将操作结果返回给server,然后server将这个操作结果返回给client。

?有提到过webdriver协议:

其实它就是一层基础的协议规范。正是因为这样的协议存在一些自动化测试框架可以使用多种语言编写测试脚本。它提供了web页面操作的相关规范,比如元素的定位,浏览器原生事件的操作,还有获取DOM元素属性等一系列的方法。不管你用什么语言编写测试脚本的话,都应该按照这个协议规范来。WebDriver 通过原生浏览器支持或者浏览器扩展直接控制浏览器。WebDriver 针对各个浏览器而开发,取代了嵌入到被测 Web 应用中的 JavaScript。与浏览器的紧密集成支持创建更高级的测试,避免了JavaScript 安全模型导致的限制。除了来自浏览器厂商的支持,WebDriver 还利用操作系统级的调用模拟用户输入。webDriver 支持了所有的主流浏览器,同时还支持了Iphone和Android的移动应用测试。

接下来就带着大家一步一步使用macaca进行进行自动化测试:

step 1

全局安装macaca的cli,如果觉得比较慢,就换淘宝的cnpm镜像吧。


  1. npm install macaca -g 

安装完成后可以输入


  1. //查看cli的提供其他的功能 
  2.     macaca -h   
  3.  
  4.     //用以查看当前的环境配置 
  5.     macaca doctor   
  6.      
  7.     //用以单独启动一个webdriver server 
  8.     macaca server 
  9.      
  10.     //启动测试 
  11.     macaca run  

现在输入macaca doctor:

在Android checklist里面出现了2条红色的提示文案,说明这2个选项没有配置完成。我现在是以IOS为例,暂且不管这2个和Andriod相关的配置。不清楚的可以google。其中在IOS checklist当中:出现了Xcode和ios_webkit_debug_proxy.

首先你需要通过app store安装Xcode。全局安装ios_webkit_debug_proxy这个包,这个包用于测试ios的webview:


  1. brew install ios-webkit-debug-proxy 

此外,还需要全局安装ios-driver:


  1. npm i macaca-ios -g 

这样准备好了基础的测试套件。接下来你可以克隆macaca提供的官方示例,其中包括IOS的app和相关的测试脚本,对照着官文文档感受下大致的流程:


  1. git clone https://github.com/macacajs/macaca-test-sample.git --depth=1 

接下来进行自己的测试工作:

因为我是前端开发人员,要测试native里面的webview。首先让IOS的同学帮忙打包一个.app格式的应用,并压成zip格式的文件。PS:打包的时候选用debug模式。

准备好了原材料,先让我们停一停。做UI测试的话,要模拟用户各种操作,那么必须得知道native应用上不同界面的元素,就像获取html里面的DOM节点一样。因为macaca提供了通过Xpath去获取native页面上不同的元素节点的API。因此可以通过这种方式。

macaca提供了app-inspector这样一个使用树状态结构查看UI布局,自动生成XPath的工具。


  1. npm install app-inspector -g 

安装完成后,通过macaca-cli启动你的IOS模拟器,运行你的应用。

然后通过app-inspector启动UI检测工具,


  1. app-inspector -u YOUR-DEVICE-ID 

获取uuid的方式:

命令行输入:


  1. xcrun simctl list 

这行命令会列出你的所以模拟器信息,里面有类似 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 的代码,就是模拟器UDID,选择当前模拟器状态是Booted的那个。

通过app-inspector启动这个工具后,打开在Chrome里面打开命令行里面提示的浏览器地址,这样在浏览器上就能看到在native里面打开的ios页面。

因为我要测试webview的页面,因此native的页面的所有元素节点通过app-inspector这个工具去获取Xpath,然后编写测试脚本模拟用户的操作,一步一步的进入到webview页面。

在我测试的应用当中,从app打开到进入要测试的webview页面的测试脚本就变成了:


  1. .waitForElementByXPath('//XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[2]/XCUIElementTypeButton[1]') 
  2.     .click() 
  3.     //用户名输入 
  4.     .waitForElementByXPath('//XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeTextField[1]') 
  5.     .sendKeys(username) 
  6.     //密码输入 
  7.     .waitForElementByXPath('//XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[3]/XCUIElementTypeSecureTextField[1]') 
  8.     .sendKeys(password) 
  9.     .sendKeys('\n') 
  10.     //登录按钮 
  11.     .waitForElementByXPath('//XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeButton[2]') 
  12.     .click() 
  13.     //更多按钮 
  14.     .waitForElementByXPath('//XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeImage[1]/XCUIElementTypeButton[2]') 
  15.     .click() 
  16.     .sleep(1000) 
  17.     .swipe(200, 400, 200, 100, 500) 
  18.     .waitForElementByXPath('//XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeCollectionView[1]/XCUIElementTypeCell[10]') 
  19.     .click() 
  20.     .sleep(1000) 
  21.     .waitForElementByXPath('//XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeScrollView[1]/XCUIElementTypeOther[2]') 
  22.     .click() 
  23.     .sleep(1000) 

这样完成了native进入到webview页面的所有操作。

接下来就是webview的模拟操作啦。放到下一节来讲吧。

作者:苹果小萝卜

来源:51CTO

时间: 2024-11-24 10:11:20

使用macaca进行移动端hybird自动化测试(二)的相关文章

使用macaca进行移动端hybird自动化测试(一)

部分基本概念及内容: 单元测试: 以模块为单元,测试你代码的本身,确保你编写的模块还有逻辑正确.只要输入的值不变,输出的值也应该不发生改变 前端自动化测试: 界面回归测试 测试界面是否正常,包括文案,图片等. 功能测试 包括交互逻辑和功能模块是否符合预期. 性能测试 页面性能越来越受到关注,并且性能需要在开发过程中持续关注,否则很容易随着业务迭代而下降. 本文主要的内容集中在界面回归测试和功能测试.这2部分的测试工作是通过模拟用户进行页面操作,通过查看页面状态的变化,从而检测功能是否运行正常:它

使用macaca进行移动端hybird自动化测试(四)

现在正是进入native里面的webview的测试.比如我要测试一个选择城市的组件: 主要的思路就是模拟用户的一系列操作,然后看测试的结果和预期是否符号. 首先还是通过控制台查看相应的DOM节点,通过macaca提供的API去获取相应的DOM元素然后触发用户操作. 以下还是在REPL环境下进行操作: driver      .webview()      .elementByCssSelector('.location-city .input-tips')      .tap()  //首先唤起

python接口自动化测试(二)-requests.get()

环境搭建好后,接下来我们先来了解一下requests的一些简单使用,主要包括: requests常用请求方法使用,包括:get,post requests库中的Session.Cookie的使用 其它高级部分:认证.代理.证书验证.超时配置.错误异常处理等.   本节首先来了解一下requests库中如何发送get请求: 一.看下方法定义: 1.到官方文档去了下requests.get()方法的定义,如下:   2.点击右上角的[source],看一下它的源码如下:   看到最后一行return

[android]android自动化测试二之命令行创建AVD

判断AVD是否已经开启: adb -s emulator-57409 shell getprop dev.bootcomplete 如果结果返回1代表AVD成功启动了  命令行打开方式: 1.首先你要打开android模拟器      (下面命令行打开的4步骤我是引用百度上的)  1).找到SDK的tools文件夹,我的在D:\android-sdk-windows\tools: 2).如果没有创建AVD的话,可以用命令android list targets查看各版本对应的id: 然后andr

二维码-如何实现微信扫一扫实现让PC端触发事件功能

问题描述 如何实现微信扫一扫实现让PC端触发事件功能 希望实现以下功能,请大家给个思路: 1.PC端生成一个二维码,类似微信网页版登录(http://weixin.qq.com) 2.用手机微信公众号菜单中的扫一扫PC端的二维码(公众号已认证) 3.让PC端触发事件,如跳转到别的网页,或者传参到其它网页 解决方案 手机APP扫描二维码解析出识别信息,比如id,然后将本地登录key和这个id加密(非对称加密,用于验证服务器可信没有中间人.数据不被窃听篡改)上传至服务器,PC网页使用ajax轮询(心

腾讯Android自动化测试实战

腾讯Android自动化测试实战 丁如敏 盛娟 等著 图书在版编目(CIP)数据 腾讯Android自动化测试实战 / 丁如敏等著. -北京:机械工业出版社,2016.10 ISBN 978-7-111-54875-1 Ⅰ. 腾-   Ⅱ. 丁-   Ⅲ. 移动终端-应用程序–程序设计   Ⅳ. TN929.53 中国版本图书馆CIP数据核字(2016)第223713号 腾讯Android自动化测试实战 出版发行:机械工业出版社(北京市西城区百万庄大街22号 邮政编码:100037) 责任编辑:

Macaca基础原理解析

导语 前面几篇文章介绍了在Macaca实践中的一些实用技巧与解决方案,今天简单分析一下Macaca的基础原理.这篇文章将以前面所分享的UI自动化Macaca-Java版实践心得中的demo为基础,进行一下实例讲解. Macaca的基本组成 通过对源码各个模块的分析,可以帮助我们对Macaca的整体构成有一个基础的认识.Macaca已经开源,相关的源码在对应的github上都可以下载: https://github.com/macacajs. 大家会在alibaba集团的开源github上找到ma

Android应用自动化测试——理论、工具和实践(上)

摘要 桌面应用程序与浏览器端的自动化测试都已经历了十年的发展,无论是从工具上还是项目管理方 法论上都已经趋于成熟.而移动设备端应用程序的自动化测试近两年才刚起步,似乎一切尚处于探讨与研究阶段.但我们似乎已经看到其爆炸性的需求增长势头.可 以从这两方面着眼分析:其一,移动应用从数量上和逻辑复杂程度上的增长,以及产品发布周期的紧缩,使得快速回归测试迫在眉睫:其二,安卓系统的开放性造成 硬件厂商百家争鸣的局面,设备款式之多,迫使移动应用的兼容性测试提上日程.纵观当前智能手机两 大主流阵营iPhone与

腾讯Android自动化测试实战2.1.2 自动化测试框架基本原理

2.1.2 自动化测试框架基本原理 经过前面的一个简单的自动化测试案例,我们对Android的自动化测试有了一个感性的认识,很多有相关工作经验的测试同学也都会理解,这和PC的自动化测试思路是相通的,只不过所借助的框架不同,目前业界已经有很多成熟的开源Android端自动化测试框架,经常用到的框架代表有Robotium和UI Automator,各个框架可能在具体应用上有些不同,如有些偏稳定性,有些适用于Web应用,有些能支持跨应用,等等,但其主要思想是通过控件的位置.名称.属性等获取控件对象,并