Robotframework 入门教程(八)


== Custom Library 2==


前面提到引入Library是实例化一个实例,所以构造方法中的参数需要在引入时传递进来。

修改demo.robot如下:

*** Settings ***
Documentation     Example test cases using the keyword-driven testing approach.
Resource          pub.txt
Library           Collections
Library           mylib.py
Library           yourLib.py   init_data
       ......
       ......

Sixth Case
    [Documentation]    custome keyword
    ${sign}    gen_sign    @{list1}
    Log to console    ${sign}
    ${members}    add member    ${var1}
    Log to console    ${members}
    ${members}    add member    LLisisi
    Log to console    ${members}

 
执行robot -t "Sixth Case" demo.robot 

可以看到引入library时传入的参数,通过该类的__init__方法传到了实例变量中members中。

Library的作用域

之前有提到过,*** Settings ***表中关于测试流程的关键字,Suite Setup,Suite Teardown,Test Setup,Test TeardownxUnit框架中setUp和TearDown作用相同,就是在测试套件和测试用例的之前和之后执行一个关键字。修改demo.robot:

*** Settings ***
Documentation     Example test cases using the keyword-driven testing approach.
Suite Setup       add member    suite_data
Test Setup        add member    test_data
Resource          pub.txt
Library           Collections
Library           mylib.py
Library           yourLib.py   init_data
       ......
       ......
Sixth Case
    [Documentation]    custome keyword
    ${sign}    gen_sign    @{list1}
    Log to console    ${sign}
    ${members}    add member    ${var1}
    Log to console    ${members}

Seventh Case
    ${members}    add member    LLisisi
    Log to console    ${members}
 


robot -t "Sixth Case" -t "Seventh Case" demo.robot执行两条case结果

RF默认每条case实例化一个Library,为了case之间保持相对独立避免干扰,所以打印的结果中可以看到,实例化时加入的“init_data”,Test Setup中加入的“test_data”,和case执行过程中加入的“value”或“LLisisi”,而Suite Setup中的数据并没有打印,因为suite中操作的是另外一个实例像我们例子中这样需要在Suite Setup中与case中使用同一个实例,就需要改变Library的作用域。在yourLib中设ROBOT_LIBRARY_SCOPE

的值,支持三个参数:

   TEST CASE:每条case创建一个新的实例,suite setup suite teardown使用一个实例。

   TEST SUITE:每个测试套件创建一个新的实例。

   GLOBAL每次测试执行该Library创建一个实例。

class yourLib(object):
    ROBOT_LIBRARY_SCOPE = 'TEST SUITE'
    def __init__(self, member=None):
        self.members = [member] if member else []

    def add_member(self, name):
        self.members.append(name)
        return self.members
再次执行结果如下:


看到Sixth Case的结果中有suite_data了,同时也应注意因为所有的case公用一个实例,SeventhCase再次调用yourLib的时候,会受到之前case的影响。使用时要注意配置Test Teardown消除case之间的干扰。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值