参考官网教程:
https://jmespath.org/tutorial.html

jmespath 可以用来提取数据,在进行上下游传参,以及做断言的时候都可以使用。

JMeter 接口测试工具中也支持jmespath

使用场景主要是当服务器返回结果特别多的时候。

JMeter中使用 JMESpath

jmeter的基本使用教程
https://www.bilibili.com/video/BV11B4y1P7nr/

JMESpath进行数据提取。在JMeter中创建新建http请求
请求路径为: http://49.233.108.117:28019/api/v1/index-infos
image.png
添加查看结果树,运行。查看结果
image.png
选择【JSON JMESPath Tester】
使用 JMESPath 提取返回结果中 推荐商品 商品价格大于3000元的商品id

  1. data.recommendGoodses[?sellingPrice>`3000`].goodsId

image.png
从返回结果中提取变量
image.png
添加对应的路径表达式
image.png

python中使用JMESPath

参考文档: https://github.com/jmespath/jmespath.py

安装jmespath

  1. pip install jmespath

接口中的应用

从商品首页中提取服务器的结果

  1. import requests
  2. r = requests.get("http://49.233.108.117:28019/api/v1/index-infos")
  3. # print(r.json())
  4. # 提取 推荐商品中价格 大于 3000的商品id
  5. # 使用原始的数据解析方法
  6. # 声明空的列表
  7. test_goods_ids = []
  8. result = r.json()
  9. # 循环服务器返回的结果
  10. for goods in result["data"]["recommendGoodses"]:
  11. # print(goods["sellingPrice"])
  12. # 如果商品的价格大于3000
  13. if goods["sellingPrice"] > 3000:
  14. # 将此商品对应的id放在列表中
  15. test_goods_ids.append(goods["goodsId"])
  16. print(test_goods_ids)

使用 JMESpath 的方式进行提取

  1. import requests
  2. r = requests.get("http://49.233.108.117:28019/api/v1/index-infos")
  3. import jmespath
  4. # jmespath 表达式
  5. exp = "data.recommendGoodses[?sellingPrice>`3000`].goodsId"
  6. goods_ids = jmespath.search(exp,r.json())
  7. print(goods_ids)

可以看到,两种方式结果都一样。只是代码量的 不一样。
image.png
需要注意的是: 这里数字使用的是 反向的单引号。