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 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()

MacacaAPISelenium很像。

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

 

 

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

移動端的環境頗為麻煩,如果你沒有安裝過Appium的話。我將會在下一篇博客。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM