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
總結
以上是生活随笔為你收集整理的rf调用的python函数报错_Robot Framework(15)- 扩展关键字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 主板和机箱的螺丝_铝镁合金外壳,双侧透设
- 下一篇: centos 删除crontab_cen