Mcaca+Python 測試環境搭建及上手

Macaca是一套面向用戶端軟件的測試解決方案,提供了自動化驅動,周邊工具,集成方案,旨在解決終端上的測試、自動化、性能等方面的問題,不少人選擇它的緣由簡單:輕量化(相比於appium),跨平臺(windows,android,ios),持續集成的reliable(Reliable 是 Node.js 實現的分佈式持續集成服務) ,元素查看app-inspector,支持用例錄製的uirecorder;等等css

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;見我下面這張大圖;html

Macaca執行測試用例

  1. 啓動macaca服務: macaca server --verbose;
    C:\Users\Administrator>macaca server --verbose
    >> index.js:17:12 [master] pid:7848 webdriver server start with config:
     { port: 3456,
      verbose: true,
      always: true,
      ip: '172.27.35.1',
      host: 'USER-6IG90K3098',
      loaded_time: '2017-02-08 15:43:03' }
    >> middlewares.js:17:10 [master] pid:7848 base middlewares attached
    >> router.js:127:10 [master] pid:7848 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.5-py3.5.egg\macaca\remote_invoker.py:110: R
    esourceWarning: unclosed <socket.socket fd=292, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53248, 0, 0), raddr=('::1', 3
    456, 0, 0)>
    C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R
    esourceWarning: unclosed <socket.socket fd=180, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53251, 0, 0), raddr=('::1', 3
    456, 0, 0)>
    C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R
    esourceWarning: unclosed <socket.socket fd=196, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53252, 0, 0), raddr=('::1', 3
    456, 0, 0)>
    .C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110:
    ResourceWarning: unclosed <socket.socket fd=292, family=AddressFamily.AF_INET6,
    type=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53258, 0, 0), raddr=('::1',
    3456, 0, 0)>
    C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R
    esourceWarning: unclosed <socket.socket fd=180, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53259, 0, 0), raddr=('::1', 3
    456, 0, 0)>
    C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R
    esourceWarning: unclosed <socket.socket fd=196, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53265, 0, 0), raddr=('::1', 3
    456, 0, 0)>
    C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R
    esourceWarning: unclosed <socket.socket fd=292, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53266, 0, 0), raddr=('::1', 3
    456, 0, 0)>
    C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R
    esourceWarning: unclosed <socket.socket fd=180, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53284, 0, 0), raddr=('::1', 3
    456, 0, 0)>
    C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R
    esourceWarning: unclosed <socket.socket fd=196, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53285, 0, 0), raddr=('::1', 3
    456, 0, 0)>
    C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R
    esourceWarning: unclosed <socket.socket fd=292, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53286, 0, 0), raddr=('::1', 3
    456, 0, 0)>
    C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R
    esourceWarning: unclosed <socket.socket fd=180, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53287, 0, 0), raddr=('::1', 3
    456, 0, 0)>
    C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R
    esourceWarning: unclosed <socket.socket fd=196, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53292, 0, 0), raddr=('::1', 3
    456, 0, 0)>
    C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R
    esourceWarning: unclosed <socket.socket fd=292, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53293, 0, 0), raddr=('::1', 3
    456, 0, 0)>
    C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R
    esourceWarning: unclosed <socket.socket fd=180, family=AddressFamily.AF_INET6, t
    ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53294, 0, 0), raddr=('::1', 3
    456, 0, 0)>
    .C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110:
    ResourceWarning: unclosed <socket.socket fd=196, family=AddressFamily.AF_INET6,
    type=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53295, 0, 0), raddr=('::1',
    3456, 0, 0)>
    
    ----------------------------------------------------------------------
    Ran 2 tests in 14.592s
    
    OK

    執行成功如上圖;node

  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後續再跟上;python

相關文章
相關標籤/搜索