Macaca是一套完整的自動化測試解決方案。由阿里巴巴公司開源:
http://macacajs.github.io/macaca/
特點:
同時支持PC端和移動端(Android、iOS)自動化測試。
支持JavaScript(Node.js)、Java、Python。
本篇文章將介紹如何使用該工具時行PC端自動化測試。
Install Macaca
1、Macaca由Node.js開發,所以需要安裝Node.js。
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的話。我將會在下一篇博客。
