首页 > 代码库 > Macaca自动化测试之PC端测试

Macaca自动化测试之PC端测试

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

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

特点:

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

支持JavaScriptNode.js)、JavaPython

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

 

Install Macaca                                    

1MacacaNode.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 unittestfrom macaca import WebDriverfrom time import sleepdesired_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()

MacacaAPISelenium很像。

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

 

 

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

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

 

 

Macaca自动化测试之PC端测试