Macaca是一套完整的自动化测试解决方案。由阿里巴巴公司开源:

http://macacajs.github.io/macaca/

特点:

同时支持PC端和移动端(Android、iOS)自动化测试。

支持JavaScript(Node.js)、Java、Python。

本篇文章将介绍如何使用该工具时行PC端自动化测试。

Install Macaca

1、Macaca由Node.js开发,所以需要安装Node.js。

https://nodejs.org/en/

2、安装Node.js完成。 首先切换切换淘宝源,因为国外资源访问很慢,而且有些资源还无法下载。

> npm install -g cnpm --registry=https://registry.npm.taobao.org

3、通过淘宝源安装 macaca-cli

>cnpm i macaca-cli -g

4、安装webdriver-client

>cnpm install webdriver-client

5、安装macaca-electron

>cnpm install macaca-electron -g

macaca-electron是基于Electron开发的Macaca驱动,是Macaca驱动之一。本文将从零介绍如何对 Electron 进行封装,实现一个简易版的驱动程序。

Run Sample                                          

安装完成,接下来下载Sample。

https://github.com/macacajs/macaca-test-sample

根据Macaca的测试目录结构:

├── macaca-test

│   ├── testcase01.test.js

│   ├── testcase02.test.js

│   ├── testcase03.test.js

│   ├── ...

└── package.json

所以,创建macaca-test/目录,并将下载的macaca-desktop-sample.test.js 的文件放到该目录下。

macaca-desktop-sample.test.js

'use strict';

var wd = require('webdriver-client')({
platformName: 'desktop',
browserName: 'electron'
}); describe('macaca desktop sample', function() {
this.timeout(5 * 60 * 1000); const driver = wd.initPromiseChain();
const initialURL = 'https://www.baidu.com'; before(() => {
return driver
.initDriver()
.maximize()
.setWindowSize(1280, 800);
}); it('#0 should go into macaca', function() {
return driver
.get(initialURL)
.sleep(3000);
}); it('#1 should works with macaca', function() {
return driver
.elementById('kw')
.sendKeys('macaca')
.sleep(3000)
.elementById('su')
.click()
.sleep(5000)
.source()
.then(function(html) {
html.should.containEql('macaca');
})
.hasElementByCss('#head > div.head_wrapper')
.then(function(hasHeadWrapper) {
hasHeadWrapper.should.be.true();
})
.elementByXPathOrNull('//*[@id="kw"]')
.sendKeys(' elementByXPath')
.sleep(3000)
.elementById('su')
.click()
.sleep(5000)
.takeScreenshot();
}); it('#2 should go into web', function() {
return driver
.get(initialURL)
.sleep(3000);
}); it('#3 should works with web', function() {
return driver
.elementById('kw')
.sendKeys('TesterHome')
.sleep(3000)
.elementById('su')
.click()
.sleep(5000)
.source()
.then(function(html) {
html.should.containEql('TesterHome');
})
.takeScreenshot();
}); after((done) => {
return driver
.quit(done);
});
});

运行测试:

>macaca run

或者:

>macaca run --verbose  //加--verbose可以看到详细的执行过程。

或者指定某个测试脚本文件执行:

>macaca run -d .\macaca-test\macaca-desktop-sample.js

Chrome Run Test                                       

1、安装macaca-chrome

>cnpm install macaca-chrome -g

2、修改macaca-desktop-sample.test.js代码。

'use strict';

var wd = require('webdriver-client')({
platformName: 'desktop',
browserName: 'chrome' // 'electron' 修改为 'chrome'
}); ……

Macaca in Python                                 

前面介绍Macaca支持多种编程编程语言。

例子与API地址:

http://macacajs.github.io/macaca/python.html

1、安装Macaca Python Client,支持pip安装。

https://pypi.python.org/pypi/wd

>python3 -m pip install wd

2、启动Macaca服务

>macaca server --verbose

>> request.js:23:12 [master] pid:15972 get remote update info failed.

>> index.js:17:12 [master] pid:15428 webdriver server start with config:

{ port: 3456,

verbose: true,

ip: '192.168.253.1',

host: 'fnngj-PC',

loaded_time: '2016-09-14 22:20:42' }

>> middlewares.js:17:10 [master] pid:15428 base middlewares attached

>> router.js:108:10 [master] pid:15428 router set

>> webdriver sdk launched

……

该服务类似于Selenium-server。不同语言的自动化脚本通过该服务驱动浏览器执行。

编写Python自动化脚本。

macaca_py_test.py

import unittest
from macaca import WebDriver
from time import sleep desired_caps = {
'platformName': 'Desktop', #// iOS, Android, Desktop
'browserName': 'Chrome', #// Chrome, Electron
} # 对应Macaca服务的ip和端口号。
server_url = {
'hostname': '127.0.0.1',
'port': 3456
} class MacacaTest(unittest.TestCase): @classmethod
def setUpClass(cls):
cls.driver = WebDriver(desired_caps, server_url)
cls.driver.init() @classmethod
def tearDownClass(cls):
cls.driver.quit() def test_get_url(self):
self.driver.get('https://www.baidu.com')
self.assertEqual(self.driver.title, '百度一下,你就知道') def test_search_macaca(self):
self.driver.element_by_id("kw").send_keys("macaca")
self.driver.element_by_id("su").click()
sleep(2)
title = self.driver.title
self.assertTrue('macaca',title) if __name__ == '__main__':
unittest.main()

Macaca的API与Selenium很像。

Python API文档:https://macacajs.github.io/wd.py/

=========================

移动端的环境颇为麻烦,如果你没有安装过Appium的话。我将会在下一篇博客。

Macaca自动化测试之PC端测试的更多相关文章

  1. python自动化测试之连接几组测试包实例

    python自动化测试之连接几组测试包实例 本文实例讲述了python自动化测试之连接几组测试包的方法,分享给大家供大家参考.具体方法如下: 具体代码如下:     class RomanNumera ...

  2. Macaca自动化测试之Android测试

    Macaca PC端 Web自动化测试非常类似于Selenium,而移动端自动化测试非常类似于Appium,如果你搭建过Appium环境,Macaca移动端环境的搭建将非常简单. 本文继承上一篇,关于 ...

  3. Macaca初体验-PC端(Python)

    前言: Macaca 是一套面向用户端软件的测试解决方案,提供了自动化驱动,周边工具,集成方案.由阿里巴巴公司开源:http://macacajs.github.io/macaca/ 特点: 同时支持 ...

  4. H5测试与PC端测试不同的点

    1.通过H5网页(非手机的返回功能)的返回功能可以返回,不会出现无法返回的情况. 2.横屏竖屏相互切换,能自适应,并且布局不会乱掉: 3.为能在不同分辨率的手机上能更好的展示,建议采用响应式设计(如: ...

  5. H5测试区别与PC端测试关注点

    除了基本的业务逻辑功能测试之后,H5页面的测试,需要关注以下几点: 1.  通过H5网页(非手机的返回功能)的返回功能可以返回,不会出现无法返回的情况. 2.  横屏竖屏相互切换,能自适应,并且布局不 ...

  6. selenium自动化测试之【数据驱动测试】

    数据驱动测试是自动化测试的主流设计模式之一,相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为进行了完全的分离,这样的测试脚本设计模式称为数据驱动.实施数据驱动测试的步骤:1.编写测试脚本,脚 ...

  7. PC/APP/H5三端测试的相同与不同

    随着手机应用的不断状态,同一款产品的移动端应用市场占相较PC端也越来越大,那么app与PC端针对这些产品的测试有什么相同与不同之处呢?总结如下: 首先谈一谈相同之处: 一,针对同一个系统功能的测试,三 ...

  8. PC、APP、H5三端测试的相同与不同

    随着手机应用的不断状态,同一款产品的移动端应用市场占相较PC端也越来越大,那么app与PC端针对这些产品的测试有什么相同与不同之处呢?笔者总结如下: 首先谈一谈相同之处... 一,针对同一个系统功能的 ...

  9. PC、APP、H5三端测试的区别

    一,针对同一个系统功能的测试,三端所测的业务流程是一样的 二,一般情况下手机端和PC端都对应一套后台服务,比如说笔者公司所开发的互联网金融平台,整个平台做了分布式服务架构,后台服务包括用户服务.交易服 ...

随机推荐

  1. .Net程序员之不学Java做安卓开发:Android Studio中的即时调试窗口

    对学.Net的人来说,JAVA开发是一场噩梦. .net中的即时窗口,调试时直接在里面写代码,对程序中的各种方法/属性进行调用,很方便. Android Studio中找了好久,参考如下网址,也有类似 ...

  2. Red Hat5.5 install Generic mysql-5.7.10

    1.确认以下依赖包已安装 [ncurses ncurses-devel openssl-devel bison autoconf automake bison gcc m4 libtool make ...

  3. WUI 前端组件

    为什么会有WUI前端组件,我们接触的UI组件如:YUI.EXTjs.EasyUI,这些组件虽然提供了丰富的UI,并且一定程度上缩短了开始时间,单这些组件提供的页面风格是统一的,我们的产品风格不可能像这 ...

  4. java 引入自定义字体font后出现的硬盘吃光的问题

    有个需求要用美术字体在图片上写字 用自定义的文字有两个方法: 1. Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, InputStream ...

  5. HDFS NameNode 设计实现解析

    接前文 分布式存储-HDFS 架构解析,我们总体分析了 HDFS 架构的主要构成组件包括:NameNode.DataNode 和 Client.本文首先进一步解析 HDFS NameNode 的设计和 ...

  6. GitLab版本管理

          GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的功能,能够浏览 ...

  7. ABP理论学习之SignalR集成

    返回总目录 本篇目录 介绍 安装 建立连接 内置功能 你自己的SignaR代码 介绍 Abp.Web.SignalR 使得在基于ABP的应用程序中使用 SignalR相当容易.查看SignalR文档获 ...

  8. Win7&Ubuntu12.04 双系统引导问题

    周末的时候手贱,重装系统,导致原来的ubuntu12.04和win7双系统的引导不见了,所以在此进行一下说明,如何修复. 1. win7和ubuntu12.04双系统引导修复 问题描述:    在重装 ...

  9. Android学习第三天-签名常用命令

    由于怕篇幅过长,所以把这个打包常用命令分开成两篇博文来进行讲解,下面我们直接进入主题吧. 8.keytool 这是我们JDK自带的密钥和证书管理工具 命令: -certreq 生成证书请求 -chan ...

  10. ubuntu下rhythmbox歌名显示乱码问题解决

    问题描述:本人装有双系统,一个是win7,另一个是ubuntu12.04LTS版本,所有的歌曲都在windows磁盘下KuGou目录中,这个时候,使用ubuntu的rhythmbox播放的歌曲的时候, ...