使用场景
接口自动化核心就是实际结果与期望结果进行比对校验。所以要提取实际响应中的结果。但是有些接口往往返回的可能是各种嵌套,而且嵌套很多了层,这让测试在提取过程中非常不方便,所以有了jsonpath,非常简洁。
#接口响应示例:
user_info={
"code":"1",
"data":{
"contentTypeDesc":"",
"flag":0,
"liveList":[
{
"awayTeamName":"全北现代",
"desc":"这两支球队最近的战绩都是一塌糊涂,我还是摸摸全北",
"description":"这两支球队最近的战绩都是一塌糊涂,我还是摸摸全北",
"fansCount":33411,
"flag":0,
"homeId":44544,
"homeTeamName":"城南足球俱乐部",
"hobby":{"a":111111111111111111111111111},
"hot":{
"id":2,
"user":"admin",
"info":{
"sex":"man",
"age":22,
"hobby":{"a":22222222222222222222222}
}
} }
],
"pageSize":30,
"totalCount":8,
"totalPage":1
},"msg":"成功"}
目标:提取age的value
①普通提取方法,一层一层的取值
print(user_info['data']['liveList'][0]['hot']['info']['age'] -------------------------------->#: 22
②使用jsonpath取值
一般接口都返回是json格式的数据,使用jsonpath要先转dict
print(jsonpath.jsonpath(user_info,'..age')[0])---------------------------------------->#:22 list的索引取值
多个相同的key:
print(jsonpath.jsonpath(user_info,'$..hobby'))
-#:[{'a': 111111111111111111111111111}, {'a': 22222222222222222222222}]
解释jsonpath含义:
$:从根节点开始查找
.:一个点是子节点,2个点是子孙节点
age:需要的匹配字段
详细见:https://www.cnblogs.com/jpfss/p/10973590.html
jsonpath比一层一层的取值简洁的多,再也不怕路径深的老大难问题了
创作不易,学到点个赞,加个关注呗!!!
谢谢~~