Robot Framework中对出错用例处理的策略

  • 出错后退出

在默认情况下,当一个测试用例中的某个关键字返回错误时,这个测试用例就停止执行剩余的关键字。RF会继续执行下一个用例。这么做的好处是节省时间--反正这里出问题要返回来看了,再继续执行剩下的关键字也没有用了。

  • 出错后继续执行

但是,有时候,我们却需要执行用例中的所有关键字,例如:要获取更多的出错信息、更改某些全局相关的变量、做teardown或者rollback操作等。这时候,我们就可以使用BuiltIn库中的关键字来让特定关键字出错后RF仍然执行用例中剩余关键字。

第一个关键字是:Run Keyword And Continue On Failure

假设我们有个关键字叫做 Mykeyword

我们这样使用:

 Run Keyword And Continue On Failure  Mykeyword
 Log  这一句被执行

这样,不管Mykeyword这个关键字是否fail,下一个关键字Log都会被执行。

如果Mykeyword有返回值,我们可以这么使用:

 ${str}  Run Keyword And Continue On Failure  Mykeyword
 Log  ${str}  
  • 获取关键字执行结果后继续执行

有时候,我们需要获取某个关键字的执行结果,然后根据结果做不同后续操作,这个时候,我们就会用到关键字Run Keyword And Ignore Error 。假设我们要执行一个关键字Mykeyword,关键字有一个返回值。我们可以如下使用:

 ${result}  ${returnvalue}  Run Keyword And Ignore Error Mykeyword 
 Log  ${result}+${returnvalue}    

Run Keyword And Ignore Error 有2个返回值${result}获取执行结果,值为PASS或者FAIL;${returnvalue}获取Mykeyword的返回值。

  • TestSuit级别出错处理

有些场合,我们想要在整个testsuit执行结束后根据执行结果做一些特殊操作。这时候,我们就用上了下面几个个关键字:

Run Keyword If All Critical Tests Passed

Run Keyword If All Tests Passed

Run Keyword If Any Critical Tests Failed

Run Keyword If Any Tests Failed

Run Keyword If Test Failed

Run Keyword If Test Passed

Run Keyword If Timeout Occurred

这些关键字有些像Java中的Finally语句,但是略有区别,大家可以在使用的时候细细体会。另外要说的是,这些关键字只能被用到Suit Teardown部分(一般会写到一个用户自定义关键字中,被Suit Teardown调用)。他们的含义通过字面我们已经能够理解,格式也跟上边的两个关键字格式一致,就不一一展开介绍了。

  • 题外话
  1. 每个用例只做一件事情是一个好习惯。
  2. 慎用Test setup和test teardown,善用Suit setup 和 Suit teardown
  3. 用户关键字很好,但尽量不要多层嵌套,2层足矣,不然你的用例组织结构就有问题。

2013-09-03修改:关于关键字嵌套。原来上面红色部分说的并不准确。目前我们利用3层结构: 业务层(描述测试点如:登录检测),组件层(业务层描述功能点的实现实现一个功能点最小的步骤,这层尽量不出现技术关键字。如:输入正确用户名密码,输入 错误用户名。。。),实现层(技术关键字:如:inputtext id=uname uname 。。。)

关于分层,其实没很好的定论,有几个原则可以提一下:

1.促进复用。

2.把用例逻辑同具体实现做一定隔离。经过统计,系统演进的时候,功能点本身变更不大,流程细节会有一些变更,UI变更是最大的。分层可以让你少改些东西。

3.让用例更加有可读性。

如果你认为满足了以上三点,分几层无所谓,自己爽才是真的爽。跑题了。

这样利用上述错误处理机制就基本能满足你的要求了。

其实我想找一个关键字:在用例中任意位置,不管上面关键字执行情况如何都会执行,这样更方便,可惜没有,只能规避。享受表格语言接近自然语言的特性,就要忍受它不如高级语言灵活。

时间: 2024-10-11 00:59:15

Robot Framework中对出错用例处理的策略的相关文章

Robot Framework自动化测试第一个用例(二)

RIDE启动界面: 首先创建一个Test project File-New Project ,选择Directory类型 在创建的文件夹上右键,创建一个Test Suite Openbaidu, NEW SUITE,选择ROBOT类型 接下来添加一个Test case到上述Test Suite 点击测试套,在右侧添加Library,如果没有添加Selenium2Library将无法使用其内置封装的关键字 注意大小写敏感 黑色为导入成功,导入的库显示为红色,表示导入的库不存在.参考库不存在排查方法

Robot Framework中DatabaseLibrary应用

DatabaseLibrary: 在RF的官网上,有DatabaseLibrary的下载链接,DatabaseLibrary有2个版本,Python和Java版.本人使用的是Python版本. 1.下载与官网介绍: http://franz-see.github.com/Robotframework-Database-Library/ 安装: Using easy_install:easy_install robotframework-databaselibrary Using pip:   p

robot framework中如何为每个测试用例,测试集准备数据或销毁数据

Suite Setup:在这个测试集的所有测试用例开始测试之前运行(类似于junit的@BeforeClass) Suite Teardown:在这个测试集的所有测试用例结束之后运行(类似于junit的@AfterClass) Test Teardown:在每个测试用例开始测试之后运行(类似于junit的@After) Test Teardown:在每个测试用例结束测试之后运行(类似于junit的@After) 用法: 用在Settings这里 后面直接加你要使用的关键字 如: 如上: Suit

Robot Framework中经常用的第三方库的安装方法

pip升级:python -m pip install --upgrade pip 一.安装robotframework-selenium2library,相当于python中的selenium     cmd>pip install robotframework-selenium2library 二.接口测试request    cmd>pip install requests  (支持第二步,否则RF引入RequestsLibrary库会报错)    cmd>pip install

Robot Framework中的未解之谜

今天在写测试用例的时候偶然发现了一个问题: 一.看脚本逻辑上没有问题,但是在引用变量的时候不能成功引用,脚本截图如下: 这个是关键字A的截图,没有参数. 此时在case中引用${phonesign}和${data}的时候是无法调用的,报错信息是找不到这个参数 解决办法: 在rf中讲要存的值处理为字典,将要使用的值存入.py文件中,存入形式为"k=v(换行)k=v",在应用的时候引入这个.py文件后直接通过变量名字调用.具体处理方法如下: python写文件代码如下:

robot framework中的返回值

1.若想要再setup中有返回值,给后续的操作使用 A)在setup的关键词中需要的返回值,设置为global variable或者suit variable:如下图:但是在编译器中,会报错,但是执行之后会正常输出. 2)在关键词中的返回值,使用[return],使用该关键词,然后给返回值赋值为一个变量,该变量即可使用 3)若需要返回值不止一个,除了方法1中,将所有需要使用的值设置为全局变量之外,可以修改方法2 原文地址:https://www.cnblogs.com/xiaodouzhou-1

Robot Framework常用关键字介绍

下面关键字全部由 Builtin 库提供,Builtin 为 Robot Framework 标准类库.Builtin库提供常用的关键字 1.log log 关键字就是编程语言里的"print"一样,可以打印任何你想打印的内容. 2.定义变量 通过"Set variable"关键字来定义变量 3.连接对象 "Catenate"关键字可以连接多个信息 加上"SEPARATOR="可以对多个连接的信息进行分割. 4.定义列表 通过

Robot Framework自动化测试(二)---元素定位

说明: 不要误认为Robot framework 只是个web UI测试工具,更正确的理解Robot framework是个测试框架,之所以可以拿来做web UI层的自动化是国为我们加入了selenium2的API.比如笔者所处工作中,更多的是拿Robot framework来做数据库的接口测试,当然,需要先将相关的数据库包导入. 那么测试框架的本质是什么?个人觉得有以下几个方面. 1.比较 测试实质就是“比较”,在测试之前需要先写用例,假设经过各种操作之后会得到一个预期的结果,然后,在测试的过

Robot Framework自动化测试---元素定位

不要误认为Robot framework 只是个web UI测试工具,更正确的理解Robot framework是个测试框架,之所以可以拿来做web UI层的自动化是国为我们加入了selenium2的API.比如笔者所处工作中,更多的是拿Robot framework来做数据库的接口测试,当然,需要先将相关的数据库包导入. 那么测试框架的本质是什么?个人觉得有以下几个方面. 1.比较 测试实质就是"比较",在测试之前需要先写用例,假设经过各种操作之后会得到一个预期的结果,然后,在测试的