學會這個Python庫,介面測試so easy!
摘要:我們在做介面測試時,大多數返回的都是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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 有了這4個安全測試工具,對軟體安全測試say so easy!
- 搞定這套 Python 爬蟲面試題,面試會 so easyPython爬蟲面試題
- 這個輪子讓SpringBoot實現api加密So EasySpring BootAPI加密
- 記住這11點,找工作變得 So easy!
- 這些 JavaScript函式讓你的工作更加 So Easy!JavaScript函式
- 這是個測試
- HDU4565 So Easy! (矩陣)矩陣
- python 介面自動化測試Python
- 介面測試(apipost、jmeter和python指令碼)——測試工具APIJMeterPython指令碼
- Python做介面測試生成測試報告失敗Python測試報告
- so easy 前端實現多語言前端
- HDU 4565 So Easy!(矩陣快速冪)矩陣
- 介面測試測試流程
- 介面測試學習之 jsonJSON
- 介面測試學習之jsonJSON
- aiofiles,一個非同步測試的 Python 庫!AI非同步Python
- 介面測試使用Python裝飾器Python
- python+requests介面測試基礎Python
- python介面測試—get請求(一)Python
- python介面測試—post請求(二)Python
- 超優惠:程式設計師的第一個一百萬,So easy!程式設計師
- jmeter介面測試教程以及介面測試流程JMeter
- API 測試 | 瞭解 API 介面測試 | API 介面測試指南API
- SegmentFault 思否技術週刊 — 想玩轉 Python?簡直 So Easy!Python
- ? python 介面自動化 (二)--什麼是介面測試、為什麼要做介面測試 (詳解)Python
- 介面測試
- 幹掉 Postman?測試介面直接生成API文件,這個工具賊好用PostmanAPI
- 微軟全球生態,讓遊戲出海 So Easy!微軟遊戲
- Android實現多語言so easyAndroid
- 【軟體測試】——介面測試
- Jmeter介面測試+效能測試JMeter
- 介面測試 - 引數測試
- 軟體測試學習教程——LoadRunner實現介面測試
- API測試:瞭解API介面測試與API介面測試指南API
- 金融資料分析還能這樣做?快試試這個BI工具小白也能學會!
- Python之介面自動化初級:開始一個簡單的介面測試Python
- 前端註釋那些事兒:看懂這篇,提高程式碼質量So easy前端
- 介面測試 (apipost、jmeter 和 python 指令碼)APIJMeterPython指令碼