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 。一个是地址,一个是端口。然后 printaddr 把 host 和 port 打印出来。
那我们 RF 导入的时候,可以这样声明:
*** Settings ***
Library tlib2.SubLibrary2 localhost 80
*** Test Cases ***
case1
print addr
相当于导入的实例化的时候,就把它加进来了。
还有一点如果这个类和模块文件是同名的,声明的时候就可以简单一点不用先声明这个模块再声明这个类了。比如我这里有个模块名为 tlib2.py
。这里面有个类的名字也叫 tlib2
里面的内容是和 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
总结如下:
- 在 settting 表中 声明 资源文件和变量文件:
路径,目录之间的分割符不用 .
而是用 \
。
- 在 settting 中声明 测试库(python 实现的):
路径,目录之间的分割符,可以用 点.
也可以用 斜杠/
,
路径,目录之间的分割符 用.
后面不加py
,用斜杠后面加.py
网友评论