版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/54021946

1.Macaca简介

Macaca是阿里巴巴集团开发的一套完整的自动化测试解决方案。

2.Macaca特性:

  • 支持移动端和PC端
  • 支持Native, Hybrid, H5 等多种应用类型
  • 提供客户端工具和持续集成服务

3.macaca-cli客户端的安装:

3.1安装 Node.js

请安装 Node.js v4.0 或者更高版本,装好 Node.js 后命令行里就已经集成了 npm 工具,为了提高安装模块的速度,请使用国内的 cnpm。

3.2 iOS 环境安装

请安装 Xcode8 或者更高版本
需要安装 usbmuxd 以便于通过 USB 通道测试 iOS 真机,不需要测试真机则不用安装

$ brew install usbmuxd

应用中如含有 WebView,请安装 ios-webkit-debug-proxy

$ brew install ios-webkit-debug-proxy

备注:使用brew命令需要安装Homebrew(一款常用的 MacOS 的包管理器),请按照官网提示安装。
准备 App 包:如需要测试 iOS 应用,请使用 Scheme 设置为 debug 的 .app 包。

3.3 Android环境安装

3.3.1 安装 JDK

配置 JAVA_HOME,根据你所使用的 shell 工具修改不同的文件,比如 ~/.bashrc, ~/.bash_profile, ~/.zshrc

shell export JAVA_HOME=path/to/your/Java/Home

3.3.2安装安卓 SDK

运行 brew install android-sdk,然后安装18-24版本中的任一 SDK
shell 环境设置 ANDROID_HOME 根据你所使用的Terminal修改不同的

文件,比如~/.bashrc, ~/.bash_profile, ~/.zshrc
# 如果是通过homebrew安装的android-sdk,则路径如下export ANDROID_HOME = /usr/local/opt/android-sdk# 如果通过其他方式安装的sdk,路径设置为对应的android sdk的路径export ANDROID_HOME = path/to/your/Android/sdk

注意:准备 App 包:如需要测试 Android 应用,请使用 .apk 格式的包。

3.4 全局安装macaca

$ npm i -g macaca-cli

如果看到如下可爱的小猴子,那恭喜你安装成功啦!重新安装则会覆盖更新。

3.5安装驱动

3.6 环境检查

通过 macaca doctor 可以检查环境是否配置成功

$ macaca doctor

如上图所示则表示环境均配置正常,如果有错误,会出现红色的提示。

4 运行官方示例

将官方示例(mobile-app-sample-nodejs)克隆到本地,更多的示例请访问macaca-sample。

$ git clone https://github.com/macaca-sample/mobile-app-sample-nodejs.git --depth=1
$ cd mobile-app-sample-nodejs
$ npm i
# 更多运行方式见Makefile
$ macaca run --verbose

4.1 Android 的自动化测试

先在mobile-app-sample-nodejs/macaca-test/mobile-app-sample.test.js脚本文件中如果是ios该为Android。

var platform = process.env.platform || 'Android';
platform = platform.toLowerCase();

在mobile-app-sample-nodejs目录下执行

macaca run

测试的过程

lidongdeMacBook-Pro:mobile-app-sample-nodejs lidong$ macaca run ./macaca-test/macaca-mobile-sample.test.js
>> webdriver sdk launched
>> >> >>   macaca mobile sample>> get /Users/lidong/.macaca-temp/android_app_bootstrap-debug.apk from cache
>> sha:e2ca601f9ee1ec101326d12377a2e8d4
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
com.android.uiautomator.client.Initialize:
INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
INSTRUMENTATION_STATUS: test=testStartServer
INSTRUMENTATION_STATUS: class=com.android.uiautomator.client.Initialize
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 1uiautomator start socket server.>> socket server ready
>> socket client ready
recive: {"cmd":"wake","args":{}}return: {"success":true,"data":{"status":0,"value":true}}recive: {"cmd":"getWindowSize","args":{}}return: {"success":true,"data":{"status":0,"value":"{\"width\":1080,\"height\":1794}"}}>> current window size {"width":1080,"height":1794}recive: {"cmd":"find","args":{"strategy":"class name","selector":"android.widget.EditText","multiple":true}}return: {"success":true,"data":{"status":0,"value":[{"ELEMENT":"1"},{"ELEMENT":"2"}]}}recive: {"cmd":"clearText","args":{"elementId":"1"}}return: {"success":true,"data":{"status":0,"value":true}}recive: {"cmd":"setText","args":{"elementId":"1","text":"中文+Test+12345678"}}return: {"success":true,"data":{"status":0,"value":true}}recive: {"cmd":"find","args":{"strategy":"class name","selector":"android.widget.EditText","multiple":true}}return: {"success":true,"data":{"status":0,"value":[{"ELEMENT":"3"},{"ELEMENT":"4"}]}}recive: {"cmd":"clearText","args":{"elementId":"4"}}return: {"success":true,"data":{"status":0,"value":true}}recive: {"cmd":"setText","args":{"elementId":"4","text":"111111"}}return: {"success":true,"data":{"status":0,"value":true}}recive: {"cmd":"find","args":{"strategy":"name","selector":"Login","multiple":true}}return: {"success":true,"data":{"status":0,"value":[{"ELEMENT":"5"}]}}recive: {"cmd":"click","args":{"elementId":"5"}}return: {"success":true,"data":{"status":0,"value":true}}>>
>>      #1 should login success (19613ms)recive: {"cmd":"getSource","args":{}}return: {"success":true,"data":{"status":0,"value":true}}>> { hierarchy: { rotation: '0',node: { index: '0',class: 'android.widget.FrameLayout',package: 'com.github.android_app_bootstrap',checkable: 'false',checked: 'false',clickable: 'false',enabled: 'true',focusable: 'false',focused: 'false',scrollable: 'false','long-clickable': 'false',password: 'false',selected: 'false',bounds: '[0,0][1080,1794]',node: [Object] } } }>>
>>      #2 should display home (911ms)recive: {"cmd":"find","args":{"strategy":"name","selector":"list","multiple":false}}
等等

4.2 IOS 的自动化测试

先在mobile-app-sample-nodejs/macaca-test/mobile-app-sample.test.js脚本文件中如果是Android改为ios。

var platform = process.env.platform || 'ios';
platform = platform.toLowerCase();

在mobile-app-sample-nodejs目录下执行

macaca run

测试过程

lidongdeMacBook-Pro:mobile-app-sample-nodejs lidong$ macaca run ./macaca-test/macaca-mobile-sample.test.js
>> webdriver sdk launched
>> >> >>   macaca mobile sample>> get /Users/lidong/.macaca-temp/android_app_bootstrap-debug.apk from cache
>> sha:e2ca601f9ee1ec101326d12377a2e8d4
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
com.android.uiautomator.client.Initialize:
INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
INSTRUMENTATION_STATUS: test=testStartServer
INSTRUMENTATION_STATUS: class=com.android.uiautomator.client.Initialize
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 1uiautomator start socket server.>> socket server ready
>> socket client ready
recive: {"cmd":"wake","args":{}}return: {"success":true,"data":{"status":0,"value":true}}recive: {"cmd":"getWindowSize","args":{}}return: {"success":true,"data":{"status":0,"value":"{\"width\":1080,\"height\":1794}"}}>> current window size {"width":1080,"height":1794}recive: {"cmd":"find","args":{"strategy":"class name","selector":"android.widget.EditText","multiple":true}}return: {"success":true,"data":{"status":0,"value":[{"ELEMENT":"1"},{"ELEMENT":"2"}]}}recive: {"cmd":"clearText","args":{"elementId":"1"}}return: {"success":true,"data":{"status":0,"value":true}}

5.脚本初始化参数

5.1 常见的参数

  1. platformName String 当前用例运行的平台 { iOS / Android / Desktop }
  2. browserName String 当前测试的浏览器名称 { iOS: Safari } { Android: Chrome } { Desktop: Chrome / Electron }

5.2 App 相关参数

  1. deviceName String 模拟器的名称,例如 ‘iPhone 6’ 或者 ‘Nexus 5x’。

  2. app Stirng .ipa,.app 或者 .apk 文件的绝对地址或者远程地址,或者是包含上述文件格式的 Zip 文件。

  3. udid String 测试设备的唯一设备 ID。

5.3 Android 的参数介绍

  1. reuse Number 0: 启动并安装 app。{1 (默认): 卸载并重装 app。 2: 仅重装 app。3: 在测试结束后保持 app 状态。}
  2. package String Android app 的 package name。
  3. activity String 启动时的 Activity name。

5.4 iOS 的参数介绍

  1. reuse Number 0: 清楚数据并重装 app。 1: (默认) 卸载并重装 app。 2: 仅重装 app。 3: 在测试结束后保持 app 状态。
  2. bundleId String 应用的 Bundle ID,例如 com.apple.Maps。
  3. autoAcceptAlerts Boolean 自动接受所有的系统弹窗信息。默认是 false。
  4. autoDismissAlerts Boolean 自动拒绝所有的系统弹窗信息。默认是 false。

5.5 基本用法

'use strict';require('should');
var xml2map = require('xml2map');var platform = process.env.platform || 'ios';
platform = platform.toLowerCase();var pkg = require('../package');/*** download app form npm** or use online resource: https://npmcdn.com/ios-app-bootstrap@latest/build/ios-app-bootstrap.zip** npm i ios-app-bootstrap --save-dev** var opts = {*   app: path.join(__dirname, '..', 'node_modules', 'ios-app-bootstrap', 'build', 'ios-app-bootstrap.zip');* };*/// see: https://macacajs.github.io/desired-capsvar iOSOpts = {deviceName: 'iPhone 5s',platformName: 'iOS',autoAcceptAlerts: false,//reuse: 3,//udid: '',//bundleId: 'xudafeng.ios-app-bootstrap',app: 'http://localhost:8087/ios-app-bootstrap.zip'
};var androidOpts = {platformName: 'Android',autoAcceptAlerts: false,// reuse: 3,// udid: '',// package: 'com.github.android_app_bootstrap',// activity: 'com.github.android_app_bootstrap.activity.WelcomeActivity',app: 'http://localhost:8087/android_app_bootstrap-debug.apk'
};const isIOS = platform === 'ios';
const infoBoardId = isIOS ? 'info' : 'com.github.android_app_bootstrap:id/info';const wd = require('macaca-wd');// override custom wd
require('./wd-extend')(wd, isIOS);describe('macaca mobile sample', function() {this.timeout(5 * 60 * 1000);const driver = wd.promiseChainRemote({host: 'localhost',port: 3456});driver.configureHttp({timeout: 600 * 1000});before(function() {return driver.init(isIOS ? iOSOpts : androidOpts);});after(function() {return driver.sleep(1000).quit();});it('#1 should login success', function() {return driver.getWindowSize().then(size => {console.log(`current window size ${JSON.stringify(size)}`);}).appLogin('中文+Test+12345678', '111111').sleep(1000);});

Macaca自动化测试Android和IOS应用,基本上说到这里就要结束。后面我们还是学习如何自己写测试脚本。

Macaca自动化测试Android和IOS应用相关推荐

  1. H5能取代移动app(Android和iOS)吗?

    大量新生移动设备的兴起,改变了互联网的未来.在技术的发展上,HTML5会取代App应用吗?或者说能够在多大程度上取代呢?在HTML5规范中,已经加入了相机.磁力罗盘.GPS信息的支持.很多新兴浏览器也 ...

  2. 移动App专项性能测试(Android and iOS)

    一直以来,性能测试是被一部分人遗忘,又让另一部分人无可奈何的东西.在绝大部分的创业公司,性能测试基本上都是被遗忘的,他们认为功能测试和稳定性测试才是重点,而在中等规模的公司中一部分测试人员考虑进行性能 ...

  3. 百度视频在Android和iOS端性能测试方法

    背景介绍 一直以来,性能测试是被一部分人遗忘,又让另一部分人无可奈何的东西.在绝大部分的创业公司,性能测试基本上都是被遗忘的,他们认为功能测试和稳定性测试才是重点,而在中等规模的公司中一部分测试人员考 ...

  4. Android与iOS测试注意点

    App测试中Android和IOS测试区别 分辨率测试:   Android端种类多常见的手机分辨率:   (4:3   VGA 640480 (Video Graphics Array)   QVG ...

  5. Android、iOS如何实现自动化录屏,超实用!

    阅读本文大约需要1分钟. 背景 在做移动端自动化测试的过程中,有很多场景需要录制设备的屏幕视频,比如Crash现场记录,启动/页面加载耗时类的评测等,那么如何实现Android和iOS设备的屏幕录制呢 ...

  6. android测试机最好的,使用 Macaca 进行 Android 多设备测试

    接触 Macaca 也蛮久了,中间断断续续折腾了一阵,自动化框架还在用老牌的 Appium,迁移是大事不能一蹴而就.最近有个机会准备分享一些 Macaca 的经验,我有开始来倒腾了. 使用 Macac ...

  7. Android和iOS 测试五个最好的开源自动化工具

    本文主要介绍Android和iOS 五个最好的开源自动化工具,这里整理了相关资料,希望能帮助测试软件的朋友,有需要的看下 自动化测试在产品测试上有着非常重要的作用.实现测试自动化有多种积极的方式,包括 ...

  8. 《大话移动APP测试:Android与iOS应用测试指南》

    <大话移动app测试:android与ios应用测试指南> 基本信息 作者: 陈晔 出版社:清华大学出版社 ISBN:9787302368793 上架时间:2014-7-7 出版日期:20 ...

  9. ios android安全性分析,Android与iOS的对比分析及Android安全技术的设计与实现

    摘要: 近年来科技的发展和进步极大的推动了智能手机的飞速发展,手机功能的日益强大使人们对其依赖度显著上升.作为与人们生活密不可分通讯工具,手机安全的重要性不言而喻.现如今,随着手机网络的迅猛发展和形形 ...

  10. Android和iOS那个好?

    Android和iOS那个好?   应该先往哪个上面投入资源?   多次被人问到此类问题,笔者刚好自己的项目也需要考虑iOS版本.就索性进行了一番调研,于是有了本文(本次不讨论越狱的iOS)   首先 ...

最新文章

  1. 使用Django开发REST 接口
  2. 富士相机设置传原图_双面屏设计!富士XPro3相机外观草图曝光
  3. Ios之label自适应里面的文字,自动调整宽度和高度的
  4. C# v7.0版本中的local function
  5. Ubuntu安装搭建Clion环境
  6. parrot linux iso下载,Parrot 4.7 发布,基于Debian的数字取证和隐私保护Linux发行版
  7. 《强化学习》中的第11章:基于函数逼近的离轨策略方法
  8. php -- 魔术方法 之 自动加载:__autoload()
  9. Springboot项目中Pom.xml报错
  10. 彻底删除MySQL教程
  11. Exception:must implement OnFragmentInteractionListener
  12. JAVA实现EXCEL公式专题(七)——统计函数
  13. [渝粤教育] 西南科技大学 液压与气压传动 在线考试复习资料
  14. java爬取国家统计局省市县及编码
  15. 点云匹配介绍与ICP算法
  16. 两个PDF怎么合成在一起
  17. 时间换算:UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8
  18. Android Studio升级到3.0版本后布局不能预览解决方案
  19. 更改csv默认分隔符
  20. 软件工程 | 第四章 系统设计

热门文章

  1. 《cut命令》-linux命令五分钟系列之十九
  2. Windows Phone 程序发布过程
  3. note 2 运算符和表达式
  4. subgradients
  5. 隐马尔可夫的知识要点
  6. 设计模式学习一:strategyPattern
  7. VMware Workstation 6.0 正式版公布
  8. 数据分析项目实战:大型商场销售预测(带你挤进比赛前100名)
  9. R for data science 之 stringr包
  10. python psutil 获取命令历史_python中系统信息获取psutil使用