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
- Running onhttp://127.0.0.1:8000/ (Press CTRL+C to quit)
- Restarting with stat
這里提示我們服務器已經啟動,訪問http://127.0.0.1:8000/ 或者 http://localhost:8000/ 就可以打開頁面了。
如果有任何出錯信息,有可能是前面的測試庫沒有安裝完整。
1、get request json
訪問http://localhost:8000/users/1 的時候,它會返回一個json:
{“1”: “john”}
如果把1換成5,它會返回一個404的json:
{
“message”: “NotFound: http://localhost:8000/users/5“,
“status”: 404
}
所以這里第一個案例就是來測試這2個接口請求。
首先要先Create Session創建一個連接到服務器的host,然后通過Get Request發起請求,請求的返回是個Request對象${addr},所以在這里的變量是個對象,而對象的屬性值的有${addr.status_code}和${addr.content},使用了To Json后,就把返回的content格式化成Json串,然后就可以用Dictionary的方法獲取其中的值了。腳本見表格
2、getrequest xml
前面一個例子是接口返回json進行處理的,這個例子是接口返回xml格式內容。訪問http://localhost:8000/hello/qitao,會返回一個xml格式的內容:
qitao
案例比較長,分兩個部分說,第一個部分其實還是用json來處理,雖然返回的是xml,但是requestslibrary自動把它處理成json了。所以它的這部分處理其實和前面的案例一樣。腳本見表格
那么想要返回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了。腳本見表格
運行案例結果如圖:
3、增加登錄態
有些接口是需要用戶密碼登錄后才能訪問的,如果直接訪問http://localhost:8000/401
會提示要輸入用戶名密碼
輸入正確的用戶名密碼ok/python,會得到一個返回的信息
{
“pass”:”Authorized access”
}
但是我們做自動化腳本的時候不能去手動輸入的,所以我們可以在Create Session的時候加上用戶名密碼,就可以直接訪問了。
用戶名ok,密碼python,我們用${auth}創建個List存起來,然后在Create Session時加上${auth}參數,后面的過程就是前面一樣了,不需要自己再手動輸入用戶密碼了。腳本見表格
運行結果如圖
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格式返回。腳本見表格