Robot-Framework框架.docx_第1页
Robot-Framework框架.docx_第2页
Robot-Framework框架.docx_第3页
Robot-Framework框架.docx_第4页
Robot-Framework框架.docx_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Robot Framework是一个通用的自动化测试框架。这是系列文章中的第一篇,重点在全面介绍该框架。你可能可以搜索到很多关于robot框架的文章,但是都比较零散,不成体系。推出这个系列的意图是为了在这个话题上给出一个更结构化的视图,并且同时会包含一些已存在的文章便于构建更打的视图。 请注意,这第一篇文章几乎没有包含任何实现的干货,而是一介绍整体概念为主,只有为后续文章做一些铺垫。什么是自动测试框架?由于介绍自动测试框架不是本文的主题,我们只简单介绍一下。所谓自动测试框架就是为了使测试自动化而开发的各种工具的集合,通常包括测试用例执行、测试报告生成、测试计划管理,以及各种接口、各种脚本支持等等。有些自动化测试框架的功能更加宽泛,还包括测试用例管理、测试计划管理、需求管理、bug管理、版本管理、并发的任务执行等等。自动化测试基本框架最小话的测试框架设计*上图表示的是一个非常基本的自动化测试框架。一个能够执行测试、能够生成测试报告的核心系统,并且预留出插件接口,允许开发专用的测试功能。这样的插件结构保证插件的开发可以变得比较简单。在robot framework中,可以允许使用非常多的不同语言开发插件。 在详细介绍robot framework的结构之前,接下来我们要先讨论keyword-driven testing。什么是keyword-driventesting?一个keyword是一个可以被用于测试SUT(System under Test)的功能或者一个方法。一个keyword可以被另外一个keyword定义,也就是说keyword是分层次的: 高层次keywords:反映SUT的某个具体的业务逻辑。 低层次keywords:将一个高层次keyword分解为一些低层次keyword,低层次的keyword是高层次keyword的具体实现。 技术keywords:提供技术实现以访问并测试SUT。下面引用一副图来说明一下:嵌套的keyword定义下面让我们看一个实际的例子:googlesearch keyword上面的keyword定义来自Selenium Library的Google Search KeyWord定义. 也就是说已经有许多定义到的keywords存在了,我们叫这些预先定义好的keywords为测试库(Test Libraries)。Robot Framwork 概述Robot Framework的安装包包含核心框架以及一套标准库。另外,还有许多外部库(additional externalTest Libraries)。这些外部库由robot framework的社区提供,服务于各种不同目的。可以随意将所有的keyword和不同的库混合使用。比如你可以用selenium库的keywords写一个测试web应用的例子,甚至可以远程的控制浏览器执行测试用例,同时使用数据库库去检查某些操作的结果。甚至不需要写一行代码,只需组合现有的keyword,用他们定义出一个高级别keyword即可。Robot Framework还提供了一个图形界面的的开发工具(RIDE),用于帮助开发和管理测试用例。但是,测试库中的技术keyword是不能使用RIDE开发的。因为测试库中的keyword必须与其开发语言所使用的IDE紧密结合,如使用java语言开发测试库时,eclipse通常是一个选择。测试用例的集合叫做Testsuites,测试用例保存在Resource Files中,这就构成了Robot Framework的三层开发架构。 Testsuites:测试用例(或检查点)在这里被实现。每一个项目至少有一个testsuite。在大一点的项目中,不同的测试功能会被放入不同的Testsuite。 Resource Files:定义高级别的keywords。Resource Files是可以复用的。 Test Library:每一个technical keyword需要一个新的Test Library实现。但是除非你用的是非常特出的技术,一般来说不需要写新的technical keywords。而且实现一个Test Library并不费力。必须强调,当使用keyword时,无论使用本地实现的Test Library还是使用现存的keywords组合,没有任何区别。Robot Framework和他的核心库是Python写成的. 所以Robot Frameword天然支持Python。通过Jython,我们可以使用java来实现Test Library,或者甚至任何能够通过Java调用的语言。通过IronPython,Robot Framework可以和.NET集成。可能的安装是:远程库(Remote Libraries)远程库使我们可以在没有安装Robot Framework的机器上运行测试库(Test Library),并且只要支持XML-RPC的语言就可以编写测试库。远程库与普通的库的使用没有很大区别,除了在测试用力或者资源文件的导入方式上。RIDE同时也支持远程库。如果想学习远程库的开发,可以参看数据库库(Database Library)。远程库的功能实际上是一个测试库的addon提供的,另外,远程库启动后,成为一个server,而robot framework作为client去连接的它。当使用Robot Framework创建一个新的工程时,首先我们可能需要思考以下几个问题:1. 使用哪种编程语言:Python、Jython还是Java?2. 测试脚本应该使用哪种格式(HTML、TEXT、BDD)?3. 是否需要使用Robot IDE(RIDE)?4. 如何在本地或CI环境上执行测试?5. 如何执行测试(scripting、ANT、Maven)?Robot Framework提供给我们很多的设置选择,那么,应该如何取舍?当然,你可以在Eclipse中使用Maven开始Robot测试,然后使用BDD格式编写你的测试用例(比使用HTML格式更加灵活),这是一个很不错的方式。但是我们的核心思想是:简明!那么,让我们一起来创建一个简明且稳定的Robot Framework工程2.1初步思考在新建Robot Framework工程前,我们要分析被测系统需要使用哪些测试库。来看几个例子:web程序测试:我们需要导入SeleniumLibrary或者Selenium2Library数据库测试:可以使用Database库(Python或者Java)SSH/SFTP测试:可以尝试SSHLibrary库除了上述例子外,还有许多其他测试库。如果现有库无法满足你的测试要求,你可能需要编写一个自定义库文件。测试库的选择很重要,因为你在部署Robot Framework之前所安装的编程语言环境(Python或Jython/Java),将直接影响你可选择测试库的范围。不过,你也可以在Python环境中使用远程库接口调用Java的测试库。让我们设想一下,有一个使用数据库的web应用程序例子。为了让例子看上去尽可能像一个web被测应用,我们将用google和本地MySQL数据库为例。该实例将展示如何混合使用多个不同的测试库(本例中使用SeleniumLibrary和DatabaseLibrary),并同时使用DatabaseLibrary的远程库功能。Tip:本章的完整的示例源码可以从GitHub下载2.2测试部署结构下图展示了测试部署结构的模型:概述Selenium通常需要一个Server。你可以把Server和Robot Framework部署在同一台机器上,也可以部署在任何一台通过TCP/IP协议连接的计算机上。DatabaseLibrary也是一样,DatabaseLibrary运行需要RPC。当然,所有的server都是在本地运行的。在一些官方的测试环境中,通常Robot Framework被集成在一个CI服务器上,而Selenium Server部署在一些Windows系统测试机上执行测试,这样你就可以在不同终端上测试各种版本的浏览器。2.3测试实施&组织终于,我们要开始具体的测试实施章节了。我们不会讲的太细,具体的细节可以参阅本例工程源文件,但是,有几个问题我们需要关注一下。测试脚本格式Robot Framework的测试脚本支持HTML, Text, BDD等格式,测试脚本所使用的文件格式将影响我们是否需要使用RIDE编辑器。Tip:如果已经存在一个可用的数据编辑工具,如Excel,可以把数据编辑好后直接复制粘贴到RIDE里。当然,很重要的一点是测试既可以在本地也可以在服务器上(CI环境)执行。这对于Robot Framework来说很容易,你可以通过参数化关键字来实现分布式部署。举几个例子:lweb应用程序的起始URLlSelenium Server的IP地址和端口lJDBC使用Database Library连接数据库的字符串这些参数通常被存放在变量文件(variable file)中。变量文件可以在命令行中作为可选参数传递给Robot Framework。参数化便于我们在本地和CI服务器上操作不同的启动脚本。文件结构项目文件结构定义一个通用文件结构,以便于不同工程重用。上图展示了文件结构的布局。Tip:尽量使用相对路径。例如:从testsuite中引用一个资源文件或者把一个testsuite作为一个参数传给robot启动脚本。首先,我们新建一个顶级目录(robot),然后我们把该目录划分成实施(implementation)和执行(execution)。在implementation目录中,包含testsuites和resources两个目录,分别用来存放测试套件脚本和资源文件。当然,在一些大型的项目中,需要更深的文件结构。需要注意的是,在引用任何其他文件时(e.g.在testsuit中引用资源文件),所有的路径信息请使用相对路径。execution文件夹用于处理不同的目标环境。通常,这包括本地环境(local)和CI环境(server)。scripts文件夹用于存放脚本文件(robot脚本,selenium server,DatabaseLibrary远程server),settings文件夹用于存放指定的变量文件。最后来看下lib文件夹。它是用来存放自己编写的库文件或现成的库文件。2.4启动在谈到执行测试时,我推荐大家使用shell脚本。shell脚本简单易懂,不容易出现问题,并且在CI环境中使用方便。在开始前我们在本例中准备了三个脚本,分别用于:1.启动robot测试的脚本2.启动Selenium Server的脚本3.启动Database Library Remote Server的脚本2.5安装部署首先我们需要安装Robot Framework以及所需的测试库。假设我们的操作系统是Windows。Tip:Robot Framework不支持3.x版本的Python。在本例中将需要安装以下安装包:1. python-2.6.6.msi Python 2.6.62. robotframework-2.7.1.win32.exe Robot Framework 2.7.13. wxPython2.8-win32-unicode--py26.exe wxPython (RIDE的UI库)4. robotframework-ride-0.43.3.win32.exe RIDE 0.43.35. robotframework-seleniumlibrary-2.8.1.win32.exe Selenium2Library 2.8.16. dblibrary-2.0-server.jar Database Library Server 2.0按顺序安装前五个安装包(我一直使用的是默认安装设置)。然后把以下路径加到PATH环境变量中:“C:Python26;C:Python26Scripts”安装完毕后,你应该可以通过“pybot version”命令来执行Robot Framework了,并且可以从“C:Python26Scriptsride.py”启动RIDE。Robot Framework & RIDE下载Database Library JAR。Selenium Library通常都附带相应的Selenium Server JAR。为了能够从Robot中独立使用它,你需要定义一个新的环境变量RF_HOME,执行你Python的安装目录(默认是“C:Python26)。该变量用于本地脚本启动selenium server。在 本例中为了使用本地MySQL数据库,你必须按如下创建测试模式和相应的用户:C:xamppmysqlbinmysql -u root pmysql create database databaselibrarydemo;mysql create user dbliblocalhost identified by dblib;mysql grant all privileges on databaselibrarydemo.* to dblib;当然,在不同的系统上操作会略有不同。所有的测试脚本都在路径robot/execution/local/scripts中。robot/implementation/testsuites中包含了测试实施内容。你可以在RIDE中直

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论