使用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
目录
相关文章
|
4月前
|
Web App开发 测试技术 定位技术
移动端测试金字塔
移动端测试金字塔
|
4月前
|
域名解析 JSON 测试技术
常见移动端APP测试场景
常见移动端APP测试场景
|
5月前
|
编解码 Shell Android开发
『移动端测试必备』ADB常用命令和使用
『移动端测试必备』ADB常用命令和使用
96 2
|
5月前
|
JavaScript 前端开发 测试技术
移动端(APP)自动化脚本工具详细列举(autojs、easyclick、hamibot、ctrljs ...)
移动端(APP)自动化脚本工具详细列举(autojs、easyclick、hamibot、ctrljs ...)
773 0
|
1天前
|
编解码 测试技术 API
模拟手机设备:使用 Playwright 实现移动端自动化测试
本文介绍了使用Python的Playwright库进行移动设备模拟和自动化测试的方法。通过Playwright,开发者能模拟不同设备的硬件和软件特性,如屏幕尺寸、用户代理,以确保网站在移动设备上的表现。示例代码展示了如何模拟iPhone X并访问网站,之后可在此基础上编写测试代码以检验响应式布局和交互功能。Playwright的设备参数注册表支持多种设备,简化了移动端自动化测试的流程。
6 1
|
7天前
|
编解码 测试技术 Android开发
Appium Inspector与Weditor:移动端测试的利器
本文介绍了两款移动端自动化测试的元素定位工具:Appium Inspector和weditor。Appium Inspector是官方推荐的辅助工具,而weditor是基于Python的ATX生态工具,支持Android和iOS界面分析。weditor安装需Python 3.6以上版本,可能遇到的GBK编码问题可通过更改系统区域设置解决。它提供设备界面、元素详情和代码运行三个主要部分,便于元素定位、属性查看及交互代码执行。这两款工具对于提升开发和测试效率具有积极作用。
38 8
|
3月前
|
测试技术 持续交付 Android开发
如何实践移动端自动化
如何实践移动端自动化
|
5月前
|
设计模式 监控 Java
『APP稳定性测试干货』| 基于Monkey的移动端/APP稳定性测试过程和方法
『APP稳定性测试干货』| 基于Monkey的移动端/APP稳定性测试过程和方法
148 1
|
6月前
|
XML 缓存 Shell
移动端测试
​ 一:ADB 命令 Android Debug Bridge 安卓调试桥 adb devices (★) list all connected devices罗列所有已连接的设备 (检查电脑上连接的Android设备) adb kill-server 停止 ADB 服务 adb start-server 开启ADB服务 adb connect(★) 连接 Android 设备 adb disconnect 断开已连接的Android设备 adb shell (★) 进入 Android 的 Linux 交互环境 adb remount 重新挂载获得文件系统的读写权限,需要有 root 权限
82 0
|
10月前
|
算法 测试技术 Shell
基于Fastbot的移动端自动化测试方案
使用火山引擎来实现移动端的Monkey测试
721 0
基于Fastbot的移动端自动化测试方案