1、自定義的庫
創(chuàng)新互聯(lián)建站是一家專注于成都網(wǎng)站制作、成都做網(wǎng)站與策劃設(shè)計,福鼎網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:福鼎等地區(qū)。福鼎做網(wǎng)站價格咨詢:18982081108
2、使用自定義庫
類或者模塊的形式。
模塊名稱 = 庫名。
模塊名稱和類名保持一致 = 庫名
如果是類:ROBOT_LIBRARY_SCOPE = "GLOBAL"
使用:
Library 庫名-相對路徑
按照其他庫的關(guān)鍵字調(diào)用方式一樣。
創(chuàng)建測試庫類/模塊
靜態(tài)(Static)API
最簡單的辦法是實現(xiàn)一個模塊(用Python),或者類(用Python或Java),其中的方法(methods)直接映射為關(guān)鍵字名稱。關(guān)鍵字接受和方法相同的參數(shù)。
創(chuàng)建測試庫類或模塊
測試庫的實現(xiàn)可以是Python模塊,也可以是Python或Java類。
如果是Python模塊,使用 all? =['函數(shù)名稱']來指定哪些函數(shù)是你想要被RF識別為關(guān)鍵字的。
參看RF自帶庫DateTime
python類的可參看String庫、seleniumLibrary庫等。
通過屬性ROBOT_LIBRARY_SCOPE來控制
這個屬性是一個字符串,可以有以下三種取值:
TEST CASE
為每個測試用例創(chuàng)建新的實例。如果有suite setup和suite teardown的話,同樣也會新建。這是默認(rèn)行
TEST SUITE
為每個測試集創(chuàng)建新的實例,最底層的測試集,也就是有測試用例文件組成的測試集,擁有屬于自己的測試庫實例,高層的測試集,都有屬于自己的測試庫實例。
GLOBAL(最常用)
整個測試執(zhí)行過程中只有一個實例被創(chuàng)建。所有的測試集合測試用例共享這個實例。通過模塊創(chuàng)建的測試庫都是全局的。
注解
如果一個測試庫被導(dǎo)入多次,每次使用不同的參數(shù),則不管有沒有定義作用域,每次都會新建一個實例。
如果是命令行的,一般是捕獲ctrl-c事件吧。importsignalimportsysdefsignal_handler(signal,frame):print('YoupressedCtrl+C!')sys.exit(0)signal.signal(signal.SIGINT,signal_handler)print('PressCtrl+C')signal.pause()
Variable表中聲明變量
資源文件里面創(chuàng)建變量
和套件文件中的用戶關(guān)鍵字一樣,套件文件中的變量表里面的變量,其作用范圍只是該套件文件。我們可以定義在資源文件中。資源文件變量的定義,和上述測試套件文件中幾乎一樣,我們只需拷貝Variables表到資源文件中即可,注意資源文件中不可存在*** Test Cases ***測試用例。
rc.robot 資源文件
test.robot 測試套件
變量文件
也可以使用python模塊文件提供公共變量給RF使用。只需要直接定義變量就可以了
語法完全就是python 例如:
變量文件聲明的時候,可以使用絕對路徑,也可以使用相對路徑。使用相對路徑的時候,RF搜索變量文件規(guī)則和搜索資源文件搜索規(guī)則一樣:
首先在當(dāng)前文件的目錄匹配收縮,如果找不到,就在Python的模塊搜索路徑中搜索
上面的*** Settings ***變量文件路徑是這樣寫的 Variables ./rf/rc.py
是因為rc.py所處的路徑是這樣的,如下圖
但是這樣不好的地方是:
每個RF文件的路徑不一樣,導(dǎo)致每個RF文件導(dǎo)入變量文件的寫法都不同,而且一旦移動了目錄,就要修改里面的寫法,比如
Variables ./rf/rf/rc.py
一種推薦的做法就是統(tǒng)一相對于項目根目錄,假設(shè)項目根目錄是rf,就需要像下面這樣
也可以在命令行參數(shù)中直接指定變量文件,就可以不用在RF中聲明了
擴(kuò)展關(guān)鍵字
使用python測試庫,模塊文件名就是測試庫的名字
定義在python模塊中的函數(shù),名稱前有_前綴的不會作為關(guān)鍵字。
Python模塊定義好以后,RF就可以使用它了,我們可以這樣使用上面定義的測試庫,要注意的是,要保證其在Python模塊的搜索路徑中,這樣RF才能找到它
RF在使用關(guān)鍵字的時候,中間可以加上任意的空格,并且大小寫也可以任意
自己定義關(guān)鍵字名字 _hehe不會作為關(guān)鍵字被rf使用
python類作為測試庫
tlib2.py
庫的搜索規(guī)則
RF搜索庫完全是按照python的模塊的搜索規(guī)則來的
如果python庫是在一個包中,比如
pylib/login/rightpass.py
聲明的時候,可以在RF文件像python導(dǎo)入包里面的模塊那樣的語法,如下
*** Settings ***
Library pylib/login/rightpasswd.py
如果導(dǎo)入的庫中存在模塊的引入,引入的模塊要以加入pythonpath的路徑來寫否則會報錯
如果存在繼承的情況,只要導(dǎo)入子類就可使用父類的方法,要注意模塊導(dǎo)入時的路徑。
父類
子類
robot用例
總結(jié)如下:
1.在settings中聲明資源文件和變量文件:
路徑,目錄之間的分隔符用斜杠 / 而不是點 .
2.在settings中聲明測試庫:
路徑,目錄之間的分隔符,可以用點 . 也可以用斜杠 /
路徑,目錄之間的分隔符用點后面不加py,用斜杠后面加.py
關(guān)鍵字的使用
RF的能力是由關(guān)鍵字提供的,所以我們必須對RF的常用關(guān)鍵字有個了解,這樣才能把RF用好
常用的RF關(guān)鍵字就在RF的標(biāo)準(zhǔn)庫中
關(guān)鍵字參數(shù)
第一列是關(guān)鍵字的名稱
第2列是關(guān)鍵字的參數(shù)
常用關(guān)鍵字
set variable 只支持賦值一個字符串給變量,如果我們想賦值一個整數(shù),或者浮點數(shù),需要用Convert To integer Convert To Number
如果我們想把一個數(shù)字作為關(guān)鍵字的參數(shù),可以使用數(shù)字變量
Should be true 與python兩個區(qū)別:
1.變量前面加個$符號
2.不能中間有多于兩個空格
認(rèn)識測試庫
通常,關(guān)鍵字是由測試哭提供的。其實測試庫就是python模塊文件。
關(guān)鍵字就是python庫里面的函數(shù)和類的方法。
RF本事就是python程序,所以它的尋找?guī)煳募脑砗蚿ython是一樣的。最終是通過sys.path
我們在哪個目錄下面運行robot,哪個目錄就是當(dāng)前工作目錄當(dāng)前工作目錄就是在sys.path里面的。所以我們房子啊當(dāng)前目錄下面的python模塊文件,直接就能被找到
RF腳本使用函數(shù)名、方法名、大小寫不敏感
庫的導(dǎo)入
要使用測試哭提供的關(guān)鍵字,我們必須要聲明導(dǎo)入庫當(dāng)然一個特例:除了RF的builtin庫的關(guān)鍵字,不需要聲明。
庫的名稱在RF里面是大小寫敏感的。
有的庫,在導(dǎo)入的時候,可以提供參數(shù),比如SeleniumLIbrary
importing 鏈接,點開,有參數(shù)就是導(dǎo)入可以設(shè)置的參數(shù)
timeout=5.0
run_on_faullure=Capture Page Screenshot
screenshot_root_directory=None
其實這些導(dǎo)入時帶參數(shù)的庫,對應(yīng)的測試庫都是用類實現(xiàn)的
這些參數(shù)就是類的初始化方法init里面的參數(shù)
變量的用法
RF中的變量,實質(zhì)上就是一個python變量,他只想一個python對象。
所以RF的變量對應(yīng)的是什么Python對象,他就是什么類型的對象
循環(huán)
RF用:FOR來實現(xiàn)循環(huán),沒有while循環(huán)
對應(yīng)的文檔解釋在這里
:FOR \ 為舊語法 、
FOR END為新語法
range用法
python中,我們常常用到range方法,RF也有類似的支持