使用robotframework做接口測試二——處理響應數據


初使用RequestsLibrary做接口測試時,你會不會感到困惑,為什么會有${resp.content}, ${resp.status_code}這樣的寫法,這個status_code什么鬼,f5查的時候怎么沒說明這個東西,為什么寫Demo的人知道可以這么寫,我少寫個’_’可不可以,還有其它啥高端玩法是我不知道的,這玩意的使用說明到底保存在哪啊喂!
說到這個,我們先來了解一下,返回的${resp}是個什么類型的對象,在rf上用個巧妙的方法查看:

2-1看resp類型.png



運行這段腳本,第4行的打印結果是:INFO : <class 'requests.models.Response'>
從結果可以看出${resp}是一個類對象,源碼可在requests/models/Response查看,對象句點操作一般是取對象屬性,順藤摸瓜,找出該類的所有屬性,第6行打印結果:
 ['__attrs__', '__bool__', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getstate__', '__hash__', '__init__', '__iter__', '__module__', '__new__', '__nonzero__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_content', '_content_consumed', 'apparent_encoding', 'close', 'connection', 'content', 'cookies', 'elapsed', 'encoding', 'headers', 'history', 'is_permanent_redirect', 'is_redirect', 'iter_content', 'iter_lines', 'json', 'links', 'ok', 'raise_for_status', 'raw', 'reason', 'request', 'status_code', 'text', 'url']

粗體的是比較重要的,今后會被頻繁使用的屬性:

content: 響應body的內容,二進制編碼,如果返回只有文本內容,和text差不多
cookies:響應回寫的cookies,cookieJar類對象
headers: 響應頭內容
json(): 響應body內容,json格式
status_code: 狀態碼
text: 響應body的內容,默認unicode編碼

一、狀態碼
狀態碼什么的,百度上講的肯定比我講得清楚,我就不講了。
另外,一般來說,系統內部會有一個自定義的響應碼,與http的狀態碼不可混淆。
這里主要講一下RequestsLibrary中對30X狀態碼的處理,默認情況下,RequestsLibrary的重定向是開着的,也就是說,如果請求返回的狀態碼為302,它會自動幫你訪問重定向地址,並最終返回重定向地址的狀態碼。具體畫風如何,請查看Demo:

2-3重定向.png


二、處理一個簡單的響應
響應body:
{
  "origin": "183.16.189.96"
}

不多說了,看圖:第8行關鍵字需導入Collections庫

2-2普通響應.png



三、處理多層級的響應body

這是一個一般復雜的響應body,多層級的json,實際中,你可能要取到某個nickName為“
test1”的數據並校驗。
{
    "api": "api.name",
    "v": "1.0",
    "code": "10000",
    "error_msg": "success",
    "data": {
        "userlist": [{
            "uid": "94901",
            "nickName": "test1",
        }, {
            "uid": "1010640",
            "nickName": "test2",
        }, {
            "uid": "1012130",
            "nickName": "test3",
        }]
    }
}
還是希望大家有點python基礎,這種json返回格式,一層層地來抽絲剝繭,{}為字典,用字典運算符,為list,用列表運算符,假設上面那個json是我的響應body。
取第一個nickName的值應該是這樣:${resp.json()[‘data’][‘userlist’][0][‘nickName’]},log該變量,值應為:test1。用大白話解釋這個表達式就是:把最外面的字典里的data的值里邊的userlist的值的第一個字典元素取出來,再對這個字典里的nickName的值。好吧,我已經盡我最大能力翻譯了。

另外還有人,可能想一次把所有列表中的nickName取了,也有個簡單的辦法:

2-4處理多重json.png

 

2-5結果.png


這個用法有點炫酷,細說起來可以整成一個熟練使用rf+evaluate裝逼指南系列。這是題外話了。對於初學者,還是1 要懂點python, 2 要懂rf和python之間的表達切換,rf里最好的調試語句是log。建議多寫多log。


免責聲明!

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



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