實驗:Robot Framework(四):HTTP協議級介面測試
實驗簡介
本節實驗主要為大家講解如何利用Robot Framework結合常用的關鍵字完成對Agileone系統中的「需求提案」模塊進行協議級介面的自動化測試腳本開發。本實驗主要是基於Requests插件進行,所以讀者要能夠掌握本實驗的關鍵知識,需要首先熟悉HTTP/HTTPS協議。如這方面的知識儲備比較欠缺的話,建議先觀看強哥的視頻:http://www.woniuxy.com/course/14
實驗目的
(1) 掌握RF的Requests庫的常用關鍵字及用法。
(2) 能夠熟練運用Requests庫來完成介面級自動化測試腳本開發。
實驗流程
1. Requests庫常用關鍵字
我們先來對Requests庫的常用關鍵字進行一個了解:
(1) Create Session:創建一個連接到伺服器端URL地址的HTTP會話。
(2) Get Request:發送GET請求,其中也內置了一個關鍵字叫「Get」,系統已不再建議使用。
(3) Post Request:發送POST請求,同樣,也不再建議使用「Post」關鍵字。
(4) To JSon:將響應的內容轉換為JSON數據格式。
(5) Delete All Sessions:清空當前會話。
此處需要特別注意的是,RF已經自動幫我們維護了伺服器端與客戶端的Session和Cookie,我們只需要在Create Session時指定一個本次連接的別名(Alias),同時在後面的每一次請求處理的過程中都通過此別名來與當前Session建立關係。
下面,我們仍然通過對Agileone的登錄,需求提案模塊的新增與修改來為大家演示其用法。
2. 先實現一個簡單的GET請求
對上述代碼進行一下說明:
(1) 第1行:Create Session,用於創建一個與對應的伺服器地址的連接會話,並將該會話別名設置為「agileone」,以供後面的請求使用,以保持會話狀態。
(2) 第2行:發送GET請求到首頁,並且將響應賦值給變數${response}。
(3) 第3行:對首頁進行簡單的斷言,此處我們使用了Python的decode函數對響應的內容進行解碼處理。同時獲取響應的內容需要使用${response.content}屬性,而不是直接使用${response},這是需要注意的地方。
(4) 第4行:將響應的內容輸出到日誌信息中,便於調試時查看。與我們在Java中使用System.out.println()方法輸出內容到Console終端上道理是一樣的。
3. 實現Agileone的登錄與斷言
要實現Agileone的登錄,最核心的當然是發送POST請求。在RF框架中,我們使用「Post Request」關鍵字可以實現POST請求的發送。實現POST請求的處理需要有三個核心參數:
(1) 必須在頭部自定義POST請求的Content-Type欄位值為:application/x-www-form-urlencoded。
(2) 必須指定正確的POST請求的伺服器端接收地址。
(3) 必須明確指定POST請求的正文數據。
對於頭部欄位和請求正文的指定,我們可以直接指定為一個字元串,如「username=admin&password=123456」這種形式,也可以使用關鍵字「Create Dictionary」創建一個字典對象,將每一個欄位一個一個單獨賦值,但最終構建出來的,仍然是字元串格式。其它的操作則與GET請求的處理類似,獲取到響應,對其進行處理即可。現在我們來看看如何利用「Post Request」關鍵字實現Agileone系統的登錄和斷言:
具體的腳本如下:
Create Session agileone http://localhost/agileonen${headers} Create Dictionary Content-Type=application/x-www-form-urlencodedn${loginData} Create Dictionary username=admin password=admin savelogin=truen${respLogin} Post Request agileone /index.php/common/login data=${loginData} headers=${headers}nShould Contain ${respLogin.content} successfulnRun Keyword If u${respLogin.content}==usuccessful Log 登錄成功...n... ELSE Log 用戶登錄失敗...n
在上述代碼中,我們使用了「Create Dictionary」來創建了字典數據,並賦值給變數${headers}和${loginData},最後在發送POST請求時指定給參數data和headers,供POST請求使用。雖然我們看到的字典數據是一個欄位一個欄位處理的,但是最終,系統會構建出一個完整的請求體,與我們直接寫字元串處理的結果是一樣的。最後,我們使用了RF自帶的判斷語句「Run Keyword If」和「… ELSE」來實現一個簡單的斷言。
4. 需求提案的新增功能測試
當我們完成了登錄的操作後,我們已經非常熟悉「Post Request」的用法了,那麼現在我們使用原生字元串的方式來發送請求頭和請求正文,並繼續使用隨機數來生成隨機的需求提案標題和內容。最終的代碼如下:
Create Session agileone http://localhost/agileonen${headers} Create Dictionary nContent-Type=application/x-www-form-urlencodedn${loginData} Create Dictionary username=admin password=admin nsavelogin=truen${respLogin} Post Request agileone /index.php/common/login ndata=${loginData} headers=${headers}n${random} Evaluate random.randint(10000,99999) randomn${addData} Set Variable type=Requirement&importance=Mediumn&headline=這是需求標題-${random}n&content=這是需求內容-${random}&&processresult=n${respAdd} Post Request agileone /index.php/proposal/add data=${addData} headers=${headers}nShould Match Regexp ${respAdd.content} d+n
附系列文章鏈接:
實驗:Robot Framework(一):安裝配置
實驗:Robot Framework(二):基礎應用
實驗:Robot Framework(三):Web頁面GUI測試
註:本文為蝸牛學院資深技術屌絲鄧強老師原創,原文鏈接 http://www.bossqiang.com/article/29,轉載請私聊本號獲得授權。希望繼續在IT行業突破提升自己的各位朋友,也歡迎加群384053806,不管你自我感覺牛不牛B。
推薦閱讀: