UI自动化测试利器-macaca

持续集成与自动化测试不再是新概念,而且持续集成与自动化测试在很多企业内部已开展实施,在开发与测试之间,开发团队注重CI而很难实践的是Unit Test,测试团队则更注重CT而很难实践是UI automatic Tests。

持续集成与自动化测试不再是新概念,而且持续集成与自动化测试在很多企业内部已开展实施,在开发与测试之间,开发团队注重CI而很难实践的是Unit Test,测试团队则更注重CT而很难实践是UI automatic Tests。

说到持续集成就不得不说自动化测试金字塔模型:

Unit Tests:一般情况下由开发团队完成,当然,如果有测试开发团队,这部分的内容会有开发团队与测试开发团队一同完成。

API Tests:由测试团队完成。这是重点,当下提供比较多的都是HTTP API,相对稳定,适合自动化测试。

UI Tests:GUI测试,由测试团队完成。在这个模型中该部分所占比例最少。

在金字塔模型中,是要告诉我们几个道理越底层,越稳定,越高效,越低成本,但是越底层越难实施,越底层的实现对技术专业性要求越高往往越专业的人才也意味着人力成本越高。

综合金字塔模型,提出了橄榄模型,如下图:提高api测试的比例,该部分投资回报率最高,有空可以专门的说说API测试今天的重点是UI automatic Tests,它的投资回报率不如API测试但是它又是整个持续集成中不可缺少的环节。

现在进入正题吧,UI自动化测试面临的第一个问题,多技术,多平台。传统技术如Native、Hybrid和Web,还有新兴的技术如驱动原生跨平台技术(Primeton Mobile),多平台如appium、selenium等等。

通常我们会有pc端,移动端的应用,要学习多种的测试框架,成本太高了。Macaca的出现解决了该问题。

macaca支持主流的移动技术平台iOS,Android,以及两大平台的混合运行时Webview,也支持以往的桌面端浏览器。macaca提供Node.js, Java, Python 三大主流的语言栈,方便工程师和所在团队选择合适的开发语言。Macaca 提供了标准化的驱动层,消除了各技术平台测试技术栈的差异。用户只需要遵从W3C webdriver 标准标准即可多端无忧,理解成本降低。

官网(https://macacajs.com/)

Window7安装(http://www.jianshu.com/p/42849b3e428a)

官网示例链接(https://github.com/macaca-sample/sample-python)

接下来简单的说下示例:

importunittest

frommacacaimportWebDriver

Macaca 使用python开发使用的是python的unittest 这个unit test framework,底层驱动使用WebDriver。这两个是必不可少的。

入参示例:

desired_caps={

#当前用例运行的平台 { iOS / Android / Desktop }

'platformName':'desktop',

#当前测试的浏览器名称

'browserName':'electron'

}

server_url={

'hostname':'localhost',

'port':3456

}

classMacacaTest(unittest.TestCase):

@classmethod

defsetUpClass(cls):

cls.driver=WebDriver(desired_caps,server_url)

cls.driver.init()

用例示例:

deftest_search_macaca(self):

self.driver \

.element_by_id('kw')\

.send_keys('macaca')

self.driver \

.element_by_id('su')\

.click()

time.sleep(3)

html=self.driver.source

self.assertTrue('macaca'inhtml)

self.assertTrue(

self.driver.element_by_css_selector_if_exists(

'#head > div.head_wrapper'))

该用例是百度的搜索,通过id定位搜索框输入macaca,通过id定位确认按钮,执行点击,等待3s,获取到结果界面,判断搜索结果是否有macaca。

底层驱动webdevice可以执行查找定位元素(通过id,class,xpath等)可以执行各种的模拟人工的操作(点击、输入,拖动,下拉等),而unittest则承担着用例执行、断言、报告等。

那么该如何执行用例呢?执行是很简单的,首先开启macaca的服务:

macaca server --verbose

执行测试:

到此你可能对macaca有一定的了解了,以上只是一个简单的示例,在实际的过程中我们需要对macaca做一个简单的分层,例如最简单的分层模型,基础操作层(对device操作的封装扩展)、页面对象层(存放前端的元素对象,方便统一管理)、用例层(testsuit、testcase的组织),如果你的应用更加的复杂那可能会在做细分4层更甚至5层。

说到持续集成就不得不说自动化测试金字塔模型:

Unit Tests:一般情况下由开发团队完成,当然,如果有测试开发团队,这部分的内容会有开发团队与测试开发团队一同完成。

API Tests:由测试团队完成。这是重点,当下提供比较多的都是HTTP API,相对稳定,适合自动化测试。

UI Tests:GUI测试,由测试团队完成。在这个模型中该部分所占比例最少。

在金字塔模型中,是要告诉我们几个道理越底层,越稳定,越高效,越低成本,但是越底层越难实施,越底层的实现对技术专业性要求越高往往越专业的人才也意味着人力成本越高。

综合金字塔模型,提出了橄榄模型,如下图:提高api测试的比例,该部分投资回报率最高,有空可以专门的说说API测试今天的重点是UI automatic Tests,它的投资回报率不如API测试但是它又是整个持续集成中不可缺少的环节。

现在进入正题吧,UI自动化测试面临的第一个问题,多技术,多平台。传统技术如Native、Hybrid和Web,还有新兴的技术如驱动原生跨平台技术(Primeton Mobile),多平台如appium、selenium等等。

通常我们会有pc端,移动端的应用,要学习多种的测试框架,成本太高了。Macaca的出现解决了该问题。

macaca支持主流的移动技术平台iOS,Android,以及两大平台的混合运行时Webview,也支持以往的桌面端浏览器。macaca提供Node.js, Java, Python 三大主流的语言栈,方便工程师和所在团队选择合适的开发语言。Macaca 提供了标准化的驱动层,消除了各技术平台测试技术栈的差异。用户只需要遵从W3C webdriver 标准标准即可多端无忧,理解成本降低。

官网(https://macacajs.com/)

Window7安装(http://www.jianshu.com/p/42849b3e428a)

官网示例链接(https://github.com/macaca-sample/sample-python)

接下来简单的说下示例:

importunittest

frommacacaimportWebDriver

Macaca 使用python开发使用的是python的unittest 这个unit test framework,底层驱动使用WebDriver。这两个是必不可少的。

入参示例:

desired_caps={

#当前用例运行的平台 { iOS / Android / Desktop }

'platformName':'desktop',

#当前测试的浏览器名称

'browserName':'electron'

}

server_url={

'hostname':'localhost',

'port':3456

}

classMacacaTest(unittest.TestCase):

@classmethod

defsetUpClass(cls):

cls.driver=WebDriver(desired_caps,server_url)

cls.driver.init()

用例示例:

deftest_search_macaca(self):

self.driver \

.element_by_id('kw')\

.send_keys('macaca')

self.driver \

.element_by_id('su')\

.click()

time.sleep(3)

html=self.driver.source

self.assertTrue('macaca'inhtml)

self.assertTrue(

self.driver.element_by_css_selector_if_exists(

'#head > div.head_wrapper'))

该用例是百度的搜索,通过id定位搜索框输入macaca,通过id定位确认按钮,执行点击,等待3s,获取到结果界面,判断搜索结果是否有macaca。

底层驱动webdevice可以执行查找定位元素(通过id,class,xpath等)可以执行各种的模拟人工的操作(点击、输入,拖动,下拉等),而unittest则承担着用例执行、断言、报告等。

那么该如何执行用例呢?执行是很简单的,首先开启macaca的服务:

macaca server --verbose

执行测试:

到此你可能对macaca有一定的了解了,以上只是一个简单的示例,在实际的过程中我们需要对macaca做一个简单的分层,例如最简单的分层模型,基础操作层(对device操作的封装扩展)、页面对象层(存放前端的元素对象,方便统一管理)、用例层(testsuit、testcase的组织),如果你的应用更加的复杂那可能会在做细分4层更甚至5层。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171230G0QCH000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券