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

原文地址:http://blog.sina.com.cn/s/blog_654c6ec701016363.html

  • 出错后退出

   在默认情况下,当一个测试用例中的某个关键字返回错误时,这个测试用例就停止执行剩余的关键字。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层足矣,不然你的用例组织结构就有问题。

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

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

使用RobotFramework的JavaRemoteLibrary

原文地址:http://blog.sina.com.cn/s/blog_654c6ec701015b27.html

终于被迫使用了Java的远程接口库(为了同时使用Java和python的用例库,且为了在pybot下跑速度能快一些),路途比实际想的要坎坷,记录下来。

远程库的原理在前边一篇文章中记录过:

http://blog.sina.com.cn/s/blog_654c6ec70101044p.html

同python版本一样,Java版本也是要搭一个remoteserver。我们先下载它的可执行包。

然后按照网站上的使用说明做了一遍,发现Server起来了,也能连通了。但问题多多。

现成版主要存在3个问题:

1.使用了反射技术,没执行一个关键字都会重新new出一个测试库实例,如果想保持状态(如数据库连接,socket等这样肯定不行。

2.对于相同名字但参数数量不同的重载库函数支持不好。

3.对中文支持不好(这个问题很二,耽误了半天功夫才搞定)。

所以,需要对源码进行一下改造才能真正投入使用。

用SVN 从下面页面找到checkout的 url http://code.google.com/p/jrobotremoteserver/source/checkout

checkout后建立工程,引用刚才下的压缩包里的jar文件。然后就可以调试了。

作者的源码中尝试了2套实现方式,apache的那套半途而废了。所以真正实现的是基于redstone的Server。

真正要修改的也只有org.robotframework.remotelibrary.RemoteServerMethods这个类。

(待续)

Selenium2Library中iframe的操作

原文地址:http://blog.sina.com.cn/s/blog_654c6ec7010149jv.html

使用iframe加载部分网页内容这种用法很常见。我们怎么使用Selenium2Library来操纵通过iframe加载的元素呢?

第一步需要修改Selenium2Library的源代码(它的源代码有问题)

找到,%PythonHome%\Lib\site-packages\Selenium2Library\keywords\_browsermanagement.py

打开它,找到select_frame这个方法。

将代码修改为如下:

def select_frame(self, locator):
       “””Sets frame identified by `locator` as current frame.

       Key attributes for frames are `id` and `name.` See `introduction` for
       details about locating elements.
       “””
       self._info(“Selecting frame ‘%s’.” % locator)
       #element = self._element_find(locator, True, True, tag=’frame’)  #注释掉三行无效代码
       #self._info(“%s” % element)
       #self._current_browser().switch_to_frame(element)        
       self._current_browser().switch_to_frame(locator)  #这一行是新加的

修正这个错误后,我们就能正常使用select frame关键字了。

假设你要测试的页面代码如下:

<Iframe src=“innerFrame.html”id=”innerFrame”;width=“250” height=“200” scrolling=“no” frameborder=“0”></iframe> 

innerFrame.html的代码为:

<html>  

    <head>  

         <title>innerFrame</title>  

    </head>  

    <body>  

         <input id “input”></input>  

    </body>  

</html>  

 

如果想在innerFrame的输入域input进行输入,则可以在关键字中如下写:

select frame    innerFrame

input text      input       你想输入的内容。

想返回父Frame的话,用unselect Frame 这个关键字(unselect frame 直接返回顶层,多层frame调用的话还得用id选)。

参考了2篇文章:

http://sbiigu.iteye.com/blog/195612  这篇对iframe的原理写得不错。

http://lzkyo.iteye.com/blog/446186   这篇代码很全

使用Eclipse开发Robot Framework脚本,使用maven运行

原文地址:http://blog.sina.com.cn/s/blog_654c6ec7010108uv.html

有一位同学做了如下尝试:使用Maven来配置Robot Framework的运行。然后使用maven-eclipse-plugin将Robot Framework的脚本也集成到了Eclipse中。这样一来就可以在Eclipse中直接完成功能测试脚本,并且easy的进行持续集成了。这应该很对开发人员思路:)http://blog.codecentric.de/en/2010/03/robot-framework-fachtests-in-eclipse-entwickeln-und-mit-maven-ausfuhren/

不过,觉得使用RIDE+源代码管理器(SVN,CC等)+持续集成系统(jenkins)这种方式更加适合测试人员进行开发。

使用远程接口库进一步扩展Robot Framework的测试能力

原文地址:http://blog.sina.com.cn/s/blog_654c6ec70101044p.html

引言:

Robot Framework的四层结构已经极大的提高了它的扩展性。我们可以使用它丰富的扩展库来完成大部分测试工作。可是碰到下面两种情况,仅靠四层结构就不好使了:

1.有些复杂的测试可能跨越多个物理机器,且有的测试库也必须部署在被测系统上。

2.一个测试要使用多个库,但是有的只能用jybot运行,有的只能用pybot运行(这种情况很常见)。

远程库接口的原理:

为了解决上述两个难题,Robot Framework提供了远程库接口技术(remote library interface)。

什么是远程库接口技术呢?其实很简单,远程库接口就是把原来的测试库变成了三部分

 一部分我们可以叫他远程库(Remote Library),第二部分叫做远程服务器(Remote Server),第三部分是真正的测试库(Test Library)。 测试库提供真正的测试功能,它被远程服务器包裹起来,通过XML-RPC协议被远程库访问(见下图)。它的实现思路说白了就是设计模式中的Proxy模式。

 

 

 使用远程接口库进一步扩展Robot <wbr>Framework的测试能力

这样做的好处显而易见。远程库只要遵守XML-RPC协议就可以访问远程服务器,远程服务器的实现方式是什么就无关紧要了,这就意味着我们可以使用任何支持XML-RPC的高级语言为RF写扩展库了,查了查资料,几乎所有的高级语言都支持这个古老的简单协议。

使用远程接口库:

如上文所说,RF把原来的测试库分成了远程库、远程服务器、测试库三部分。那么怎样才能把原有的测试库进行改造呢?我们首先得有个Server。目前RF 提供了Python,Ruby,.Net,Java,Perl和Clojure的Server。在这个链接可以下载它们:

http://code.google.com/p/robotframework/wiki/RemoteLibrary

下载到远程服务器后进行包裹工作,然后在RF调用远程库。

下面我使用Python例子来详细说明如何使用远程库。

Ø  下载Server

Python的server实现的非常简单,只有一个文件,几kb大小。

我们可以在这个网址下载它:

http://robotframework.googlecode.com/hg/tools/remoteserver/robotremoteserver.py

Ø  改造测试库

有人会问,不是用proxy模式么?为什么要改造测试库?不是应该改造做proxy的server么?

其实改造谁都行。但是python有一个非常好的特性就是能够根据是直接被调用或者间接被调用动态决定行为。我们利用这一点,就能改造已有的测试库,使它同时能够当做本地库,也能被远程调用。

拿Robotframework的内建String库为例:

首先我们将robotremoteserver.py拷贝到String.py同一目录下,然后打开String库的源代码并在最后加入下面代码:

 

if __name__ == ‘__main__’:

    import sys

    from robotremoteserver import RobotRemoteServer

    RobotRemoteServer(String(), *sys.argv[1:])

 

保存。然后一个远程服务器包裹的String库就好了。

分析一下代码,我们只是实例化了一个远程服务器,并且将String类作为参数传了进去。

其实我们在这里还能设置远程服务器IP和端口号。

if __name__ == ‘__main__’:

    import sys

    from robotremoteserver import RobotRemoteServer

    RobotRemoteServer(String(),’172.22.xx.xx’,’8081’ *sys.argv[1:])

 

如果不设置,也可以在运行这个Server的时候设置。

Ø  运行远程库

在命令行模式进入String.py所在的目录,执行

String.py  172.22.22.42  8081

这时候RF就会告诉你一个包裹着测试库的远程服务器已经被启动了。

Ø  在RF中调用远程库

首先我们要引用Remote Library,引用后就能直接使用了,跟使用本地库没有任何区别。

下面是测试远程String库的脚本。

*** Settings ***

Library           Remote    172.22.22.42:8081    WITH NAME    RString

*** Test Cases ***

TestFetch

   ${str}    Fetchfromleft    I love test    5

脚本中引用了刚才我们建立的远程库,所有远程库的名称都叫做Remote,不同的只是后面的ip地址和端口号,我们也可用WITH NAME 关键字给它起一个别名,这是为了解决多个远程库里有相同关键字的问题(可以使用关键字前加命名空间的方式加以区分)

下面链接是其它高级语言实现的远程库接口的说明,由于原理相似,就不再一一说明了。

JAVA:  http://code.google.com/p/jrobotremoteserver/

Perl:  http://code.google.com/p/plrobotremoteserver/

.NET:   http://code.google.com/p/sharprobotremoteserver/

小结:

利用远程库接口技术,我们几乎可以把所有提供接口的测试工具都粘合起来,外边报个皮就行了。我们也可以用各种高级语言写测试库了。不过值得说明的是,有些 server还不完善,比如Java远程库接口就不能正确的传递Exception,猜测是一些复杂对象不好通过XML-RPC协议进行序列化,感觉这个 可以再包一层皮:)

RobotFramework用户说明书翻译稿-2.2.1

原文地址:http://blog.sina.com.cn/s/blog_654c6ec7010102kx.html

声明:

1.此文档是和重庆同事的共同劳动成果,不是我一个人翻译的。

2.依据RobotFramework2.6.3版本翻译,由于水平有限,时间仓促,难免有错误,请大家不吝指出。

———————————————————————————————

原文链接:

http://robotframework.googlecode.com/hg/doc/userguide/RobotFrameworkUserGuide.html?r=2.6.3#id314

———————————————————————————————–

翻译部分:

2.2.1 测试用例语法

基本语法

测试用例是由测试用例表中有效的关键字构成的。关键字可以从测试函数库或资源文件中导入,也可以在测试用例文件中的关键字表里创建。

测试用例表的第一列为测试用例名。一个测试用例是从某一用例名开始直到下一个用例名出现或者表格已到末端为止的。表头和第一个测试用例之间不能存在任何东西,否则将被认为是错误的。

第二列通常存放的是关键字名。但存在一种特例即:存在变量接收关键字的返回值,当有一个变量或者多个变量用作接收关键字返回值时,关键字写在这些变量后面。不论何种情况,关键字名后面的列都会包含指定关键字合适的参数。

测试用例举例

Test Case

Action

Argument

Argument

Valid Login

Open Login Page

 

 

Input Name

demo

 

Input Password

mode

 

Submit Credentials

 

 

Welcome Page Should Be Open

 

 

 

 

 

Setting Variables

Do Something

first argument

second argument

${value} =

Get Some Value

Should Be Equal

${value}

Expected value

测试用例表设置

测试用例也可以拥有它们自己的设置。与关键字一样,设置名永远在第二列中,且它们的值会紧随在后续的列中。设置名都被方括号包围着,以区别开关键字。下面列出的是可用的设置名,将会在后面的章节进行解释。

[Documentation]

用于标明一个测试用例的文档

[Tags]  

用于标记测试用例

[Setup], [Teardown]

指定测试的创建和销毁。和使用 [Precondition]和[Postcondition]效果相同。 (synonyms的含义是同义词)

[Template]

用于指定模板关键字。这类测试本身将只包含所对应关键字的参数数据。

[Timeout]

用于设置测试用例超时。超时将会在其对应的章节中进行阐述。

包含设置的测试用例举例

Test Case

Action

Argument

Argument

Test With Settings

[Documentation]

Another dummy test

 

[Tags]

dummy

owner-johndoe

Log

Hello, world!

 

在设置表中与测试用例相关的设置

设置表提供以下测试用例相关的设置项。这些测试用例相关的设置基本使用默认值。

Force Tags, Default Tags

标签的强制值和默认值

Test Setup, Test Teardown

测试安装和销毁的默认值,和使用test Precondition和test Postcondition作用相同

Test Template

默认的模板关键字

Test Timeout

测试用例超时的默认值,超时将会在其对应的章节中进行阐述。

2.2.2 使用参数

之前的例子已经表明关键字可以接收不同的参数,这部分将更彻底地讨论这个重要的功能。如何真正实现使用含不同参数的用户关键字和函数库关键字将在其它章节单独介绍。

关键字可以接受零个或多个参数,一些参数可能有自己默认的值。关键字接受哪种参数取决于其如何实现,寻找此信息最好的地方莫过于关键字注释文档。在本节的 例子中,注释文档是由libdoc.Py这个工具生成的,然而相同的信息我们也可以从类似的注释文档工具例如javadoc中生成。

必选参数

大多数关键字通常都有确定数目的参数。在关键字注释文档中,它们是通过在指定的参数之间添加逗号来分隔开的(如 frist,second,third)。在这种情况下参数的名字并不重要,除非需要解释该参数的作用是什么,但重要的是必须保证其参数数目与注释文档中的数目保持一致。使用过少或者过多的参数都会导致错误的发生。

下面的用例从OperatingSystem函数库中调用了Create Directory 和Copy File关键字,参数格式被规定为path和source, destination,这意味着它们分别带了一个参数和两个参数。而最后一个从BuiltIn库中调用的关键字No Operation,不带任何参数。

关键字以及参数命名
Test Case Action Argument Argument
Example Create Directory ${TEMPDIR}/stuff  
Copy File ${CURDIR}/file.txt ${TEMPDIR}/stuff
No Operation    

默认值

带有默认值的参数可以给出也可以不给出。本文档中,参数名和默认值有等号分隔,如name=default value,但是对于Java实现的关键字而言,一个关键字可能有多种实现方法,只是各个方法给出的参数不同。一般参数都可以给出默认值,但是带有默认值 的参数后面不能再有确定位置的参数。(与Python不同,JAVA默认参数的实现需要用到重载机制:一个相同名字的函数,可以通过不同的参数个数区分。 默认参数其实不体现在Java对应函数的参数列表中,而是在程序内实现,可见这个例子,http://stephenxjc.iteye.com/blog/358512 ,这个讲起来有点儿啰嗦,不展开了,有兴趣的同学可以找我进一步讨论。)

下面举例说明如何使用默认值。这个例子使用Create Files关键字,关键字带有参数path、content=、coding=UTF-8编码方式。(调用的时候)如果试图不带参数或者参数超过三个,那么(此关键字方法)都不能成功调用。

带有默认关键字的
Test Case Action Argument Argument Argument
Example Create File ${TEMPDIR}/empty.txt    
Create File ${TEMPDIR}/utf-8.txt Hyvä esimerkki  
Create File ${TEMPDIR}/iso-8859-1.txt Hyvä esimerkki ISO-8859-1

可变个数的参数

关键字可以接受任意个数的参数。参数可以由必须输入的参数和带有默认值的参数组成,但是所谓的可变参数一般要放在最后。通常文档会在这些参数名字前加一个*号,比如*varargs,以示区别。JAVA库的实现依然与之不同。

举例说明Remove FilesJoin Paths关键字分别带有*paths和base参数和*parts参数。前者可带有任意数量参数,而后者则要求至少有一个参数

Keywords with variable number of arguments
Test Case Action Argument Argument Argument
Example Remove Files ${TEMPDIR}/f1.txt ${TEMPDIR}/f2.txt ${TEMPDIR}/f3.txt
@{paths} = Join Paths ${TEMPDIR} f1.txt
f2.txt f3.txt f4.txt

命名参数

当一个关键字接受多于一个有默认值的参数时,只对最后一个参数进行重新赋值是不可能的。例如,一个关键字有三个参数:arg1=a, arg2=b, arg3=c,其中arg1和arg2最终会变成空字符串,而不是它们的默认值。

用位置参数覆盖默认值

Test Case

Action

Argument

Argument

Argument

Positional Arguments

[Documentation]

1st and 2nd

argument get

empty strings

Example Keyword

 

 

value

为了更容易地修改部分有默认值的参数,我们在Robot Framework 2.5中增加了新的语法。有了这些语法,就能通过“argname=value”的格式直接修改参数的默认值。而需要使用默认值的参数就可以不用去理会了。下面的例子使用了与前面例子中一样的关键字来说明这种语法。在这个例子中,未指定的参数将获得他们的默认值。

使用命名参数的关键字

Test Case

Action

Argument

Argument

Argument

Named Arguments

[Documentation]

Not specified

arguments get

default values

Example Keyword

arg3=value

 

 

Example Keyword

arg2=xxx

arg3=yyy

 

当没有参数被排除的时候,命名变量语法也能够很自然接收参数的默认值。相比只给出一个值,这种方法也使得参数的含义更加清晰。尽管用这种方法来命名参数是不可能的。此外,先给出命名参数再给出可变参数是也不可能的。

命名参数功能最大的限制是目前只能用于用户关键字和继承了Python的静态库API、混合库API的关键字库。未来框架可能会支持JAVA库和动态库 API(使用可变参数),在此之前,我们需要用用户关键字来包裹不兼容的关键字(来解决java库和动态库的关键字不支持变参的问题)。

提示:当用户关键字使用命名参数语法时,参数名不能使用${}。例如,用户关键字${arg1}=default, ${arg2}=second必须写作arg2=override。

命名参数语法仅用参数等号前的部分和一个带默认值的参数名相匹配时。这种匹配从给定的参数列表末尾开始直到没有可匹配参数为止。在一些极少数特例中,可以使用“\”规避这种语法,例如nomatch\=here。

提示:命名参数语法对大小写和空格均敏感。前者意味着如果定义一个参数arg,必须写作arg=<value>,Arg=<value> 和ARG=<value>都是不可行的。后者意味着在等号前不能有空格,等号后的空格将被视作默认值的一部分处理。

下面的例子展示了命名参数语法在包括引入测试库等不同场景下的使用方法:

命名参数示例

Setting

Value

Value

Value

Library

Telnet

prompt=$

 

Test Case

Action

Argument

Argument

Argument

Example

Open connection

10.0.0.42

port=${25}

List files

options=-lh

List files

path=/tmp

options=-l

 

Keyword

Action

Argument

Argument

Argument

List files

[Arguments]

${path}=.

${options}=

Execute command

ls ${options} ${path}

嵌入参数的关键字名

另一种完全不同的定义参数的方法是将参数嵌入关键字名。这种语法目前为止只支持用户关键字。

2.2.3 用例名称和文档

测试用例名直接来自于测试用例表:它就是我们在测试用例列里直接输入的内容。测试套件里的测试用例应该有唯一的名称。关于这一点,你也可以用automatic variable的${Test_Name}来指明其测试名称。不管什么时候执行用例都可以这样使用,,包括所有的用户级关键字、测试(setup)装载和测试销毁(teardown)。

Documentation设置允许你可以为测试用例设置自由文本说明。这些文字说明可以显示在命令行输出、测试日志和测试报告中。如果文本说明太长,可以将其拆分到几个单元格中,,文本中间用空格进行连接。可以使用简单的html 格式 和变量,以文档变得更加生动。从Robot Framework 2.1开始,文档中一些不存在的变量被不做改变的直接记录下来。

测试用例文档例子

Test Case

Action

Argument

Argument

Simple

[Documentation]

Simple documentation

 

 

No Operation

 

 

Splitting

[Documentation]

This documentation is a bit longer and

it has been split into several columns.

 

No Operation

 

 

Formatting

[Documentation]

*This is bold*, _this italic_ and

here is a link: http://robotframework.org

 

No Operation

 

 

Variables

[Documentation]

Executed at ${HOST} by ${USER}

 

 

No Operation

 

 

使用用意清晰的用例名称很重要,如果这样通常就不需要用文档关键字做额外的说明了。

如果需要记录测试用例的逻辑,这通常是用例中的关键字需要更好的命名的信号,需要改进这些关键字,而不是增加额外文档。最后要说的是,元数据,如上面例子中的环境和用户信息应该使用标签(tags)来进行定义。

2.2.4给测试用例做标记

在Robot Framework使用标签是一个简单,但是功能强大的测试用例分类机制。标签是自由文本,至少可用于以下用途:

  • 标签在测试报告、日志中显示,当然,在测试数据中标签可以向测试用例提供元数据。用于测试用例的统计(总计、通过的、失败的测试用例都可以通过标签自动统计)。
  • 使用标签,你可以筛选将要被执行的用例。
  • 使用标签,你可以指定哪些是关键用例。

在本节只介绍了如何为用例设置标签,下面列出了不同的设置标签的方法。这些方法能够一起使用。

 

在Setting表中设置 Force Tags

     使用该设置的测试用例文件中的所有测试用例都能获得指定的标签。如果在测试套件的初始化文件中使用该标签,子测试套件的所有测试用例也都获得该标签。

 

在Setting表中设置 默认 Tags

 

没有[Tags]设置的测试用例,将获得Default Tags从Robot Framework的2.5版本开始,测试套件的初始化文件部分将不再支持该设置。

测试用例表中的[Tags]

测试用例经常用到这些标签。此外,它无法获取Default Tags定义的标签,因此它可能是通过使用空值来覆盖Default Tags。从Robot Framework 2.5.6开始,也使用NONE来替代Default Tags。

— settag 命令行选项

所有已执行的测试用例都将获得此标签,原有使用的标签仍然起作用。。

设置标签与删除标签关键字这些内建的关键字能够用于在用例执行过程中修改标签。

标签是自由文本,但它们会被做标准化处理:都会被转换成小写字母且会去掉空格。如果一个测试用例获得多次相同的标签,除第一次以外的都会被删除。标签可以使用变量,假设这些变量存在。

 

Tagging example

Setting

Value

Value

Value

Force Tags

req-42

 

 

Default Tags

owner-john

smoke

 

 

Variable

Value

Value

Value

${HOST}

10.0.1.42

 

 

 

Test Case

Action

Argument

Argument

No own tags

[Documentation]

This test has tags

owner-john, smoke, req-42

 

No Operation

 

 

 

 

 

 

With own tags

[Documentation]

This test has tags

not_ready, owner-mrx, req-42

 

[Tags]

owner-mrx

not_ready

 

No Operation

 

 

 

 

 

 

Own tags with variables

[Documentation]

This test has tags

host-10.0.1.42, req-42

 

[Tags]

host-${HOST}

 

 

No Operation

 

 

 

 

 

 

Empty own tags

[Documentation]

This test has tags

req-42

 

[Tags]

 

 

 

No Operation

 

 

 

 

 

 

Set Tags and Remove Tags Keywords

[Documentation]

This test has tags

mytag, owner-john

 

Set Tags

mytag

 

 

Remove Tags

smoke

req-*

 

基于模型测试的RF用例生成器

原文地址:http://blog.sina.com.cn/s/blog_654c6ec70100zwrj.html

有同学为RF写了一个测试用例生成器。是基于模型测试(model-based)的。

在系统级功能测试层面终于有人做这样的尝试了。会不会能达到类似微软spec-explorer的效果呢?

下面是它的github 网站,还没有仔细研究,有时间要深入看一下:)

https://github.com/mkorpela/RoboMachine

Robot Framework的数据库扩展库2.0出来了(Java版本)

原文地址:http://blog.sina.com.cn/s/blog_654c6ec70100zqv7.html

DataBaseLibrary出来了,增添了一些关键字,并且支持了Remobte方式 (还没有仔细研究)

对比了一下1.0和2.0的关键字,进步不是很大。关键还是不够灵活,比如连表查询,多段数据返回,还是支持的不好。前一段被迫自己扩展了一下:允许自定义SQL,并使用Json格式模拟DataSet的返回,这样就能基本满足一般需要了。它还需要3.0吼吼。

 

贴一下DataBase2.0的地址,有兴趣的同学可以看一下。

发布程序的blog:http://blog.codecentric.de/en/2012/02/database-library-2-0-for-the-robot-framework/

 

在Github上的项目地址:https://github.com/ThomasJaspers/robotframework-dblibrary

 

关键字文档:http://thomasjaspers.github.com/robotframework-dblibrary/DatabaseLibrary_v20.html