Python3.7+Robot Framework安裝使用教程

一、說明

Python3----網上很多文章都是用Python2,Robot Framework的部分文檔沒更新也直接寫着不支持Python3(如RIDE does not yet support Python 3),但事實上Robot Framework下的所有項目的最新版本都是支持Python3.6+了的,反倒是Python2以後不久可能就不支持了(如RIDE 1.7.4 THIS IS THE LAST RELEASE SUPPORTING PYTHON 2.7)。

Robot Framework----Robot Framework是一個開源的自動化框架。更本質一點就是可以把你編寫好的函數導出來,然後像寫存儲過程一樣寫代碼,達到降低難度的目的。比如你在python文件中寫好了一個函數login_system(username,password),然後Robot Framework就可以導出爲Login System,別人寫腳本時就可以寫成Login System username password。

RIDE----RIDE是使用wxPython庫編寫的Robot Framework的圖形界面。Robot Framework的使用者仍是程序員,而代碼本就是程序員所寫的現在又要多封裝一層多學一套語法不僅沒有降低難度反而增加了工作量。所以僅就Robot Framework而言個人覺得沒什麼值得稱道的地方,加上RIDE有了圖形界面則可以算一套工程化的管理工具,所以一般講Robot Framework其實也是講通過RIDE使用的方式。

 

二、安裝

Robot Framework github地址:https://github.com/robotframework/robotframework

RIDE github地址:https://github.com/robotframework/RIDE

安裝方法千千萬,pip大法最簡單。直接使用pip安裝ride就可以了,Robot Framework、wxPython等依賴庫都會自動安裝好。

pip install robotframework-ride

進入自己當前python環境的Scripts目錄(比如我這裏是F:\PyChram\robot\Scripts)使用以下命令啓動ride:

python ride.py

啓動後界面如下,常規的一個窗口程序界面。

 

三、使用

我們說ride是一個簡單的小工具,就不一個個菜單一個個功能地介紹了,直接說它一般怎麼用。

我們前面說Robot Framework的功能就是把代碼文件中的函數抽象成所謂的關鍵字,我們直接看這主要功能如何實現。

 

3.1 準備好代碼文件

將以下代碼使存到桌面,並命名爲test_lib.py

複製代碼

import urllib.request

def get_url_source_code(url):
    """這個函數的功能是獲取傳來的url頁面的代碼並打印
        url----形如https://www.baidu.com"""
    request_obj=urllib.request.Request(url)
    response_obj=urllib.request.urlopen(request_obj)
    html_source_code=response_obj.read().decode('utf-8')
    print(html_source_code)

# 這個main只是用於運行演示,作爲Robot Framework的庫是不需要的
if __name__ == "__main__":
    url = "https://www.baidu.com"
    get_url_source_code(url)

複製代碼

我們先看一下直接運行的結果,在main中傳入的百度的url,然後打印出返回的頁面的代碼。

 

3.2 新建項目及測試用例

主菜單----File----New Project

主要是填寫項目名稱(比如我這裏是test),其他默認即可。Type/Format這種東西無非是存放格式的區別不必太在意。

 

在新建的項目上鼠標右鍵---New Test Case---輸入測試用例(我這裏是testCase1)名稱點擊OK。

經以上步驟項目和測試用例都已創建好,當前界面如下:

 

3.3 導入自定義庫函數

對我們這裏頁言,自定義庫就是前面的test_lib.py,庫含數就是其中的get_url_source_code。

左側窗格選中項目,右側窗格選中Edit選項卡,點擊Library按鈕

 通過Browse選中我們的test_lib.py,其他不用填,點擊OK。

回到主窗口上可以看到導入了一個庫(如果呈紅色說明導入報錯,一般是腳本代碼有問題,可藉助cmd窗口的輸出進行定位)

在上邊界面中使用F5鍵,喚出關鍵字搜索對話框,Source中下拉選中test_lib。

如無意外,可以看到如下圖我們腳本中的get_url_source_code被抽取成了Get Url Source Code關鍵字,註釋這些也都有展現在上面(url那行沒換行是\n和\r\n的問題)。

 

3.4 使用自定義庫函數

經過前面幾步我們已經將自己寫的函數導入了進來,下來看如何調用,這步也是Robot Framework(或者RIDE)的主要用法。

回到主窗口,左側窗口選中測試用例,右側窗口選中Edit選項卡,界面如下。

測試用例就真的是測試用例,其中的1、2、3、4、5就是測試步驟,其中第一列是關鍵字(即本質上的函數),其後各列用於輸入參數。

我們輸入我們要使用的關鍵字“Get Url Source Code”(可使用Ctrl+Alt+Space獲取補全提示),此時界面如下圖。

一列爲粉紅底色,表示需要一個參數;其餘後續列爲灰色表示不使用(但如果想的話可以把自己的註釋寫在這些灰色格子上)。

我們把參數設置成“https://www.baidu.com”,此時再看界面如下,白色底表明填寫上沒有錯誤。

如果自己的測試用例後續還有各步,就繼續在2、3、4、5那些行繼續寫下去即可。

 

3.5 運行測試用例及查看其報告

運行很簡單,左側窗格鉤選要運行的測試用例,右側窗格切換到Run選項卡,點擊Start按鈕。

底部窗格的輸出其實就只是我們在get_url_source_code函數中的打印。

點擊Report和Log按鈕查看生成的報告,可以看到主要仍舊只是把打印記錄到文件裏。

 

四、一些相關性問題討論

4.1 很多教程都介紹SeleniumLibrary到底在介紹什麼?

可以看到網上很多教程不是像我們上邊介紹如何導入和使用自己的代碼,而是介紹安裝SeleniumLibrary的庫(舊版叫Selenium2Library現已遷移到SeleniumLibrary,Selenium2Library仍可安裝但事實上仍是引用SeleniumLibrary),然後使用裏邊的Open Browser關鍵字(函數)使用瀏覽器打開某個網頁(例如百度首頁)。

安裝直接使用pip安裝即可:

pip install robotframework-seleniumlibrary

導入時教程都會說直接輸入SeleniumLibrary即可,而不像我們前面3.3說的那樣得點擊“Browse”選擇具體的文件。

這並不是什麼玄學,只要輸入名字RIDE就能自動把庫導進去了,實際上如果RIDE看到輸入的只是一個名字而不是路徑,就會到當前啓動ride所用python的Lib/site-packages目錄下尋找同名文件夾導入。

也就是說很多教程中SeleniumLibrary的例子,其作用就只是演示如何導入第三方庫;而實際上導入第三方庫是沒多大用,很多人都介紹個人感覺只是人云亦云的行爲。

因爲如果是程序員那肯定願意直接寫代碼而不是RIDE來調用庫;而如果是一般的維護人員,一般也只會導入自己企業的針對自己業務寫好庫其他第三方庫他也不會用;再則除非SeleniumLibrary這種針對Robot Framework寫好的庫,不然很多第三方庫(比如requests/scapy等)的方法是封裝於類中的,並不能抽取成關鍵字。

 

4.2 如何導入類中的方法?

在前面3.3小節中我們導入的是直接定義的方法get_url_source_code,在上面一小節最後我們又說類中的方法不能直接被RIDE抽取成關鍵字。

那麼類中的方法到底能不能被抽取成關鍵字呢,不能的話是因爲什麼,能的話該如何操作?

首先可以肯定類中的方法不能直接抽取成關鍵字但確實可以間接抽取成關鍵字的,比如我們前面提到的SeleniumLibrary的Open Browser本身就是一個類中的方法。

 

不能直接抽取的原因也在上圖中展示了,那就是類的方法總要有一個參數self,如果直接抽取出來self這個參數不知道該傳什麼。

SeleniumLibrary中的做法是使用一個@keyword註解,然後在其他地方又做了一些處理。這裏我並沒有研究得很清楚,即怎麼導入類中的方法暫時還不知道。

 

4.3 Resource是什麼?

在Library按鈕的下方有一個Resource按鈕,這個Resource是什麼,和Library有什麼區別?

左側窗格選中項目Test,然後點擊New User Keyword。我這裏填入“Get Baidu Index Source Code”

左側窗格選中剛建的Resource,右側窗格一樣是寫獲取百度首頁的代碼。

此時我們再新建一個測試用例,可以看到可以直接使用“Get Baidu Index Source Code”關鍵字

所以到這就清楚了,資源就是已有關鍵字組合成的新的關鍵字。我們再來具體看一下在文件上到底長什麼樣,右側窗格切換到Text Edit選項卡。

*** Keywords ***節區(包括該行)單獨複製出來保存成文件就是Resource File了(如比testResource.txt),長這樣的文件就可以通過Resource按鈕導入到RIDE中了。

另外在左側窗格還可以看到一個External Resources的東西,這部分的Resource是和項目無關的,添加到這裏的Resource即便新建了一個項目還是會列在那裏;而通過Resource導入的Resource只能在當前項目中使用。

不過External Resources並不會自動導入到新建項目的,而是每個項目都得再通過Resource按鈕再導入一遍才能使用,感覺這是一個External Resources的實現Bug。

 

4.4 數據驅動是什麼?

聽說RIDE右下方的Metadate還能數據驅動的功能,“數據驅動”這麼高大上的名字沒聽說過搞得自己都慌了,趕緊研究一番。

然後看了半天,所謂數據驅動就是把測試載荷全寫到文件中使用時從文件遍歷載荷;而具體到RIDE中,就是可以讓你加幾個變量,然後在編寫testCase時可以使用這些變量。

一如動輒AI、大數據,我總覺現在搞計算機的越來越博(會)學(吹)多(牛)識(逼),一個司空見慣的東西都能給換個這麼有文采的名字,完後還能靠個名字加東拉西扯把人給唬得一愣一愣的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章