下面是关于“jsonpath做接口封装使用技巧”的详细攻略:
什么是JsonPath
JsonPath是一种轻量级的、语言无关的解析JSON数据的语法。类似于XPath,使用JsonPath可以通过简短的表达式来找到JSON文档中的某个元素,支持复杂的嵌套场景,非常适合做接口测试用例的编写。
JsonPath的语法
JsonPath的语法比较简单,以下是一些常用的表达式:
$.
:表示根节点。@
:表示当前节点。.
:表示属性选择器,如$.foo
表示选择根节点下的foo
属性。[]
:表示索引选择器,如$[1]
表示选择根节点下的第2个元素。*
:表示通配符选择器,如$.store.*
表示选择根节点下的store
对象下的所有属性。.
,[]
,*
可以组成更复杂的表达式,例如$.store.book[0].title
使用表达式可以获取JSON文档中的任何元素。JsonPath还支持一些函数,包括min
,max
,avg
等等,可以对选择器的结果进行处理。
JsonPath的应用
JsonPath可以应用在接口测试用例的编写中,例如:
示例1:检查接口返回的数据是否符合预期
假设我们有一个获取用户信息的接口,返回的JSON格式如下:
{
"status": 0,
"msg": "success",
"data": {
"name": "张三",
"age": 20,
"gender": "男",
"address": {
"city": "北京",
"zone": "海淀区"
},
"hobbies": ["篮球", "游泳", "跑步"]
}
}
我们可以使用JsonPath来检查返回的数据是否符合预期,例如:
import requests
import jsonpath
def test_get_user_info():
url = "http://xxx.com/user/info"
response = requests.get(url)
assert response.status_code == 200
assert response.json()["status"] == 0
assert response.json()["msg"] == "success"
assert jsonpath.jsonpath(response.json(), "$.data.name")[0] == "张三"
assert jsonpath.jsonpath(response.json(), "$.data.age")[0] == 20
assert jsonpath.jsonpath(response.json(), "$.data.gender")[0] == "男"
assert jsonpath.jsonpath(response.json(), "$.data.address.city")[0] == "北京"
assert jsonpath.jsonpath(response.json(), "$.data.address.zone")[0] == "海淀区"
assert jsonpath.jsonpath(response.json(), "$.data.hobbies[0]")[0] == "篮球"
在示例中,我们使用JsonPath表达式选择了返回的JSON中的元素,并对它们进行了断言,用于检查返回数据是否符合预期。
示例2:模糊匹配接口返回的数据
假设我们有一个搜索商品的接口,返回的JSON格式如下:
{
"status": 0,
"msg": "success",
"data": [
{
"name": "Apple iPhone 12",
"price": 8999
},
{
"name": "Huawei Mate 40 Pro",
"price": 7999
},
{
"name": "Xiaomi Mi 11",
"price": 4999
}
]
}
可以使用JsonPath的通配符选择器*
对返回的数据进行模糊匹配,例如:
import requests
import jsonpath
def test_search_product():
url = "http://xxx.com/product/search?keyword=iphone"
response = requests.get(url)
assert response.status_code == 200
assert response.json()["status"] == 0
assert response.json()["msg"] == "success"
assert len(jsonpath.jsonpath(response.json(), "$.data[?(@.name =~ /.*iPhone.*/i)]")) > 0
在示例中,我们使用了JsonPath的过滤器表达式[?()]
,并使用了正则表达式进行模糊匹配,用于检测返回数据中是否有包含iphone
的商品。
总结
本文介绍了JsonPath的基本语法和示例应用场景。JsonPath提供了一种非常方便的方式来解析JSON数据中的元素,可以在接口测试用例的编写中大大提高效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsonpath做接口封装使用技巧 - Python技术站