接觸自動化也有一段時間了,之前學習過selenium,appium,這段時間在學習接口自動化,上次出現一個問題,是requests的json解析數據,要從解析出來的數據選取數據出來做assertEqual判斷,結果把我難倒了,雖然說是一點簡單的知識點,但是如果基礎不扎實,或者不仔細的人,就會遇到我的這種情況,最終詢問了老司機,把問題解決了。
案例回顧
下面附上接口:
http://tj.nineton.cn/Heart/index/all?city=CHSH000000&language=zh-chs&unit=c&aqi=city&alarm=1
這個是一個天氣預報的接口,通過postman解析,會得到一個返回值,利用json解析,會得到很多數據,那么我選取其中的一部分數據,另外加上幾個元組,把元組也整合在一起,做一個解析。
下面附上解析的數據
r = {
"status": "OK",
"weather": [
{
"city_name": "上海",
"now": {
"text": "陰",
"code": "9"
},
"future": [
{
"date": "2017-05-12",
"high": "22"
},
{
"date": "2017-05-13",
"high": "30"
}
]
},
("NanChang","ChangSha","HangZhou"),
["ShangHai","BeiJing","ShenZhen"]
]
}
那么,我們要分別獲取字典里面的status為OK的值,city_name為上海的值,date為2017-05-13,還有元組里面的"ChangSha",list里面的"ShenZhen"的值
有些人看到,就會比較迷糊,看到這么多,我該如何取值,或者,可能會由於自己的粗心,沒有看到某一個符號,或者少數了幾個數,導致測試結果的失敗,那么,在寫答案之前,我們先解析一下上邊的數據類型。
{}那么肯定為字典咯,("NanChang","ChangSha","HangZhou")為元組,["ShangHai","BeiJing","ShenZhen"]為列表list
一,元組回顧
下面,我們就先回顧一下元組,
Python的元組與列表類似,不同之處在於元組的元素不能修改。元組使用小括號,列表使用方括號。元組創建很簡單,只需要在括號中添加元素,並使用逗號隔開即可。
例:other_city = ("NanChang","ChangSha","HangZhou")
元組與字符串類似,下標索引從0開始,可以進行截取,組合等...
>>> r = ("NanChang","ChangSha","HangZhou")
獲取單個字符串
>>> r[0]
'NanChang'
截取第一個和第二個字符串
>>> r[0:2]
('NanChang', 'ChangSha')
獲取倒數第一個字符串
>>> r[-1]
'HangZhou'
獲取所有的字符串
>>> r[0:]
('NanChang', 'ChangSha', 'HangZhou')
二,列表list回顧
同理,列表list的獲取方式與元組一樣,我們就做一個簡單的回顧就可以了
r ["NanChang","ChangSha","HangZhou"]
>>> r[0]
"NanChang"
此處不再多說
三,字典回顧
下一個就是字典,
字典是另一種可變容器模型,且可存儲任意類型對象。
字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中 ,格式如下所示
我們舉一個例子
>>> d = {"name":"XiaoMing","age":"15","sexy":"man"}
>>> d["name"]
'XiaoMing'
四,答案解析
那么,分析完以上信息,就可以開始我們取值了,相信你看到這里,就會感覺,無論多少數據,取值會很簡單的
1,status
取第一個值:status,它就在字典里面第一個,所以很好取值,就是
>>> r["status"]
'OK'
2,city_name = 上海
取第二個值:city_name為上海,這里面有點繞,dict+list+dict,其實這樣分析出來就很簡單了,那么我們就開始一步步分析吧
上海在weather里面,所以我們取值
r["weather"]
[{'now': {'text': '陰', 'code': '9'}, 'city_name': '上海', 'future': [{'high': '22', 'date': '2017-05-12'}, {'high': '30', 'date': '2017-05-13'}]}, ('NanChang', 'ChangSha', 'HangZhou'), ('ShangHai', 'BeiJing', 'ShenZhen')]
city_name在list里面的第一個dict里面,所以我們取值
>>> r["weather"][0]
{'now': {'text': '陰', 'code': '9'}, 'city_name': '上海', 'future': [{'high': '22', 'date': '2017-05-12'}, {'high': '30', 'date': '2017-05-13'}]}
上海在dict的city_name里面,所以就很簡單的三步取值取出來的
>>> r["weather"][0]["city_name"]
'上海'
3,date = 2017-05-13
現在取第三個值date為2017-05-13,這個其實就是比上面的多了兩步,多了一個list和一個dict,我就直接寫答案了
>>> r["weather"][0]["future"][1]["date"]
'2017-05-13'
4,ChangSha 和 ShenZhen的取值
現在取第四個值,元組里面的"ChangSha"
"ChangSha"在元組里面,這個元組在list里面,所以,我們先要獲取到該元組
r["weather"][1]
('NanChang', 'ChangSha', 'HangZhou')
在下一步
r["weather"][1][1]
'ChangSha'
同理,list里面的"ShenZhen"的值就會變得很簡單了,我就直接寫答案了
>>> r["weather"][2][2]
'ShenZhen'
解析數據其實很簡單,只要有點基礎,就可以解析,只不過第二個值會有點繞,dict+list+dict+list,經過一分析,就會發現,其實不會太難,一步一步慢慢分析,做測試不是會去找bug,也要去分析原因,你會事半功倍的。
最后附上所有的代碼
r = {
"status": "OK",
"weather": [
{
"city_name": "上海",
"now": {
"text": "陰",
"code": "9"
},
"future": [
{
"date": "2017-05-12",
"high": "22"
},
{
"date": "2017-05-13",
"high": "30"
}
]
},
("NanChang","ChangSha","HangZhou"),
("ShangHai","BeiJing","ShenZhen")
]
}
>>> r["status"]
'OK'
>>> r["weather"]
[{'now': {'text': '陰', 'code': '9'}, 'city_name': '上海', 'future': [{'high': '22', 'date': '2017-05-12'}, {'high': '30', 'date': '2017-05-13'}]}, ('NanChang', 'ChangSha', 'HangZhou'), ('ShangHai', 'BeiJing', 'ShenZhen')]
>>> r["weather"][0]
{'now': {'text': '陰', 'code': '9'}, 'city_name': '上海', 'future': [{'high': '22', 'date': '2017-05-12'}, {'high': '30', 'date': '2017-05-13'}]}
>>> r["weather"][0]["city_name"]
'上海'
>>> r["weather"][0]
{'now': {'text': '陰', 'code': '9'}, 'city_name': '上海', 'future': [{'high': '22', 'date': '2017-05-12'}, {'high': '30', 'date': '2017-05-13'}]}
>>> r["weather"][0]["future"]
[{'high': '22', 'date': '2017-05-12'}, {'high': '30', 'date': '2017-05-13'}]
>>> r["weather"][0]["future"][1]["date"]
'2017-05-13'
>>> r["weather"][1][1]
'ChangSha'
>>> r["weather"][2][2]
'ShenZhen'
禁止轉載以及商業用途,僅作為學習資料,違者必究