Macaca是一套面向用户端软件的测试解决方案,提供了自动化驱动,周边工具,集成方案,旨在解决终端上的测试、自动化、性能等方面的问题,很多人选择它的原因简单:轻量化(相比于appium),跨平台(windows,android,ios),持续集成的reliable(Reliable 是 Node.js 实现的分布式持续集成服务) ,元素查看app-inspector,支持用例录制的uirecorder;等等

Macaca环境搭建:

  1. 安装nodejs:   https://nodejs.org/en/             (安装这个原因不用说了吧)
  2. 安装cnpm切换淘宝源:  npm install -g cnpm --registry=https://registry.npm.taobao.org ;      (cnpm安装东西能快一点)
  3. 安装 macaca-cli:  cnpm i  -g macaca-cli
  4. 安装webdriver:  cnpm i -g webdriver-client
  5. 安装electron:  cnpm i -g macaca-electron
  6. 安装chrome:  npm i macaca-chrome -g
  7. 安装chromedriver:  npm i macaca-chromrdrivet -g
  8. 安装Android:   npm i macaca-android -g
  9. 安装ios:   npm i macaca-ios -g
  10. 安装uirecorder(录制脚本):    npm i uirecorder -g
  11. 安装app-inspector(查看元素):    npm i app-inspector -g
  12. 安装Python API: pip install wd

安装完上面的命令,基本上Mcaca+python的环境已经搭建好了;如果是需要进行移动测试,安卓还需要安卓SDK;见我下面这张大图;

Macaca执行测试用例

  1. 启动macaca服务: macaca server --verbose;

    C:\Users\Administrator>macaca server --verbose
    >> index.js:: [master] pid: webdriver server start with config:
    { port: ,
    verbose: true,
    always: true,
    ip: '172.27.35.1',
    host: 'USER-6IG90K3098',
    loaded_time: '2017-02-08 15:43:03' }
    >> middlewares.js:: [master] pid: base middlewares attached
    >> router.js:: [master] pid: router set
    >> webdriver sdk launched
  2. 执行Python测试用例:python baidu.py;
    C:\Users\Administrator>d:
    
    D:\>cd D:\zsfile\macaca-test-sample-python-master\tests
    
    D:\zsfile\macaca-test-sample-python-master\tests>python baidu.py
    C:\Python35\lib\site-packages\wd-0.1.-py3..egg\macaca\remote_invoker.py:: R
    esourceWarning: unclosed <socket.socket fd=, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=, laddr=('::1', , , ), raddr=('::1',
    , , )>
    C:\Python35\lib\site-packages\wd-0.1.-py3..egg\macaca\remote_invoker.py:: R
    esourceWarning: unclosed <socket.socket fd=, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=, laddr=('::1', , , ), raddr=('::1',
    , , )>
    C:\Python35\lib\site-packages\wd-0.1.-py3..egg\macaca\remote_invoker.py:: R
    esourceWarning: unclosed <socket.socket fd=, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=, laddr=('::1', , , ), raddr=('::1',
    , , )>
    .C:\Python35\lib\site-packages\wd-0.1.-py3..egg\macaca\remote_invoker.py::
    ResourceWarning: unclosed <socket.socket fd=, family=AddressFamily.AF_INET6,
    type=SocketKind.SOCK_STREAM, proto=, laddr=('::1', , , ), raddr=('::1',
    , , )>
    C:\Python35\lib\site-packages\wd-0.1.-py3..egg\macaca\remote_invoker.py:: R
    esourceWarning: unclosed <socket.socket fd=, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=, laddr=('::1', , , ), raddr=('::1',
    , , )>
    C:\Python35\lib\site-packages\wd-0.1.-py3..egg\macaca\remote_invoker.py:: R
    esourceWarning: unclosed <socket.socket fd=, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=, laddr=('::1', , , ), raddr=('::1',
    , , )>
    C:\Python35\lib\site-packages\wd-0.1.-py3..egg\macaca\remote_invoker.py:: R
    esourceWarning: unclosed <socket.socket fd=, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=, laddr=('::1', , , ), raddr=('::1',
    , , )>
    C:\Python35\lib\site-packages\wd-0.1.-py3..egg\macaca\remote_invoker.py:: R
    esourceWarning: unclosed <socket.socket fd=, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=, laddr=('::1', , , ), raddr=('::1',
    , , )>
    C:\Python35\lib\site-packages\wd-0.1.-py3..egg\macaca\remote_invoker.py:: R
    esourceWarning: unclosed <socket.socket fd=, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=, laddr=('::1', , , ), raddr=('::1',
    , , )>
    C:\Python35\lib\site-packages\wd-0.1.-py3..egg\macaca\remote_invoker.py:: R
    esourceWarning: unclosed <socket.socket fd=, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=, laddr=('::1', , , ), raddr=('::1',
    , , )>
    C:\Python35\lib\site-packages\wd-0.1.-py3..egg\macaca\remote_invoker.py:: R
    esourceWarning: unclosed <socket.socket fd=, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=, laddr=('::1', , , ), raddr=('::1',
    , , )>
    C:\Python35\lib\site-packages\wd-0.1.-py3..egg\macaca\remote_invoker.py:: R
    esourceWarning: unclosed <socket.socket fd=, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=, laddr=('::1', , , ), raddr=('::1',
    , , )>
    C:\Python35\lib\site-packages\wd-0.1.-py3..egg\macaca\remote_invoker.py:: R
    esourceWarning: unclosed <socket.socket fd=, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=, laddr=('::1', , , ), raddr=('::1',
    , , )>
    C:\Python35\lib\site-packages\wd-0.1.-py3..egg\macaca\remote_invoker.py:: R
    esourceWarning: unclosed <socket.socket fd=, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=, laddr=('::1', , , ), raddr=('::1',
    , , )>
    .C:\Python35\lib\site-packages\wd-0.1.-py3..egg\macaca\remote_invoker.py::
    ResourceWarning: unclosed <socket.socket fd=, family=AddressFamily.AF_INET6,
    type=SocketKind.SOCK_STREAM, proto=, laddr=('::1', , , ), raddr=('::1',
    , , )> ----------------------------------------------------------------------
    Ran tests in .592s OK

    执行成功如上图;

  3. 附上baidu.py代码,用例为测试百度查询;
    # coding=utf-8
    import unittest
    import time
    from macaca import WebDriver
    from macaca import WebElement desired_caps = {
    'platformName': 'desktop',
    'browserName': 'electron'
    } server_url = {
    'hostname': 'localhost',
    '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.set_window_size(1280, 800)
    self.driver.get("https://www.baidu.com") def test_search_macaca(self):
    self.driver.element_by_id('kw').send_keys('macaca')
    self.driver.element_by_id('su').click()
    time.sleep(5)
    html = self.driver.source
    self.assertTrue('macaca'in html)
    self.assertTrue(self.driver.element_by_css_selector_if_exists(
    '#head>div.head_wrapper'))
    self.driver.element_by_xpath_or_none(
    '//*[@id="kw"]').send_keys('elementByXPath')
    self.driver.element_by_id('su').click()
    self.driver.take_screenshot()
    if __name__ == '__main__':
    unittest.main()

    基本上桌面上的就是这样了;android和ios后续再跟上;

Mcaca+Python 测试环境搭建及上手的更多相关文章

  1. Selenium + python 测试环境搭建

    Windows平台(py3 已经自带了工具包) 准备工具: python.setuptools(python工具基础包).pip(python安装包管理工具) 安装步骤: 1.python安装,运行e ...

  2. Selenium + python 测试环境搭建扩展-HTMLUNIT的使用

    尝试给公司的网站写每日例行检查的脚本时,不需要去打开浏览器,这是就用到HTMLUNIT的使用 HTMLUNIT是基于Selenium服务端的,所以需要selenium-server-standalon ...

  3. Appium Python测试环境搭建

    详细参考地址:https://www.cnblogs.com/amoyshmily/p/10500687.html 1,Appium安装:https://github.com/appium/appiu ...

  4. selenium + python 测试环境搭建 (WINDOWS)

    1. 下载Python , 运行.exe -> http://python.org/getit/ 2. 下载Python Setuptools 基础包管理工具安装,官方文档参考 https:// ...

  5. Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建;学习Python语言,利用Python语言来写测试用例。加油!!!

    Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建:学习Python语言,利用Python语言来写测试用例.加油!!!

  6. python开发环境搭建

    虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...

  7. Eclipse中Python开发环境搭建

    Eclipse中Python开发环境搭建  目 录  1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ...

  8. 总结Selenium自动化测试方法(二)测试环境搭建

    (接上期内容) 二.测试环境搭建 1.安装python 现在python3.0比python2.0多了一些改进的功能(详见http://zhidao.baidu.com/link?url=3sT1g7 ...

  9. selenium + python 自动化测试环境搭建

    selenium + python 自动化测试 —— 环境搭建 关于 selenium Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操 ...

随机推荐

  1. SQL truncate 、delete与drop区别

    SQL truncate .delete与drop区别 相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句 ...

  2. 前台html与后台php通信(上传文件)

    这部分为导入txt文本文件,存放在服务器然后返回txt文本的内容到前台进行相应操作 前台html代码 <div id="coordinate_div">         ...

  3. DIV 和 SPAN 区别

    DIV 和 SPAN 元素最大的特点是默认都没有对元素内的对象进行任何格式化渲染.主要用于应用样式表(共同点). 两者最明显的区别在于DIV是块元素,而SPAN是行内元素(也译作内嵌元素). 详解:1 ...

  4. MODBUS协议详解

    MODBUS是一个工业上通信常用的通讯协议,一般在PLC上面用的比较多,主要是定义了一种数据传输的规范,比如数据发给谁,数据是干嘛的,数据错没错,接收到数据的从机告诉我数据有没有接受到等. 传输的方式 ...

  5. greenDAO简介

    了解android开发的人应该都会知道,android的数据库开发主要用到sqlite.greenDAO应该算是当前最火的数据库开源框架了吧,它是一个移动开发的ORM(object / relatio ...

  6. onchange、oninput、onpropertyChange事件的异同

    onchange事件适用于input\textarea\select元素上,支持各大浏览器,该事件只有在键盘或者鼠标操作改变对象属性,且失去焦点时触发,脚本触发无效: oninput事件适用于inpu ...

  7. linux命令学习-1-less

    less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more 更加的有弹性.在 more 的时候,我们并没有办法向前面翻 ...

  8. 74HC166与TPIC6A595分析(转)

    源:Atmega162串行外设接口SPI 一.Atmega162的SPI接口基本概念与工作原理 SPI接口的全称是"Serial Peripheral Interface",意为串 ...

  9. 【WebService】WebService学习笔记

    WebService三要素 WebService三要素SOAP(Simple Object Access Protocol).WSDL(WebServicesDescriptionLanguage). ...

  10. C语言strstr()函数:返回字符串中首次出现子串的地址

    今天又学到了一个函数 头文件:#include <string.h> strstr()函数用来检索子串在字符串中首次出现的位置,其原型为:    char *strstr( char *s ...