最近專案中使用了開源的自動化測驗框架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=https://www.cnblogs.com/zhenl/p/${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}
本文來自博客園,作者:尋找無名的特質,轉載請注明原文鏈接:https://www.cnblogs.com/zhenl/p/15786035.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/412931.html
標籤:其他
下一篇:性能測驗-將現網流量轉化成并發數
