Robot Framework 使用總結


最近項目中使用了開源的自動化測試框架Robot Framework,總結一下,希望對大家有幫助。

安裝

首先,確保系統安裝了python。然后就可以使用pip安裝了:
pip install robotframework
安裝完成后,使用下面的命令查看版本:
robot --version
然后我們可以創建一個簡單的測試腳本:

*** Settings ***
Documentation     Example using the space separated format.
Library           OperatingSystem

*** Variables ***
${MESSAGE}        Hello, world!

*** Test Cases ***
My Test
    [Documentation]    Example test.
    Log    ${MESSAGE}
    My Keyword    ${CURDIR}

Another Test
    Should Be Equal    ${MESSAGE}    Hello, world!

*** Keywords ***
My Keyword
    [Arguments]    ${path}
    Directory Should Exist    ${path}

然后,可以使用robot運行這個測試腳本:
robot helloworld.robot
運行結果如下:

還可以安裝使用IDE工具RIDE,使用這個工具可以很方便地創建自動測試項目,編寫測試腳本。使用pip可以很方便地安裝:

pip install robotframework-ride

字符串操作

Robot Framework字符串拼接需要使用catenate關鍵字,下面的代碼將Hello和World合並

${s}=  catenate   Hello  World

得到的結果是Hello World。如果我們希望中間沒有空格,需要使用SEPARATOR參數:

${s}=  catenate    SEPARATOR=   Hello   World

這樣得到的結果就是HelloWorld。SEPARATOR參數聲明了拼接中的連接字符,下面的代碼輸出結果是Hello|World:

${s}=  catenate    SEPARATOR=|   Hello   World

如果字符串中包含特殊字符,比如#等,需要使用轉義,示例如下:

${k}=    catenate    SEPARATOR=    \#val_    ${key}    \#

使用String庫中的Split String關鍵字可以將字符串分隔,比如v1,v2,v3使用逗號分隔,處理后的結果保存在列表中。使用示例如下:

    FOR    ${str}    IN    @{dic}
        ${ss}=    String.Split String    ${str}    :
        Set To Dictionary    ${data}    ${ss}[0]    ${ss}[1]
    END

這個例子中,傳入參數的鍵和值用冒號分隔,比如:
Name:Jone Age:13
這里使用Split String 將鍵和值分開,保存到字典中。

需要注意的是,使用Split String 關鍵字,需要引用String庫。

測試Web API

使用Robotframework的RequestsLibrary可以很方便地測試Web Api。首先需要安裝RequestLibrary:
pip install robotframework-requests
然后就可編寫測試腳本了。
首先需要聲明使用Library:

*** Settings ***
Library    RequestsLibrary

接下來定義訪問的地址:

*** Variables ***
${HOST}    http://localhost/myapi

然后就可以寫用例了:

*** Test Cases ***
API Test Example
	Create Session    my_session    ${HOST}
	${headers}=    Create Dictionary    Accept=application/json    Content-Type=application/json    charset=utf-8

	# POST request with params
	${data}=    Create dictionary    field1=value1    field2=value2
	${response}=    Post Request    my_session    my-endpoint    headers=${headers}    data=${data}

	Should be equal as strings    ${response.status_code}    200
	Log    ${response} 

這里使用的是POST方法,向api發送的鍵值對定義在data中,這里使用了創建鍵值對字典的關鍵字Create Dictionary。返回的對象定義在變量${response}中,使用Post Request可以執行訪問。

數據庫相關測試

在測試時,我們可以直接訪問數據庫查看數據是否正確,這時可以使用Robot Framework DatabaseLibrary。

首先從https://github.com/franz-see/Robotframework-Database-Library下載,解壓后,執行python setup.py install進行安裝。安裝完成后就可以使用了。

在RIDE中創建一個新的測試,在Library中引入DatabaseLibrary,按F5打開SearchKeywords窗口,選擇DatabaseLibrary,可以列出所有相關的關鍵字:

還需要安裝特定的數據庫訪問模塊,如果訪問sqlserver,可以安裝pymssql:

pip install pymssql

然后就可以寫測試用例了,比如:

*** Settings ***
Library           DatabaseLibrary

*** Test Cases ***
DBTEST
    Connect To Database Using Custom Params    pymssql    database='dbname',user='username',password='pwd',host='localhost'
    Table Must Exist    AUTH_USER_TB
    Disconnect From Database

Database Library中有兩個關鍵字可以用來連接數據庫:
Connect To DataBase 和 Connect To Database Using Custom Params,Connect To DataBase需要聲明參數或者將參數保存在配置文件中,參數如下:

dbapiModuleName=None, dbName=None, dbUsername=None, dbPassword=None, dbHost=localhost, dbPort=5432, dbConfigFile=./resources/db.cfg

這里需要注意,如果沒有顯示聲明dbName、dbUserName、dbPassword、dbHost或者dbPort,都會去指定的配置文件中查找相應的配置項,如果找不到配置文件,就會報錯。配置文件的格式如下:

[default]
dbapiModuleName=pymysqlforexample
dbName=yourdbname
dbUsername=yourusername
dbPassword=yourpassword
dbHost=yourhost
dbPort=yourport

可以使用的關鍵字如下:

  • Check If Exists In Database:參數為select語句,如果有查詢結果,返回ture,否則為false。
  • Check If Not Exists In Database: 與上面的關鍵字結果相反。
  • Delete All Rows From Table:參數為表名,刪除表中所有數據。
  • Description: 參數為select語句,返回為查詢結果字段的描述數組,比如name='id', type_code=1043, display_size=None, internal_size=255, precision=None, scale=None, null_ok=None)。
  • Execute Sql Script: 執行sql腳本,多個sql語句使用分號分隔。
  • Query: 執行查詢語句。
  • Row Count: 返回查詢語句的行數。
  • Row Count Is 0: 返回查詢行數是否為0。
  • Row Count Is Equal To X :返回查詢行數是否為給定的行數X。
  • Row Count Is Greater Than X: 返回查詢行數是否大於給定的行數X。
  • Row Count Is Less Than X: 返回查詢行數是否小於給定的行數X。
  • Table Must Exist: 指定表是否存在。

自定義關鍵字

使用Robotframework對Api接口進行測試,每次測試都需要先登錄,為了減少重復的登錄腳本,使用Robotframework自定義關鍵字簡化登錄過程的腳本。代碼如下:

*** Keywords ***
登錄到平台
    [Arguments]    ${host}    ${username}    ${password}
    Create Session    my_session    ${host}
    ${data}=    Create dictionary    UserName=${username}    Password=${password}
    ${response}=    POST On Session    my_session    url=/api/Account/Login    json=${data}
    Log    ${response}
    [Return]    my_session

為了方便使用,我們使用中文作為關鍵字的名稱。然后定義三個輸入變量,${host}是需要登錄的網址,${username}和${password}是用戶名和密碼。使用POST On Session實現登錄,登錄后返回登錄過程創建的會話。這個關鍵字可以在測試用例中使用,比如:

*** Test Cases ***
TestLogin
    ${mysession}=    登錄到平台    host=${HOST}    username=saleuser1    password=1
    ${datalist}=    Create dictionary    WorkFlow_Name=LeaveApply1
    ${responselist}=    POST On Session    ${mysession}    url=${GetActivateListUrl}    json=${datalist}
    Log    ${responselist}

我們可以將自定義的關鍵字保存在資源文件中,便於在多個測試用例中共用。資源文件的結構與測試文件基本相同,只是沒有測試用例,變量和自定義關鍵字部分完全相同。在測試文件的設置部分引用資源文件,比如:

*** Settings ***
Library           RequestsLibrary
Resource          ../../Resources/flowresources.robot

資源文件的位置相對於當前路徑,路徑中也可以包含變量,比如${RESOURCES}/common.tsv。
如果多個資源文件中包含相同的自定義關鍵字,在使用這些關鍵字時,需要使用資源文件名作為前綴。如果多個資源文件中包含相同的變量,那么先加載的變量起作用。

很多情況下,我們需要自定義關鍵字可以接收多個參數,且參數的個數不確定,這種情況下,可以將參數聲明為列表,使用@修飾符,示例代碼如下:

MultiArguments
    [Arguments]    ${par1}    @{dic}
    Log    ${par1}
    FOR    ${v}    IN    @{dic}
        Log    ${v}
    END

在上面的例子中${par1}是固定參數,后面的@{dic}是可變參數列表,在自定義關鍵字中采用循環處理列表中的參數。調用的示例如下:

MultiArgumetns   para1  u1  u2  u3  u4

為Robotframework開發自定義庫

Robotframework基於Python開發,我們使用Python開發自定義庫,對Robotframework提供擴展。開發和使用都非常簡單,由於python是解釋語言,自定義庫不需要編譯部署等等步驟,使用任何文本編輯器都可以實現。這里通過實現一個簡單的需求說明創建和使用過程。需求很簡單,需要從一個字符串中獲取flowid=后面的值。
首先我們創建一個python文件,代碼如下:

def get_flow_id(url):
    idx = url.index('flowid=')+7
    le = len(url)
    flow_id = url[idx:le]
    return flow_id

然后就可以在robot文件中引用這個庫了,在Settings中增加:

*** Settings ***
Library           ../pylibs/getflowid.py

這里庫的位置相對於當前文件的位置。
在測試用例或者關鍵字中就可以使用自定義庫中定義的新關鍵字了,這里get_flow_id對應的新關鍵字是Get Flow Id,"_"符號被空格替換,並且后面的字符變為大寫。下面是使用的示例:

${fid}    Get Flow Id    ${rurl}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM