当前位置: 代码迷 >> Web前端 >> RFS的web自动抽验收测试――第10讲 用户关键字User Keyword(2)
  详细解决方案

RFS的web自动抽验收测试――第10讲 用户关键字User Keyword(2)

热度:198   发布时间:2012-08-28 12:37:01.0
RFS的web自动化验收测试――第10讲 用户关键字User Keyword(2)

引言:什么是RFS――RobotFramework+Selenium2library,本系列主要介绍web自动化验收测试方面。

( @齐涛-道长 新浪微博)

 

继续介绍User Keyword里面的Teardown和Return Value的内容

 

3、Teardown测试完成回收清理

如果有用过Junit的朋友应该记得Junit的案例一般都是有一个Setup、一个Test、一个Teardown的,同样我们的TestCase也是有这2个的,大家可以自己看一下case的Setting。

那么这个User Keyword的Teardown,作用都是差不多的,如果是Case的Teardown,那么是案例结束的时候做回收清理;而User Keyword的Teardown就是用在调用User Keyword完成之后才会做的数据回收清理。

当然,用于什么可以根据你自己的需求自己调整,并不一定是数据回收清理,是系统关键字或者用户关键字都可以。总之可以理解为关键字完成后还要调一个关键字。参数要用 | 分隔。

我这里改造一下上一篇写的关键字测试,以便于演示Teardown的作用。

改完的效果是先把arg1的值赋给temp,然后把arg2的列表第三项值赋给arg1(这里算个小bug,如果传的参数少于3个就会报错了,这里只是演示,请忽略),然后log打印出arg1和arg2的值。

在Teardown这里我使用了Set Suite Variable方法,把temp的值覆盖arg1,并把arg1设为Suite级别的变量,然后我再case3里调用完关键字测试后又用log打印出arg1的值。(也可以用Set Global Variable,如果不用这2个的话,在case3里是找不到arg1这个变量的)

 

接着我们执行一下案例,看看报告。

如上面所说,首先把arg1的值111赋给了temp,然后又把arg2的第3个值444赋给了arg1,最后再把temp的值赋给arg1。

我这个就算是一种清理吧,让参数的值在关键字内部发生变化,在Teardown的时候把他的值恢复回来。

 

Teardown这里只能写一行语句,如果你要执行多行语句的话,那最好是再专门写一个关键字,然后在Teardown这里调用这个新增的关键字。

 

4、Return Value返回值

这个应该不用怎么解释了,只是说说用法,因为我们传入参数的时候可以用单值变量,也可以用List变量,那么在Return Value的时候也是可以用单值变量和List变量的。

下面分别用一个例子来说明吧。

 

    1)单个单值变量返回

我把arg1放到Return Value里了,因为我挺想看看是先Return还是先Teardown,不过我觉得应该还是先Return,顺便验证一下。

在case3里,我们用一个变量arg5获取这个返回值,然后打印出来。其他的代码都不动。

运行之后,我们看一下日志打印的效果。

看来还是我猜错了,是在Teardown之后才Return的,大家可以看到我标记的地方,是先执行了给arg1赋值111,然后又把这个arg1返回给了arg5,所以arg5的值也是111。我本来还以为应该是444的,所以这里大家也要注意一下。

 

这种单个单值变量返回的是一种比较普遍的,后面几种稍微少见一些,但是也比较有用处。

 

    2)多个单值变量返回

在设置返回值的时候可能大家已经看到了,这里是支持多个变量返回的,也是用 | 分隔的。

      2.1)这里我们继续改造,再增加一个变量的值返回。

 

同样的,我们在case3那里也要做一下相应的修改,当然不修改也可以,这里就会比较自由了。我们先看看不改的。图和上面的case3一样,我们直接看执行的结果。

虽然我们用的是${arg5},但是因为返回了2个值,他自动的转换成了list(这也是下一篇我们会讲的变量互换)。

 

      2.2)那么可能有人觉得这里返回的是list,我们最好用list变量来接收,那么我们把第一个${arg5}改成@{arg5},再运行一下,看看结果

差别基本不大,只是在与${arg5}和@{arg5}的显示不同。

 

      2.3)那么还有一个方式,因为我们知道有2个返回值,所以可以用2个变量来获取值。

接着运行一下,看看日志

这样可以直接使用对应的变量了。

 

上面的3种方式前两种差不多一样,第三种是最好能知道返回值的个数,这样可以一一对应,如果不一样怎么办呢?

A:返回值个数大于取值变量个数。

实际上在2.1里已经有了一个类似的,${arg5}会自动转为list。这是只有一个取值的变量,那么我们试试多个的。

在case3里还是用2个变量取值,运行一下看看结果。

他会先把第一个值给了arg5,然后把后面的值给了arg6,于是arg6变成了list变量。

所以可以得出结论,对于多个取值变量的个数少于返回值的个数,他会先把前面的值一一对应的给前面的取值变量赋值,这些变量仍然是单值变量,而最后一个变量会转成list变量接收剩下的值。

 

B:返回值个数小于取值变量个数。

我们把return value改成只有一个${arg1},然后运行一下,看看结果。

这种就会报错了,因为只传回来一个值,而这里期待的是多个值,list-like的像list的变量。

 

因此,知道返回值的个数比较重要,如果不确定返回值的个数,如同接下来的那种情况,最好使用list变量或单个变量来取值,避免出现返回值个数少于取值变量个数的情况

 

    3)list变量返回

因为list变量本身就是不确定有多少个成员,所以对于这种返回值,最好使用list变量或单个变量来取值(即2.1和2.2的用法)。那么返回值里返回1个list还是多个list都无所谓了,因为他还会组装成一个大的list。

稍微改造一个复杂的:

返回值里我们放了一个list变量加上一个单值变量再加上一个list变量,而在case3里的取值就用1个变量就可以了。

最后运行一下,查看结果。

 

好了,这一讲的内容就到这里了,至此已经把User Keyword里重要的内容都介绍了,或许还有更多好的用法等待大家去挖掘。

这两篇里大家也看到了很多和list变量有关的内容,那么下一讲就是重点介绍List变量及其用法了。

  相关解决方案