rf调用的python函数报错_Robot Framework(15)- 扩展关键字

如果你还想从头学起Robot Framework,可以看看这个系列的文章哦!

前言

什么是扩展关键字?就是你自己写的 Python 文件,里面包含了函数或者类

然后 RF 导入这个 Python 模块,就可以调用函数或者类方法,它们就是扩展关键字

Python 模块作为测试库

模块文件名作为测试库的名字

比如:Python 模块名叫 MyLibrary,文件名是 MyLibrary.py,那么测试库的名字就叫做 MyLibrary

Python 模块和 Robot 文件同目录下的栗子

这是目录结构哈

python 模块的代码

defreturnlist():return [i for i in range(10)]defreturn_dict():return {"a": "hahhahahaahah"}#以下划线开头的函数不能作为RF关键字

def_returnlist2():return [1, 2]

robot 代码

进入test目录下,运行以下命令

robot -P . test.robot

执行结果

知识点

_前缀的方法不会作为关键字,在Python里面, _ 开头的方法是私有方法,RF 不会识别到它

Python 方法作为关键字也是大小写不敏感的

RF 中会把关键字的 _ 和单个空格忽略掉,所以 returndict、return dict、return_dict 都是调用同一个关键字

Python 类作为测试库的栗子

项目目录

所有 Python 测试代码都在 tlib2.py 里面哦

最终运行是在【15_扩展关键字】目录下运行的,命令如下

robot -P . testrf

栗子一:类初始化不需要传参

python 代码

classSubLibrary:def __init__(self):pass

defreturnint(self):return 2020

def_returnint2(self):return 4

robot 代码

测试结果

知识点

在类里面, _ 前缀的方法不会当做关键字

同样,类中声明的方法当做关键字的话,大小写不敏感

栗子二:类初始化需要传参

python 代码

from robot.api importloggerclassSubLibrary2:def __init__(self, host, port, table='test'):

self.host=host

self.port=port

self.table=tabledefprintaddr2(self):

logger.console('host:%s,port:%s,table:%s' % (self.host, self.port, self.table))

robot 代码

测试结果

知识点

如果类的 __init__ 初始化方法需要传参,则在导入库后面跟对应的参数列表

拓展 Python 知识点:先有类对象,还是先执行类初始化方法?

__new__ 方法产生对象

__init__ 对象的初始化方法

先 new 一个对象,再 init 一个对象

栗子三:类名和模块名相同

python 代码

from robot.api importloggerclasstlib2:def __init__(self, host, port):

self.host=host

self.port=portdefprintaddr(self):

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

robot 代码

测试结果

知识点

如果类名和模块名相同,可以不用导入类名

栗子四:使用路径法导入 Python 模块

Python 代码用的还是栗子三的

robot 代码

测试结果

知识点

如果用路径法,需要注意导入 Python 模块需要有文件后缀哦,且用 / 来表示目录下

重点:使用路径法,只能导入和模块名相同的类名!

Python 扩展库的搜索规则

统一的规则

先根据 robot 文件自身当前目录下查找库文件

如果没有找到则再根据 --pythonpath 和 -P 提供的搜索路径进行搜索

最后找 Python 安装的路径

Python 库引入了其他模块

背景

当 robot 文件导入的 Python 测试库引入了其他模块时,应该怎么写导入路径?

正确写法

确保导入的模块路径和RF导入的模块起始路径统一

看栗子

testother.robot  导入 test.py 模块, test.py  模块引入了 login.py 模块的方法

目录结构

login.py 代码

from robot.api importloggerdeflogin_test():

logger.console('test login')

test.py 代码

from pylib.login importlogin_test#from login import login_test 报错

deftest():

login_test()

robot 的代码

在 othertest 目录下运行下面命令

robot -P . testother.robot

测试结果

结论

可以看到 robot 文件引入的路径是 pylib 开头, test 模块引入 login 模块的路径也是 pylib 开头

如果路径是 login 开头导入,那么运行robot文件将会报错(如下图,包含了解析错误)

Python 库中的 class 存在继承

背景

当 robot 文件导入 Python 测试库的类继承了另一个类,应该怎么写导入路径?

正确写法

确保导入的模块路径和RF导入的模块起始路径统一

使用的时候 RF 文件只需导入子类即可

看栗子

test.robot 引入了 other.py  模块下的 Child 类,而 Child 类继承了 Base.py 模块下的 Father 类

目录结构

base.py 的代码

from robot.libraries.BuiltIn importloggerclassFather:def __init__(self):

logger.console('init Father')defmoney(self):return '$10000'

other.py 的代码

from robot.api importloggerfrom pylib.Base importFatherclassChild(Father):def __init__(self):

Father.__init__(self)

logger.console('init Child')defuse_money(self):returnself.money()defmake_money(self):return '$9999'

robot 的代码

在 testClass 目录下运行下面命令

robot -P . test.robot

测试结果

文章来源: www.cnblogs.com,作者:小菠萝测试笔记,版权归原作者所有,如需转载,请联系作者。

原文链接:https://www.cnblogs.com/poloyy/p/12989402.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值