robotframework接口自動化


 

robot framework框架在測試接口上比soapUI好用的多,在此介紹下get方法的HTTP接口,其實這個接口也是把POST數據作為參數進行get請求,使用post 方法也是一樣,一共6步就可完成接口用例自動化

 使用Requests 和 RequestLibrary庫

Python的requests庫提供了非常方便且人性化的接口調用方法,上手快,功能強大且完美,甩同類庫urllib2(python3中為urllib), httplib(python3中為http.client)好幾條街。缺點是封裝了太多層,不利於http底層原理的理解。

RequestsLibrary是基於requests模塊做的RF庫,其根基本身就強大,再加上git上有一些大神一直在對其進行持續地更新及維護,提供了很不錯的官方Demo,從使用人數來說,也是完爆那些HTTPLibrary之流,意味着遇到問題得到解答的機會更大

 

Python3 中的 http 包中含有幾個用來開發 HTTP 協議的模塊。
  http.client 是一個底層的 HTTP 協議客戶端,被更高層的 urllib.request 模塊所使用。
  http.server 包含基於 socketserver 的基本 HTTP 服務器的類。
  http.cookies 實現 cookie 狀態管理
  http.cookiejar 與 cookie 相關

 

1、requestlibrary庫介紹

Keyword

Arguments

Documentation

Create Ntlm Session

alias, url, auth, headers={}, cookies=None, timeout=None, proxies=None, verify=False

創建一個HTTP會話:

url:即服務器的url

alias:使用Robot Framework的別名表示當前會話。

header:使用默認的headers字段

auth:NTLM鑒權需用[‘domain’,’username’,’password’]格式

timeout:會話超時時長

proxies:代理服務器的url

verify:如果需要證書請求則置為true

Create Session

alias, url, headers={}, cookies=None, auth=None, timeout=None, proxies=None, verify=False

創建一個HTTP會話:

url:即服務器的url

alias:使用Robot Framework的別名表示當前會話。

header:使用默認的headers字段

auth:NTLM鑒權需用username&password格式

timeout:會話超時時長

proxies:代理服務器的url

verify:如果需要證書請求則置為true

Delete

alias, uri, data=(), headers=None, allow_redirects=None

棄用,查看delete request

Delete All Sessions

 

刪除全部的會話

Delete Request

alias, uri, data=(), headers=None, allow_redirects=None

使用別名刪除會話

Alias:需要刪除的會話的別名

Get

alias, uri, headers=None, params={}, allow_redirects=None

棄用:使用Get Request

Get Request

alias, uri, headers=None, params={}, allow_redirects=None

根據提供的別名查找會話並在會話中發送GET請求

Head

alias, uri, headers=None, allow_redirects=None

棄用:使用Head Request

Head Request

alias, uri, headers=None, allow_redirects=None

根據提供的別名查找會話並在會話中發送HEAD請求

Options

alias, uri, headers=None, allow_redirects=None

棄用:使用Options Request

Options Request

alias, uri, headers=None, allow_redirects=None

根據提供的別名查找會話並在會話中發送Options請求

Post

alias, uri, data={}, headers=None, files={}, allow_redirects=None

棄用:使用Post Request

Post Request

alias, uri, data={}, headers=None, files={}, allow_redirects=None

根據提供的別名查找會話並在會話中發送POST請求

To Json

content, pretty_print=False

將返回的數據轉換為JSON格式

 

 

使用pip命令執行庫安裝

pip install -U robotframework-requests

安裝成功后即可打開RIDE添加測試用例。

 

 

測試案例
這里的demo我們是用到了flask的網站,做了幾種例子,大家了解一下,如果需要更完整的了解,建議看一下RequestsLibrary在github上的測試案例。

3.4.0 使用demo前的准備
我用了flask來實現了一個demo網站,它可以快速建立起一個網站,只用一些簡單的語句。
如果使用pip安裝會比較方便,特別是在mac電腦上,為了保證例子能正常運行,大家需要安裝四個東東,flask、flask-httpauth、flask_restful、python-simplexml。

只需要運行如下命令:

 

pip install flask
pip install flask-httpauth
pip install flask_restful
pip install python-simplexml

安裝完成之后就可以運行我們的demo-website了

demo的地址是:https://github.com/qitaos/rf-demos

demo-website的地址是:https://github.com/qitaos/rf-demos/tree/master/demo-website

下載整個工程之后,進入demo-website目錄,

運行命令
python flaskdemo.py
運行成功后會有提示信息

python flaskdemo.py

  1. Running onhttp://127.0.0.1:8000/ (Press CTRL+C to quit)
  2. Restarting with stat
    這里提示我們服務器已經啟動,訪問http://127.0.0.1:8000/ 或者 http://localhost:8000/ 就可以打開頁面了。
    如果有任何出錯信息,有可能是前面的測試庫沒有安裝完整。

1、get request json
訪問http://localhost:8000/users/1 的時候,它會返回一個json:
{“1”: “john”}

Robot <wbr>Framework之---接口測試實戰

如果把1換成5,它會返回一個404的json:
{
“message”: “NotFound: http://localhost:8000/users/5“,
“status”: 404
}

Robot <wbr>Framework之---接口測試實戰

所以這里第一個案例就是來測試這2個接口請求。

首先要先Create Session創建一個連接到服務器的host,然后通過Get Request發起請求,請求的返回是個Request對象${addr},所以在這里的變量是個對象,而對象的屬性值的有${addr.status_code}和${addr.content},使用了To Json后,就把返回的content格式化成Json串,然后就可以用Dictionary的方法獲取其中的值了。腳本見表格

Robot <wbr>Framework之---接口測試實戰

2、getrequest xml

前面一個例子是接口返回json進行處理的,這個例子是接口返回xml格式內容。訪問http://localhost:8000/hello/qitao,會返回一個xml格式的內容:

qitao

 

Robot <wbr>Framework之---接口測試實戰

案例比較長,分兩個部分說,第一個部分其實還是用json來處理,雖然返回的是xml,但是requestslibrary自動把它處理成json了。所以它的這部分處理其實和前面的案例一樣。腳本見表格

Robot <wbr>Framework之---接口測試實戰

那么想要返回xml怎么處理呢?這里就要在Request的essay-header里加上一個accept=application/xml,此時返回的就是一個xml格式的內容qitao

 

所以這里用到了XML庫的關鍵字Get Element Text來獲取xml節點的文本,使用Get Element獲取到一個Element對象${hello},既然是對象,那么它也有屬性值${hello.text}。再后面的幾行就是用XML庫的關鍵字新增Element,然后取值,這也算是提前准備好來XML的demo了。

 

這里為什么要做xml的例子呢,其實是因為有一種接口測試就是測試Web Service的,通常Web Service都是返回一個xml格式的內容。這里demo網站沒有做Web Service的例子,所以就用這個xml的例子來代替Web Service了。腳本見表格

 

Robot <wbr>Framework之---接口測試實戰

運行案例結果如圖:

Robot <wbr>Framework之---接口測試實戰

3、增加登錄態
有些接口是需要用戶密碼登錄后才能訪問的,如果直接訪問http://localhost:8000/401
會提示要輸入用戶名密碼

Robot <wbr>Framework之---接口測試實戰

輸入正確的用戶名密碼ok/python,會得到一個返回的信息
{
“pass”:”Authorized access”
}

但是我們做自動化腳本的時候不能去手動輸入的,所以我們可以在Create Session的時候加上用戶名密碼,就可以直接訪問了。

用戶名ok,密碼python,我們用${auth}創建個List存起來,然后在Create Session時加上${auth}參數,后面的過程就是前面一樣了,不需要自己再手動輸入用戶密碼了。腳本見表格

Robot <wbr>Framework之---接口測試實戰

運行結果如圖

Robot <wbr>Framework之---接口測試實戰

4、postrequest
前面幾個都是get方式的,這個例子是post方式的。
這里主要是在essay-header加了一項Content-Type=application/x-www-form-urlencoded,這是最常見的post提交數據的方式,另外還有幾種我不太常用的,大家可以根據自己的實際情況來使用。

然后我們向 http://localhost:8000/post, 發起請求,並將${data}作為post的data傳過去。demo網站對post請求做了個處理,將username的值獲取到然后以json格式返回。腳本見表格

Robot <wbr>Framework之---接口測試實戰


免責聲明!

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



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