robotframework安装包_Robot Framework零基础入门教程

04befe7a1d1c132f85afe766c9938eac.png
原作者:逆之時間軸
原出处:CSDN
原文链接: https:// blog.csdn.net/yydoraemo n/article/details/13847781
版权声明:本文为博主原创文章,转载请附上博文链接!

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文件夹,然后确定。

b837ce550683ad1ba15698e07f753536.png

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

import os
import sys
class RobotTest:
def first_keyword(self):
fp = open("/tmp/robot_fk", "a")
fp.write("this is the first keywordrn")
fp.close()

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

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

17a594c6b57193ddb287bc02702d8a7f.png

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

2ecf985a7a8443afb961de3131506939.png

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

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

96eefa90e4965ef0b4613e35247dadf3.png

然后添加用例

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

5bcaacabd09320573ac8b77b5213f51f.png

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

eb6a22f1a2fef9646cda63849d13924f.png

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

用例执行:

点击RIDE最上测得按钮如图

ef8006035ce37a27acda137841c39dbd.png

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

c2bb2eb0dfc996dab20b798c038db373.png

之后进入/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的格式

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

c8a3ccbd210dc4e3fcc48797303be431.png

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

2b842ae486823a225aeab6b4cdf29285.png

如果使用其他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打开可看到较多配置

9c25437131fc3b530ef8f204b0466dcd.png

3.3.1.1、Documentation

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

459789ae8abe941fcf175cf9cc2ceeb4.png

3.3.1.2、Suite Setup

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

0cdaf331027d7bbbc9f9a41806eaa63c.png

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输入的时间自动会转成如下形式

3bb1fe7575a956cdaf2133465015a8ba.png

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、编写方法

045649ac11119016f8625da5439520cd.png

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

1965953ff909ed31589300a78e49888f.png

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

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

Cases。所以一般的用例的形式通常为:

ae375925ee49728c50bb902991c858be.png

3.3.3.2、变量

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

变量的定义方式为${变量名},通过该方式可定义变量,并给变量赋值,和作为参数传入。举个例子,定义个测试用例名为var case,并且有两个关键字第一个为get

var,有1个返回值,没有输入参数,功能获取var的值。另一个关键字为set var,有1个输入参数,没有返回值,功能设置var值。Var

case的步骤先调用get var获取var然后调用set var并传入该值。如下:

9abeb840d6aab85268aa67bb0c373a19.png

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

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

3.3.2.3、Documentition

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

998dc63047653c332d9495f9b34dff65.png

3.3.2.4、Setup

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

2d6f0eab387863a9cd4c8e9a3d5bf808.png

3.3.2.5、Teardown

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

5bf8daf30500ed65bb8bd6155ed53903.png

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表格样式如下

7427c5968b20d84e15ce2b174355c595.png

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

bd5e7db7a1ab2463708dab716a3dfccf.png

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

2bf6ef0347fe546cfa535b18e9d142ae.png

保存后的html样式为

6e7835f5475430fae5a141bbff1f36ff.png

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

ed3cca343a631b233e29d9637fc615e0.png

编辑完成执行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添加如下代码

import os
import sys
class RobotTest:
def first_keyword(self):
fp = open("/tmp/robot_fk", "a")
fp.write("this is the first keywordrn")
fp.close()
def plus(self, arg_a, arg_b):
return int(arg_a) + int(arg_b)
def multi(self, arg_a, arg_b, arg_c):
return int(arg_a) * int(arg_b) * int(arg_c)

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

0c27acfac29bad853a8a6fadc2f5f24b.png

在RIDE中编辑参数的方式为

27b5c79f1ad8002351ca40903a950f3b.png

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

49b4852a242dedabf3260bc138b531fe.png

保存后html页面为

33d206bbe8ce3cea0510b6634c01c04b.png

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

7eda19e35258e0c858c34f7981aea035.png

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

55a96483e8f431542f41252eb72a2805.png

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

b7938c8b33ea9c0afc09e077cc791ced.png

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

07377fd21c4c8d898308089692afe56c.png

执行结果如下

743688123fdf34fd9645d7a3c16d24c7.png

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

3.3.3.3、Documentation

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

bcd4fd009d565df664c8a3cd73d6f959.png

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,然后给变量命名并设置默认

6861f01ae1ad0e2af7d581e6eb3fc46c.png

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

8bbcad8fd76e1cdbef09da6c21cd9b94.png

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

5c662427d4c6f632edcd695640f5e934.png

编辑搜图

请点击输入图片描述

之后点击运行查看结果。

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包

613187cb9c7e0c887bfecc19813fb312.png

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

268c329c0774e27ac3d91f512ca576f9.png

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

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

12846acc407c4c54ecd91a8f855d4ab9.png

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

4.2、循环

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

01040d1486e304abf3aab47995da1598.png

使用: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,还可以设置日志输出的路径等,等用户需要使用时可查看帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值