结合Robot框架的Web Driver自动化测试解决方案

来源 :硅谷 | 被引量 : 0次 | 上传用户:jenniechen007
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要 通过对Selenium Web Driver的启示,解决内嵌HTML页面无法访问的难题,提出了基于Robot测试框架,结合Web Driver,Selenium等多种技术解决方案的自动化测试解决方案。在解决HTML元素无法访问困难的同事,这套方案有效提高测试效率,统一了测试框架,简化测试维护成本,从而实现了针对多种开发技术混合的软件自动化测试体系,保证软件质量。
  关键词 网络服务器;Selenium Web Driver;远程服务器;Robot框架
  中图分类号:TP311 文献标识码:A 文章编号:1671-7597(2014)20-0048-03
  随着如今云端产品逐渐成为软件发展的一个重要趋势,软件开发工具和开发技术的日新月异。开发者们运用混合开发技术加快软件更新频率,及时满足客户需要。显然,一种单一的自动化测试技术已经不能满足此类结合各种开发技术的云端产品测试的需求。
  针对Autodesk公司研发的一款通过数字模型设计实现实时协作的三维设计应用软件Mockup 360①,介于研发时的复杂背景,这款软件通过QT Webkit将HTML UI内嵌于WPF应用框架,并结合其它多种开发技术实现的用户界面,无疑给自动化测试带来一定困难。本文仅针对Mockup 360内嵌的HTML页面自动化测试做详细介绍。
  1 Mockup 360的内嵌网页
  Mockup 360是由Autodesk公司研发的一款通过数字模型实现实时协作的三维设计云服务软件。它的客户端采用了通过QT Webkit内嵌HTML用户界面于WPF应用框架的结构,如图1所示,这却给自动化测试带来了难题。Selenium作为通用的网页用户界面自动化测试工具,在此种结构下也不能实现与网页窗口控件的交互。介于UI自动化测试的瓶颈,我们需要找到一种经济,强健并且易用的自动化测试方案。先来看看Web Server。
  图1 Mockup 360 框架
  ①Mockup 360:Autodesk是由Autodesk公司自主研发的一款通过数字模型实现实时协作的三维设计云服务软件。http://www.autodesk.com/products/mockup-360/overview
  2 Web Server介绍
  在互联网高速发展的时代,网页服务器Web Server至始至终都扮演着必不可少的角色,为网页浏览器(客户端client)提供网上信息浏览服务。
  引用百度百科的解释,Web服务器是可以向发出请求的浏览器提供文档的程序。简单的说,Web Server是用来解析HTTP协议的,它在因特网上具有独立的IP地址。网页浏览器通过因特网连接到Web服务器,运用socket文件并通过HTTP协议向Web服务器发送请求,而Web服务器接受HTTP请求,解析请求并返回HTTP响应,通常情况下返回HTML文件以供浏览器浏览。
  3 Selenium Web Driver设计原理
  Selenium是有ThoughtWorks公司专门为Web应用程序编写的一个自动化测试工具。它通过Web Driver访问网页控件,使测试直接在浏览器上执行。
  Selenium Web Driver就正式运用了这种Client/Server的经典设计理念,通过远程服务器来实现与测试客户端的访问和操作。这里以FireFox为例,来简单说说Selenium Web Driver的工作原理。如图2所示。
  首先,测试脚本通过Firefox瀏览器的Web Driver启动一个新的浏览器线程,以Web Driver这种方式启动的Firefox会自动被绑定到一个特定的端口,此时,这个被绑定了端口的Firefox跟平时我们正常启动的Firefox不同,它已经是变成了Web Driver的远程服务器Remote Server。随后,测试脚本要对Firefox所做的操作,例如访问一个网页控件,是在与这个服务器连接建立后,通过HTTP向这个Remote Server侦听端口发送RESTful请求,Remote Server解析请求完成相应操作后并给予响应。测试脚本收到响应后分析返回信息继续执行脚本。不难看出,这里所说的测试脚本,实际上就是我们Remote Server所服务的客户端。Remote Server就是提供服务的Server端。
  目前Selenium Web Driver可以对IE,Chrome,Fixfox等主流浏览器都作支持,当然,这里的前提是这些浏览器实现了WebDriver的统一接口,这样才使得客户端可以发送统一的RESTful请求去实现浏览器的自动化操作。
  图2 Selenium Web Driver 工作原理
  4 Mockup 360自动化测试解决方案
  1)Mockup 360 Web Driver。
  介于UI自动化测试的瓶颈,我们需要找到一种经济,强健并且易用的自动化方案。参考Selenium Web Driver的工作原理,我们可以创建一个简单的框架来提供类似Web Driver工作的REST API,使得测试人员可以通过任何语言来驱动Mockup 360客户端对内嵌网页界面进行操作。
  图3 Mockup 360 Web Driver
  在这个框架中,Mockup 360应用程序便类似于Selenium测试案例中的Firefox浏览器,要想它能响应测试脚本发送的请求,同样需要建立一个远程服务器Remote Server,来接受和处理请求并驱动Mockup 360客户端执行操作。这里我们内嵌javascript在Mockup360的HTML页面,当应用程序启动后悔加载内嵌的Uiagent.js,并通过Web Socket将应用程序连接到本地的Nodejs服务器(例如:http://localhost:3000,端口可以任意指定)。测试脚本(客户端)通过REST API发送jQuery命令给本地的Nodejs服务器,Nodejs服务器传播这个命令给Mockup 360应用程序去执行相应的操作,并返回结果给Nodejs服务器。客户端的jQuery命令使用JSON格式如下:{“element”:jQueryElementDescriptionString, “action”: jQueryAttributeString, “value”: ValuePassingToAction,”timeout”: MaxWaitTime}。这个命令通过websocket 监听渠道传输给Uiagent.js,Mockup360应用程序就会根据JSON信息重组jQuery命令然后操纵网页元素执行操作。其结构如图3所示。   2)实现步骤。
  ①启动Nodejs Server。
  var express = require(‘express’),
  http = require(‘http’),
  app = express(),
  server = http.createServer(app),
  io = require(‘socket.io’).listen(server);
  api = require(‘./apiRoutes/restAPI’);
  server.listen(3000);
  ②HTML加载Uiagent.js, 在Mockup 360应用程序启动后自动连接本地服务器。
  $(document).ready(function() {ConnectToLocalServer();})
  ③实现4个基本的REST API:
  http://localhost:3000/command
  Request method: POST, request body: JSON format:
  {“element”:”span#newMockup”,”action”:”click”}
  http://localhost:3000/wait
  Request method: POST, request body: JSON format:
  {“element”:”p.mockupName:contains(UIAutomation)”,
  “timeout”:timeout}
  http://localhost:3000/waitVanish
  Request method: POST, request body: JSON format:
  {“element”:”#Insert”, “timeout”:timeout}
  http://localhost:3000/value
  Request method: GET, request body: JSON format:
  {“element”:”#mockupName”,”action”:”val”,
  “timeout”:timeout}
  ④發送请求给本地服务器:
  curl “http://localhost:3000/command” -H “Content-Type:
  application/json” -X POST -d
  “{\”element\”:\”#newMockup\”,\”action\”:\”click\”}”
  ⑤Nodejs 服务器接受请求并驱动Mockup 360 应用程序命令执行,完成测试。
  3)基于Robot 框架的自动化测试。
  ①Robot Framework。
  Robot框架(Robot Framework)是一个通用的关键字驱动测试的自动化框架,可以提供一种非常简单的API来使用Python或Java实现自定义测试库。它具有良好的扩展性,提供丰富通用的标准库,例如Builtin,OperationSystem,Screenshot等,同时也方便集成了不同的扩展库,如Selenium,AutoIt。另,Robot测试框架还能自动会生成测试报告和测试日志,给测试工作带来一定的便捷。
  对于Mockup 360集HTML,WPF及其他组件,页面于一体的应用程序,势必会用到各种测试技术。前面所讲的Web Driver是针对于内嵌WPF的HTML的解决方案。如何把这种方案与其他测试解决方案联合在一起,完成完整的用户使用流程,Robot测试框架便有效的实现了这一目的。RIDE是一款专门用Python编写,用来编辑Robot Framework用例的软件。
  ②自定义Mockup 360 Web Driver 库。
  如果想把前面讲到的Mockup360 Web Driver集成与Robot测试框架,需要定义Web Driver库,提供通用的接口函数,以供Robot测试框架识别为关键字,驱动测试脚本。例如在Web Driver库中定义click函数:
  def click(self, element, timeout = 10000):
  self.waitElement(element, timeout)
  url_api = self.webui_server_url+ “command”
  return self.restAPI(“post”, url_api, {“element”:element,”action”:”click”})
  ③Robot测试脚本。
  定义好Web Driver库后,只需在测试脚本中引用其库文件,便可通过关键字编写测试用例。具体的测试用例如表1所示。
  5 总结
  通过对Selenium Web Driver的启示,启动Nodejs Server作为remote server,接收client端发送的RESTful请求,驱动应用程序操作网页元素。并且创建Web Driver库,集合Robot测试框架,更有效的编写,执行和管理测试用例,提高测试效率,保证产品质量。
  参考文献
  [1]Selenium web driver documentation: http://www.seleniumhq.org/docs/03_webdriver.jsp.
  [2]http://outofmemory.cn/wr/?u=http%3A%2F%2Fwww.huangbowen.net%2Fblog%2F2013%2F03%2F11%2Fwebdriver%2F.
  [3]黄华林.基于Selenium WebDriver的B/S架构软件的自动化测试研究[J].电脑知识与技术,2013,9(23):178-180.
  [4]Robot Framework User Guide:http://robotframework.org/robotframework/#user-guide.
  [5]黄得女,刘敬彪,嵇斌.基于Robot测试框架的关键字驱动的研究与应用[J].计算机系统应用,2010,19(4):162-165.
  [6]http://my.oschina.net/dyhunter/blog/94090.
其他文献
本文通过对荣华二采区10
期刊
摘 要 本文介绍了基于ANSYS软件的有限元分析原理及其在结构中的应用,通过应用ANSYS软件对连杆机构进行分析,完成了对机械的强度校核,并根据优化原则和ANSYS软件的分析结果,一步步对连杆机构进行优化,然后分析,尽可能的减轻连杆机构的质量来减少连杆机构的转动惯量,来提高连杆机构的动态性能。  关键词 ANSYS;有限元法  中图分类号:TB1 文献标识码:A 文章编号:1671-7597(20