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

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

  1. import os
  2. import sys
  3. class RobotTest:
  4. def first_keyword(self):
  5. fp = open("/tmp/robot_fk", "a")
  6. fp.write("this is the first keyword\r\n")
  7. fp.close()

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

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

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

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

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

然后添加用例

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

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

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

用例执行:

点击RIDE最上测得按钮如图

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

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

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

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

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

3.3.1.1、Documentation

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

3.3.1.2、Suite Setup

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

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

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

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

Case One Keyword A arg1 arg2  
  Keyword B arg1 arg2 arg3
         
Case Two Keyword C      
  Keyword D arg1 arg2  

两个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执行时会把这些内容打印出来

3.3.2.4、Setup

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

3.3.2.5、Teardown

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

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

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

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

保存后的html样式为

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

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

  1. import os
  2. import sys
  3. class RobotTest:
  4. def first_keyword(self):
  5. fp = open("/tmp/robot_fk", "a")
  6. fp.write("this is the first keyword\r\n")
  7. fp.close()
  8. def plus(self, arg_a, arg_b):
  9. return int(arg_a) + int(arg_b)
  10. def multi(self, arg_a, arg_b, arg_c):
  11. return int(arg_a) * int(arg_b) * int(arg_c)

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

在RIDE中编辑参数的方式为

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

保存后html页面为

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

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

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

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

执行结果如下

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

3.3.3.3、Documentation

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

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

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

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

之后点击运行查看结果。

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包

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

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

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

RunKeyword If ‘${ret}’== ‘abc’ Dosomething arg1

如果不加引号,使用 ${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 step arg2  

使用: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的更多相关文章

  1. Robot Framework 入门教程总结

    Robot Framework 作为一款通用测试框架,可加载多种测试库.驱动多种测试工具,并可对各种自定义脚本进行集成.对于Robot Framework,我准备将其分为 入门--Robot Fram ...

  2. 【转】Robot Framework 快速入门

    目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变 ...

  3. Robot Framework 快速入门

    Robot Framework 快速入门 目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键 ...

  4. Robot Framework(一)入门

    1.1简介 Robot Framework是一个基于Python的,可扩展的关键字驱动的测试自动化框架,用于端到端验收测试和验收测试驱动开发(ATDD).它可用于测试分布式异构应用程序,其中验证需要涉 ...

  5. robot framework 入门

    obot framework 入门 2012-12-23 12:47:16 分类: LINUX     其实我不喜欢动不动就框架,动不动就架构,整出一坨专业术语搞的玄而又玄,让人云山雾绕,我想做的事情 ...

  6. Robot Framework 快速入门_中文版

    目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变 ...

  7. Robot Framework入门学习1 安装部署详解

    安装注意: 目前Robot framework-ride不支持python3,安装时请下载python2.7版本. Robot Framework安装时出现了一点小问题,网上没有找到直接的介绍,现将安 ...

  8. Robot Framework 快速入门_英文版

    Copyright © Nokia Siemens Networks 2008 Licensed under the Apache License, Version 2.0 Table of Cont ...

  9. Robot Framework(1)- 入门介绍

    如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html RF 的介绍 R ...

随机推荐

  1. OC-copy

    一,堆与栈 1,栈区,stack: 后进先出,由编译器自动分配并释放,一般存放函数的参数值.局部变量 2,堆区,heap:先进先出,由程序员分配和释放 3,全局区,静态区:程序结束后由系统释放, 4, ...

  2. 经纬度距离计算Java实现代码

    public class test { private static double rad(double d) { return d * Math.PI / 180.0; } public stati ...

  3. NancyFx中使用自带的IOC容器

    /// <summary> /// Cors扩展 /// </summary> public static class IPipelinesExtensions { /// & ...

  4. [C#]System.Timers.Timer

    摘要 在.Net中有几种定时器,最喜欢用的是System.Timers命名空间下的定时器,使用起来比较简单,作为定时任务,有Quartz.net,但有时候,一个非常简单的任务,不想引入这个定时任务框架 ...

  5. JS URL传递中文参数时出现乱码的处理

    在浏览器中显示的地址是这样的: 但是按F12调试的时候的地址却变化掉了: 这个肯定是是因为浏览器对url路径默认编码了.这个问题是在我们去取值的时候,得到的就是后面那一大串稀奇古怪的东西.得不到我们想 ...

  6. 2015年12月01日 GitHub入门学习(三)GitHub创建仓库

    序:创建自己的GITHub账号,并创建自己第一个仓库,尝试通过msysgit客户端,往仓库提交文件. 一.创建GitHub账户 链接地址:https://github.com/join,很简单,自己创 ...

  7. JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  8. Mac安装OpenCV

    安装过程参考这篇文章Mac平台上OpenCV开发环境搭建 也可以参考文档官网上的安装文档Installation in Linux(不知道为什么没有Installation in Mac...) 我的 ...

  9. Java之异常处理机制

    来源:深入理解java异常处理机制 2.Java异常    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 ...

  10. (二)js下拉菜单

    默认的select标签比较难看,UI比较漂亮,如果想要实现UI上的下拉样式,好像必须用js写select,从网上拷贝而且修改了一个下拉框,为了方便以后引用所以记录下来. /* diy_select * ...