學會這個Python庫,介面測試so easy!

博為峰網校發表於2023-04-11

摘要:我們在做介面測試時,大多數返回的都是json屬性,我們需要透過介面返回的json提取出來對應的值,然後進行做斷言或者提取想要的值供下一個介面進行使用。 加我VX:atstudy-js 回覆“測試”,進入 自動化測試學習交流群~~

但是如果返回的json資料巢狀了很多層,透過查詢需要的詞,就很不方便,小編今天介紹一種python的第3方庫jsonpath。

jsonpath

jsonpath是使用一種簡單的方法來提取給定JSON內容。在我們做介面測試時,目前流行的資料格式就是JSON格式的,當碰到複雜JSON格式時,我們可以使用JsonPath快速提取資料或者更新資料。

安裝:pip install jsonpath。

小編先透過正常的介面,獲取一段json資料供我們進行測試使用:

import requests

#請求天氣的url地址

url='

#請求引數

data={

"city":"上海",

"key":"331eab8f3481f37868378fcdc76cb7cd"

}

#傳送post請求

r=requests.post(url,data=data)

j=r.json()

print(j)

透過執行後,獲取一段我們想要的json資料。

{

"reason":"查詢成功!",

"result":{

"city":"上海",

"realtime":{

"temperature":"23",

"humidity":"25",

"info":"多雲",

"wid":"01",

"direct":"西北風",

"power":"2級",

"aqi":"58"

},

"future":[

{

"date":"2023-03-15",

"temperature":"10/23℃",

"weather":"多雲",

"wid":{

"day":"01",

"night":"01"

},

"direct":"西南風轉東北風"

},

{

"date":"2023-03-16",

"temperature":"9/15℃",

"weather":"多雲轉小雨",

"wid":{

"day":"01",

"night":"07"

},

"direct":"東南風"

},

{

"date":"2023-03-17",

"temperature":"9/13℃",

"weather":"中雨轉小雨",

"wid":{

"day":"08",

"night":"07"

},

"direct":"東南風轉北風"

},

{

"date":"2023-03-18",

"temperature":"8/15℃",

"weather":"多雲",

"wid":{

"day":"01",

"night":"01"

},

"direct":"北風轉東南風"

},

{

"date":"2023-03-19",

"temperature":"12/16℃",

"weather":"晴",

"wid":{

"day":"00",

"night":"00"

},

"direct":"東南風"

}

]

},

"error_code":0

}

透過下標提取

json資料有了,那麼我們先用正常提取json的方法,進行提取3-16日的天氣資訊,看看如何提取。

data=result['result']['future'][1]

print(data)

------------------------------輸出結果---------------------------

{'date':'2023-03-16','temperature':'9/15℃','weather':'多雲轉小雨','wid':{'day':'01','night':'07'},'direct':'東南風'}

可以看到我們想要提取需要找到對應的值,然後在繼續往下一層一層的查詢,如果巢狀層數過多,容易出錯,返回資訊格式發生改變,這裡需要修改資訊。

透過jsonpath提取

同樣的json資料,我們透過jsonpath進行提取:

data=jsonpath.jsonpath(result,'$..[?(@.date=="2023-03-16")]')

print(data)

-----------------------------輸出結果----------------------------

[{'date':'2023-03-16','temperature':'9/15℃','weather':'多雲轉小雨','wid':{'day':'01','night':'07'},'direct':'東南風'}]

透過上面的內容會發現,我們直接透過過濾器的方式來講我們的資料取出來了。有點類似我們的正規表示式。

jsonpath的其他用法

上面介紹的只是jsonpath的一個用法,下面小編介紹幾種jsonpath的其他用法。

透過$獲取屬性值內容

#直接獲取到future的內容

data=jsonpath.jsonpath(result,'$.result.future')

data1=jsonpath.jsonpath(result,'$.reason')

print(data)

print(data1)

-----------------------------輸出結果----------------------

[[{'date':'2023-03-15','temperature':'10/23℃','weather':'多雲','wid':{'day':'01','night':'01'},'direct':'西南風轉東北風'},{'date':'2023-03-16','temperature':'9/15℃','weather':'多雲轉小雨','wid':{'day':'01','night':'07'},'direct':'東南風'},{'date':'2023-03-17','temperature':'9/13℃','weather':'中雨轉小雨','wid':{'day':'08','night':'07'},'direct':'東南風轉北風'},{'date':'2023-03-18','temperature':'8/15℃','weather':'多雲','wid':{'day':'01','night':'01'},'direct':'北風轉東南風'},{'date':'2023-03-19','temperature':'12/16℃','weather':'晴','wid':{'day':'00','night':'00'},'direct':'東南風'}]]

['查詢成功!']

透過【*】獲取對應值

透過上面的json值,獲取到關於date的時間值。

data=jsonpath.jsonpath(result,'$.result.future.[*].date')

print(data)

-----------------------------輸出結果----------------------

['2023-03-15','2023-03-16','2023-03-17','2023-03-18','2023-03-19']

透過切片獲取對應值

data=jsonpath.jsonpath(result,'$..future[0,1]')

print(data)

-----------------------------輸出結果----------------------

[{'date':'2023-03-15','temperature':'10/23℃','weather':'多雲','wid':{'day':'01','night':'01'},'direct':'西南風轉東北風'},{'date':'2023-03-16','temperature':'9/15℃','weather':'多雲轉小雨','wid':{'day':'01','night':'07'},'direct':'東南風'}]

以上只是小編簡單的介紹幾種jsonpath的使用方法,具體的使用需要大家透過專案上進行結合使用,這裡小編在推薦一個jsonpath的偵錯程式,我們可以透過偵錯程式進行檢視編寫是否正確:。

總結

小編透過簡單的案例進行介紹瞭如何透過jsonpath進行提取json數值,方面我們在做介面測試對於json的資料進行解析,文章中沒有太多的知識點,主要是熟能生巧,經常使用,這樣在專案中才能靈活運用。感謝您的閱讀,希望對您有所幫助。

最後:

可以到我的個人號:atstudy-js,可以免費領取一份10G軟體測試工程師面試寶典文件資料。以及相對應的影片學習教程免費分享!其中包括了有基礎知識、Linux必備、Mysql資料庫、抓包工具、介面測試工具、測試進階-Python程式設計、Web自動化測試、APP自動化測試、介面自動化測試、測試持續整合、測試架構開發測試框架、效能測試等。

這些測試資料,對於做【軟體測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2945045/,如需轉載,請註明出處,否則將追究法律責任。

相關文章