Robot Framework Python扩展关键字

2019-07-20  本文已影响0人  自如_

Python 模块作为测试库

我们可以创建 Python 模块作为测试库,比如 python 模块叫 MyLibrary,对应的 Python 文件是 MyLibrary.py 。那么测试库名字就是 MyLibrary。定义在 Python 模块文件中的函数,名字前有 _ 前缀的不会作为关键字。

比如下面的代码中 returnlist 会作为关键字,而 _returnlist2 不会

def returnlist():
    return [1,2]

def _returnlist2():
    return [1,2]

这边 _returnlist2 就报错了。

而且 RF 使用关键字的时候,中间可以加上任意的空格,上面 returnlist,下面这样用都可以:

returnlist
return list
ruturn    list

python 模块文件定义好以后,RF 就可以使用它了。要注意的是,要保证其在 Python 模块的搜索路径中,这样 RF 才能找到它。

自己定义关键字名称

如果我们觉得函数名本身比如 returnlist 觉得这个名字不大好听,我们可以自己给库里面的关键字换个名字,比如说 returnlist 我想给它取个名字叫 Hello,就可以导入 Robot API 下面的装饰器 keyword。大家看一下。

from robot.api.deco import keyword #装饰器 zhenzhen

@keyword('Hello')
def returnlist():
    return [1,2]

def _returnlist2():
    return [1,2]

我们用的时候就可以直接写 Hello

*** Settings ***
Library    tlib1

*** Test Cases ***
case1
    ${a}=       Hello
    log to console    ${a}

Python类作为测试库

我们也可以把 python 类名作为 RF 测试库的名字,比如 python 模块叫 tlib2,对应的 python 文件是 tlib2.py。这个模块文件中有个类,名字叫 SubLibrary 。如下所示:

class SubLibrary:
    def returnint(self):
        return 3
    
    def _returnint2(self):
        return 4

那么我们可以将 SubLibrary 作为测试库直接使用。可以在 RF 文件中这样声明

*** Settings ***
Library    tlib2.SubLibrary

*** Test Cases ***
case1
    ${a}=       returnint
    log to console    ${a}
    ${b}=       _returnint2
    log to console    ${b}

同样的,该类中的成员方法,名称前有 _ 前缀的不会作为关键字。比如在这里,returnint 会作为关键字,而 _returnint2 不会。

通过这种以类的方式导入的库,可以提供导入时的参数给用户使用。主要用来提供一些初始化参数。这是通过类的初始化方法来实现的,比如:

class SubLibrary2:
    def __init__(self,host,port):
        self.host = host
        self.port = port

    def printaddr(self):
        logger.console('host:%s,ip:%s' % (self.host,self.port))

这边有一个 SubLibrary2,里面有一个 __init__(self,host,port) 函数,这个就是这个类实例化的时候走到的,它带两个参数一个是 host,一个是 port 。一个是地址,一个是端口。然后 printaddrhostport 打印出来。

那我们 RF 导入的时候,可以这样声明:

*** Settings ***
Library    tlib2.SubLibrary2   localhost  80

*** Test Cases ***
case1
    print addr

相当于导入的实例化的时候,就把它加进来了。

还有一点如果这个类和模块文件是同名的,声明的时候就可以简单一点不用先声明这个模块再声明这个类了。比如我这里有个模块名为 tlib2.py 。这里面有个类的名字也叫 tlib2

image.png

里面的内容是和 SubLibrary2 是一样的,传参的时候传的是 ** host、port**,打印的时候也是 host、port,我们直接就可以导入不用像Library tlib2.SubLibrary2 这个一样,把它俩都写进来了,可以直接只写一个:

*** Settings ***
Library    tlib2  localhost  80
*** Test Cases ***
case1
    print addr

导入的时候直接就写了一个 Library tlib2 传入了参数 localhost 80 。如果类和模块名字一样就可以只写一个。这是一个省略的写法。

python扩展库的搜索规则

完全是按照 python 的模块的搜索规则来的,如果 python 库是在一个包内pylib/login/rightpass.py.

声明的时候,可以在RF文件中像python导入包里面的模块那样的语法,如下.

*** Settings ***
Library    pylib.login.rightpasswd

RF 也支持 下面的格式声明库,搜索路径的写法,后面一定要带上.py

Library  pylib/login/rightpasswd.py

总结如下:

路径,目录之间的分割符不用 . 而是用 \

上一篇 下一篇

猜你喜欢

热点阅读