2小时入门Robot Framework

摘要:
安装完成后,您可以通过在终端1.2.2上执行pybot版本来测试安装是否成功。RobotFrameworkIDERIDE是Robot的第三方测试用例编辑器,它可以编辑用例、编辑关键字,并生成HTML、TXT和其他格式的文件。执行后,您可以看到报告文件是在当前文件夹下生成的。您可以查看此报告。2.只需使用RobotFramework2.1和HelloWorld在/home下创建演示文件夹,例如robot_test
1、介绍

1.1、介绍Robot

        Robot Framework是一个基于关键字驱动的自动化测试框架。通过该框架,测试人员可使用python封装关键字,并在非代码环境下使用关键字构建可被执行的测试用例

        Robot Framework官方网站:http://robotframework.org/

1.2、安装

1.2.1、Robot Framework

        Robot Framework支持Python和Jython,本文档针对ubuntu下Python进行讲解

        下载地址:https://pypi.python.org/pypi/robotframework,下载最新版本安装包如果是windows可直接下载exe安装包,ubuntu可使用tar.gz包进行源码安装,当然windows也支持源码安装

        下载完后解压tar包并进入文件夹内执行sudo pythonsetup.py install便可完成安装。安装完成后可在终端执行pybot--version测试是否安装成功

1.2.2、Robot Framework IDE(RIDE)

        RIDE是Robot的第三方测试用例编辑器,可编辑用例,编辑关键字等并生成HTML,TXT等格式的文件。同时RIDE可直接可进行测试执行。RIDE是基于wxPython进行开发,所以安装RIDE前需要先行安装wxPython,其官方网站为:http://www.wxpython.org/

        windwos下可字节下载exe包进行安装

        ubuntu下通过终端命令行方式进行安装,方法如下:

        1,curl http://apt.wxwidgets.org/key.asc | sudo apt-key add –

        2,修改/etc/apt/sources.list文件,追加如下内容

        deb http://apt.wxwidgets.org/ gutsy-wx main

        deb-src http://apt.wxwidgets.org/ gutsy-wx main

        3,sudo apt-get update

        4,sudo apt-get install python-wxgtk2.8 python-wxtools wx2.8-i18n

        5,sudo apt-get install python-wxgtk2.8 python-wxtools wx2.8-i18n libwxgtk2.8-dev libgtk2.0-dev

        完成wxPython安装后可进行RIDE安装

        下载地址:http://code.google.com/p/robotframework-ride/,安装方法同robot安装包

1.2.3、官方快速入门和example

        下载入门手册:robotframework-quickstart-20090113.zip并解压,进入文件夹后可看见一个quickstart.html,打开该文件可看到官方的快速入门的文档。同时在终端中进入到该文件夹执行命令pybot quickstart.html便可看到robot执行了一系列测试。这种帮助文档就是example本身的例子并不多见,其原理就是robot可识别html页面中的表格,只要表格的内容和robot执行用例的语法,便可成功执行用例。执行完毕后可看见当前文件夹下生成了report文件,可查看这份报告

2、简单使用Robot Framework

2.1、Hello World

        在/home下建立demo用的文件夹例如名为robot_test。在终端中使用命令ride.py打开RIDE编辑器。点击RIDE菜单栏File->Open Directory选中robot_test文件夹,然后确定。

2小时入门Robot Framework第1张

在robot_test目录下新建一个RobotTest.py然后再文件内编写python代码,如下

[python] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. import os  
  2. import sys  
  3.   
  4. class RobotTest:  
  5.     def first_keyword(self):  
  6.         fp = open("/tmp/robot_fk", "a")  
  7.         fp.write("this is the first keyword ")  
  8.         fp.close()  

这样一个TestLib文件就创建完成了,之后在RIDE中创建测试用例:

在RIDE的最上侧菜单栏选择File->New Project后如下

2小时入门Robot Framework第4张

在右侧编辑框拉开Setting选项如下

2小时入门Robot Framework第5张

点击Documentation的大文本编辑框,输入一下文本,可输入中文然后保存,便在可在robot_test目录下生成一个robot_test.html的文件可打开查看样式

首先需要加载刚编辑的RobotTest.py这个库,方法为,点击左侧Robot_Test,在右侧找到Library按钮点击,并点击浏览找到RobotTest.py文件

2小时入门Robot Framework第6张

然后添加用例

在RIDE中右键点击Robot_Test选择New Test Case,输入用例名,比如first case

2小时入门Robot Framework第7张

后点击first case便可看到用例编辑框,在下面的表格中加入第一个关键字first keyword如下

2小时入门Robot Framework第8张

这样一条简单的用例就完成了

用例执行:

点击RIDE最上测得按钮如图

2小时入门Robot Framework第9张

便可看到RIDE开始执行测试用例,执行完毕后如下图

2小时入门Robot Framework第10张

之后进入/tmp目录下看到一个robot_fk文件,可打开看到一串字符this isthe first keyword,这意味着我们的测试成功了。

2.2、Robot工作原理简述

        Robot的测试用例和配置使用HTML,TXT等格式文件进行编辑,html是比较常用的一种格式,通过html绘制的表格形式来编辑用例可阅读性较高。

        Robot通过识别html表格中的表头来确定该表格的配置是做合使用,例如Settings用来配置资源库,Test Cases用来编辑测试用例,Variables用来配置默认的变量等等。

        每个robot工程开始工作时会通过Settings加载相关的资源,通常为TestLib,或者导入其他的配置文件等等,然后找到所有的Test Cases表格并顺序执行每个case。每个测试用例的每个步骤通常都是有一个关键字来执行操作该步骤。Robot会去Settings中指定的library中寻找该关键字,如果找到则执行该关键字所对应的代码,如果在Lib代码中无法找到该关键字,则寻找html的表中表头为Keywords的表格,如果也无法找到则会报错。执行测试用例时每个步骤都执行完且没有报错,则认为该条用例为pass。

3、Robot Framework详解

3.1、Robot的格式

官方文档所描述的配置如下图

2小时入门Robot Framework第11张

而是用RIDE编辑所生成的html文件格式如下:

2小时入门Robot Framework第12张

如果使用其他html编辑器来编辑robot相关配置,建议编辑成官方说明中的标准样式。

3.2、TestLib

        TestLib是robot框架关键字部分的核心,它的作用就是用来封装底层关键字。Robot自带了一部分非常常用的TestLib如XML,String等,也有别人开发的第三方的TestLib比如web页面测试相关,Database相关,在robot中只需要正确导入这些库,那么就可以使用这些lib中封装的关键字。而在自动化测试开发中,最重要的过程就是开发出优秀的TestLib,封装出复用性强,清晰明了的关键字。

        TestLib编写规则:

        1,TestLib是一个python文件,里面写的python代码,所以TestLib通常是.py结尾的。

        2,TestLib只且只有一个class,并且该class的名字和TestLib文件名相同。如2.1介绍的RobotTest.py中定义的class的名字也是RobotTest

        3,class中所定义的函数便是robot中的底层关键字,所以一些私有函数,不打算作为关键字对外开放的建议将函数名以“__”开头

        4,class中函数名定义通常为defabc_def_ghi(self, xxx):这样的格式,单词之间使用下划线分隔,这样的定义的函数名在编辑测试用例时可直接使用关键字abc def ghi或者Abc Def Ghi也是允许的。所以class中定义函数的时候建议只使用小写字母和下划线的方式,这也符合python的编程规范。

        5,其他规范符合python的规范,比如使用os,sys等系统函数该import的就还是要import

        符合上述条件的TestLib就可以被robot使用。读者可以自行建立一个TestLib并实现一两个关键字并在RIDE中导入,导入方法参考2.1的例子,导入后如果RIDE中该库颜色显示是红色的,说明很有可能该TestLib有点问题,最直接的问题就是class名和文件名不同导致找不到该Lib,或者头部import某库就出错了。

3.3、Robot的主配置(html)

        凡是使用RIDE编辑的html无需太关心格式问题,所以具体跟表格格式相关的问题不再赘述,现介绍一些常用的配置,这些配置通常在RIDE中都能找到,只需要填写内容即可。以下描述还是以2.1节中的example为例

3.3.1、Setting

        点击RIDE中的Robot Test看到右侧的Settings打开可看到较多配置

2小时入门Robot Framework第13张

3.3.1.1、Documentation

        描述文档,通常用来描述该html的作用,类似帮助文档或者说明

2小时入门Robot Framework第14张

 3.3.1.2、Suite Setup

        每个Test Suite启动时执行的动作,用法同测试用例中的关键字

2小时入门Robot Framework第15张

3.3.1.3、Suite Teardown

        每个Test Suite结束的时候执行的动作,用法同测试用例中的关键字。

3.3.1.4、Test Setup

        每个Test Case启动时执行的动作,用法同测试用例中的关键字。如果在某个具体的Test case中指定了Setup则执行case里的setup而不执行setting里的Test Setup

3.3.1.5、Test Teardown

        每个Test Case结束的时候执行的动作,用法同测试用例中的关键字。同样case里的Teardown会将setting里Test Teardown覆写。

3.3.1.6、Test Timeout

        用例超时时间,超过该时间还未执行完毕的用例将被强制退出。单位为秒,也可以写成如下形式,用RIDE输入的时间自动会转成如下形式

2小时入门Robot Framework第16张

3.3.1.7、Tags

        Tags作为用例的标记,在robot中是非常常用的。在setting中可配置Force Tags和Default Tags,也可在用例中配置Tag,Tag的作用在后面描述

3.3.1.8、Library

        指定TestLib,系统自带的或者已经安装的TestLib可直接输入名字,自己编写的TestLib就需要加入路径,相对路径绝对路径均可,相对的是该html文件的路径

3.3.1.9、Resource

        引入一个资源文件。通常一份比较好的robot用例中包含就是跟该用例相关的关键字,用例和一些基本配置等等,如果需要用到很多公共的模块,公共的关键字,这些公共资源通常会编辑成一个独立的html,这样业务相关的html便可引用

3.3.2 、Testcases

        本节开始描述如何编写测试用例。

3.3.2.1、编写方法

2小时入门Robot Framework第17张

        上图是官方的帮助文档中描述的Test Case表格的样式。第一列为用例名,第二例开始往后便是用例的动作。如果该用例不止一个动作那么步骤2的动作要写到步骤1动作的下方,即步骤2的第一列要空出,如下例子

Case OneKeyword Aarg1arg2 
 Keyword Barg1arg2arg3
     
Case TwoKeyword C   
 Keyword Darg1arg2 

两个case均有2个步骤,而robot识别case就通过如果第一列为非空则认为该行是一个新的case。

        上例的表格缺少表格头,官方的样式表头是第一列是Test Case,第二列是Action,第三列以后的是Argument,事实上不一定所有的case的第二例都是Action,有可能的是返回值,有些keyword可能还会返回2个返回值甚至更多,那么在Action之前可能还要占用更多格的空间。RIDE编辑生成的用例表表头只有Test Cases。所以一般的用例的形式通常为:

用例名返回值 =关键字参数1参数2

 3.3.3.2、变量

        在编写测试脚本时,每个步骤之间并不是独立的。往往需要前一步骤的输出传入给后一步骤的输入。在代码中可以使用变量来传递这些值,但是如果在表格中编写测试用例,想要传递参数并不是那么容易的事。Robot提供了这样的变量机制,能够在编写用例轻松传递参数。

        变量的定义方式为${变量名},通过该方式可定义变量,并给变量赋值,和作为参数传入。举个例子,定义个测试用例名为var case,并且有两个关键字第一个为get var,有1个返回值,没有输入参数,功能获取var的值。另一个关键字为set var,有1个输入参数,没有返回值,功能设置var值。Var case的步骤先调用get var获取var然后调用set var并传入该值。如下:

var case${test_var}=get var
 set var${test_var}

上述用例中定义了${test_var}这个变量用来取值和赋值。如果作为返回值需要复制,就写在关键字操作前并加入=,如果作为参数传值写在关键字操作后,参数需要注意顺序。

        学会使用变量,并知道关键字如何使用,基本就可以编写测试用例了,下面介绍Test case中一些常用的配置。在case中的配置需要使用”[ ]”进行标示

3.3.2.3、Documentition

        和setting中的一样,用来做一些注释,描述等等,在robot执行时会把这些内容打印出来

2小时入门Robot Framework第18张

3.3.2.4、Setup

        当case启动时首先会执行的操作,如果这里定义的Setup则setting中的Test Setup将失效。

2小时入门Robot Framework第19张

3.3.2.5、Teardown

        当case结束最后会执行的操作,如果在这里定义了Teardown则setting中的Test Teardown将失效

2小时入门Robot Framework第20张

3.3.2.6、Timeout

        用例超时时间。

3.3.2.7、Tags

       和setting中tags一致,用于给用例做标记。

3.3.3、Keyword

        Robot作为关键字驱动的测试框架,Keyword是其用例层最核心的内容。TestLib中定义的函数,可作为Keyword在用例编辑时使用。同时用户可自定义Keyword,而用户自定义的Keyword通常是底层TestLib中的Keyword的组合和封装。TestLib中的keyword的功能是最为简单单一的。如果测试用例全部使用Testlib中的keyword那极有可能一个用例包含十几个步骤甚至更多。这样的用例逻辑性和可读性是很差的。阅读用例的人可能只关心某一步骤做什么,并不关心是怎么做的,比如数据处理完的下一步骤是验证结果。验证结果可能需要处理数据库,写文件,解析数据结构等等。这些事应该上层写用例的人可能不关心,或者也不想关心。良好的Keyword封装能够让用例编写更轻松,用例质量也越高

3.3.3.1、Keyword编写方法

        官方定义的Keyword表格样式如下

2小时入门Robot Framework第21张

和Test case定义方式是一样的。在RIDE中可以如下创建一个Keyword。右键点击Robot Test选择New User Keyword,并取名为my keyword。

2小时入门Robot Framework第22张

这里使用2.1中的例子,在my keyword中调用两次first keyword

2小时入门Robot Framework第23张

保存后的html样式为

2小时入门Robot Framework第24张

然后编辑first case,让它的测试步骤为调用一次my keyword

2小时入门Robot Framework第25张

编辑完成执行first case用例,然后查看/tmp/下的robot_fk文件,每执行一次就会增加两行”this is the first keyword”。

        需要注意的是,用户定义的Keyword不能和Testlib中的Keyword重复。由于robot在执行用例时首先回去TestLib中搜索Keyword,如果用户定义了和TestLib中重复的Keyword,那该Keyword将无法被执行到。

3.3.3.2、Keyword的输入和输出

        如果把一个Keyword当成一个函数,那除了函数处理流程,用户最关心的便是输入和输出。输入便是参数,输出便是Keyword的返回值。下面通过一个例子来说明关键字的输入和输出。首先在2.1中使用的RobotTest.py中增加两个方法,第一个方法名为plus,输入参数2个,功能是返回两个参数的和。另一个方法名为multi,输入参数为3个,功能是返回3个参数的乘积。定义个关键字名字为alg keyword,有3个输入参数,1个返回值,其功能是三个参数两两求和,将3个和求乘积并返回。在RobotTest.py添加如下代码

[python] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. import os  
  2. import sys  
  3.   
  4. class RobotTest:  
  5.     def first_keyword(self):  
  6.         fp = open("/tmp/robot_fk", "a")  
  7.         fp.write("this is the first keyword ")  
  8.         fp.close()  
  9.   
  10.     def plus(self, arg_a, arg_b):  
  11.         return int(arg_a) + int(arg_b)  
  12.   
  13.     def multi(self, arg_a, arg_b, arg_c):  
  14.         return int(arg_a) * int(arg_b) * int(arg_c)  

        在RIDE中新建一个keyword命名为alg keyword。使用[Arguments]声明参数如下所示。

2小时入门Robot Framework第28张

在RIDE中编辑参数的方式为

2小时入门Robot Framework第29张

然后在alg keyword编辑测试步骤,如下

2小时入门Robot Framework第30张

保存后html页面为

2小时入门Robot Framework第31张

这里RIDE在生成html页面时为了限制表格列数,将${c}另起一行并在前使用...表示这是与上一行的连接。最后加入[Return]返回${d}的值

2小时入门Robot Framework第32张

在RIDE中在Return Value中添加返回值,完整的keyword编辑如下

2小时入门Robot Framework第33张

        完成Keyword后在RIDE中添加一个测试用例命名为second case,调用alg keyword并传入参数1,2,3,并将返回的值进行打印

2小时入门Robot Framework第34张

编辑完后勾选second case并点击按钮执行。

2小时入门Robot Framework第35张

执行结果如下

2小时入门Robot Framework第36张

上面的执行结果显示alg keyword在second case里被正确使用了,也返回了正确的值。通过这种函数可以将单一的关键字封装成高级关键字。Keyword也还有其他常用配置

3.3.3.3、Documentation

        和setting中的一样,用来做一些注释,描述等等。

2小时入门Robot Framework第37张

3.3.3.4、Teardown

       关键字执行完成时最后会执行的操作。关键字在执行过程中如果遇到错误便会终止,如果后续操作中有资源释放,这些操作就不会执行,可能会导致系统崩溃,内存泄露等,所以可以在Teardown中加入资源释放的操作。

3.3.4、Variable

        Robot可以在case之外单独定义一些变量,这些变量可以设置默认值。这个更像是代码中的全局变量。当有一些公共的配置,在每个测试用例都可能用到,比如ip地址,端口号,默认的用户名和密码等等。全局变量的定义时建议全部使用大写字母。在3.3.3的示例中,second case使用alg keyword使用了参数1,2,3,这里可以使用全局变量来替换。

        首先在RIDE中创建全局变量,在RIDE中右键点击Robot Test选择New Scalar,然后给变量命名并设置默认

2小时入门Robot Framework第38张

同样方法再创建两个全局变量,完成后可查看html表格

2小时入门Robot Framework第39张

之后修改second用力,将这三个参数代替原本的1,2,3传入到用例中

2小时入门Robot Framework第40张

之后点击运行查看结果。

4、Robot高级应用

        掌握上述Robot应用便可完成大部分测试用例,另外Robot还提供了一些功能更强大的关键字可让用例编写更灵活

4.1、If分支

        Robot支持if判决能让用例执行时根据不同情况执行不同操作。If相关的关键字是”Run Keyword If”,”ELSE IF”,”ELSE”

        利用3.3.3中创建的plus关键字,创建一个用例调用plus输入两个参数,如果返回的值小于0,则打印loga,大于等0,小于10打印logb,大于等于10打印logc。首先在RobotTest.py里增加三个函数分别打印loga,logb,logc,调用robot中的logger需要导入robot的api包

2小时入门Robot Framework第41张

然后新建一个用例名为third case之后编辑用例,如下

2小时入门Robot Framework第42张

之后可以尝试修改plus的参数进行测试查看结果。

        If有个比较特殊的地方,如果判断一个变量是否为某个字符串,不能直接用${ret}去判断,需要给${ret}加引号如下:

RunKeyword If‘${ret}’== ‘abc’Dosomethingarg1

如果不加引号,使用 ${ret} == ‘abc’,假设${ret}的值是qwe,执行时会报错,告诉你qwe这个变量没有定义。这种情况看来,robot将变量的值,当做代码里的变量名处理,所以需要加上引号当字符串处理。这是python的强大之处吧,可以通过字符串转化成一个变量的名字。

        关于if的用法还有许多技巧,详细看官方的帮助文档

        http://robotframework.googlecode.com/hg/doc/userguide/RobotFrameworkUserGuide.html?r=2.8.1

4.2、循环

        Robot可以使用For循环反复执行一些操作,比较常用的做法是假如某个操作返回一各列表,而下一步需要分别处理列表里的每个元素,那么需要如下操作:

${table_list}=Dosomething  
:FOR${table}IN@{table_list}
 Dofirst step${table} 
 Dosecond steparg2 

使用:FOR 和IN便可遍历列表中的元素,不过需要注意的是使用FOR遍历时需要将变量通过@转换成一个列表,否则无法正确遍历。遍历过程中可通过关键字” Exit For Loop”终止循环。FOR循环也支持多种方式,比如IN RANGE可以设置遍历次数,或者直接在某几项元素中遍历,详细可以看帮助文档for loop一节

http://robotframework.googlecode.com/hg/doc/userguide/RobotFrameworkUserGuide.html?r=2.8.1#for-loops

4.3、Tags

        之前提到过Tags的概念,是用于给用例做标记。用户可以在setting中设置force tags和default tags,也可以在用例中使用[Tags]来给用例标记。Tags最直接的应用就是,可以有选择的执行测试用例。比如有10个用例,其中5个用例使用[Tags]标记为group_a,另外5个标记为group_b。当使用pybot执行用例时假如加上参数--includegroup_a那么robot只会执行有group_a标记的用例,如果使--excludegroup_a那么robot除了group_a的用例不执行,其他都执行,并且一个用例可以加多个tags。在版本测试中,可以通过给用例增加tags,比如某个产品有100个用例,1.0版本需要测试的用例都加上1.0的tags,1.1的版本需要测试用例都加上1.1的tags,这样在执行用例时就可以通过tags来区分版本,很方便。

        在setting中可以设置Default Tags和Force Tags。使用这两个配置后可以不用单独给每个用例增加Tags,使用这些配置会让用例增加哪些Tags,请看

        http://robotframework.googlecode.com/hg/doc/userguide/RobotFrameworkUserGuide.html?r=2.8.1#tagging-test-cases

        上述链接中描述了Force Tags,Default Tags和用例自身的Tags是如何并存的。

4.4、pybot

        pybot是robot的执行程序,事实上RIDE执行用例也是利用pybot,所以了解pybot的使用方法很重要。

        最简单的用例执行就是pybot xxx,其中xxx就是robot的资源文件。就像1.2.3中的quickstart.html。使用该命令就可执行测试。通过pybot--help可以看到帮助手册。常用的如--include,--exclude,--argumentfile,--listener,--variable,还可以设置日志输出的路径等,等用户需要使用时可查看帮助

转自:http://blog.csdn.net/yydoraemon/article/details/13847781

免责声明:文章转载自《2小时入门Robot Framework》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Ansible 拷贝文件或目录SqlServer2000连不上下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

软件测试英语专业词汇汇总

  NLV:Nation Language Version  本地化版本 FVT:Functional Verification Testing  功能验证测试 TVT:Translation Verification Testing  翻译验证测试 SVT:System Verification Testing  系统验证测试 fault--故障 在软...

【Python】使用socketserver建立一个异步TCP服务器

概述 这篇文章是讲解如何使用socketserver建立一个异步TCP服务器,其中Python版本为3.5.1。 socketserver主要的类 socketserver模块中的类主要有以下几个:1、BaseServer 包含服务器的核心功能与混合类(mix-in)的钩子功能。这个类主要用于派生,不要直接生成这个类的类对象,可以考虑使用TCPServer...

Jenkins操作手册 巨详细,一篇足矣!

一、持续集成相关概念 1.1、什么是持续集成? 随着软件开发复杂度的不断提高,团队开发成员间如何更好的协同工作以确保软件开发的质量已经成为开发过程中不可回避的问题。尤其是近年来敏捷开发在软件领域越来越火,如何能在不间断变化的需求中快速适应和保证软件的质量显得尤其重要。持续集成正是针对这一问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至...

CodeIgniter连接数据库及快速入门

一、数据库配置 CodeIgniter 有一个配置文件让你存放数据库连接值(username:用户名,password:密码,database name:数据库名,等等..). 该配置文件位于application/config/database.php. 你也可以通过放置不同的database.php文件到特定的环境配置文件夹里来设置特定环境的数据库连接...

python GIL 全局锁,多核cpu下的多线程性能究竟如何?

python GIL 全局锁,多核cpu下的多线程性能究竟如何?GIL全称Global Interpreter Lock GIL是什么? 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可执行代码。有名的编译器例如GCC,...

python字符串与字节序列

python字符串与字节 python3中字节与字符串 python3中只有一种数据类型可以保存文本信息,就是str(字符串),是不可变序列,保存的是unicode码位。在python3中,用bytes对象来处理字节字符串。 bytes和可变的bytearray与str不同,只能用字节作为序列值,即0~256之间的整数表示。 print(bytes([...