03-Httprunner-JMESPath提取返回结果

简介: 03-Httprunner-JMESPath提取返回结果

前言

  • 本篇来学习如何使用JMESPath在 extract和 validate 的时候提取响应报文中的值

JMESPath简介

python中使用jmespath

  • 安装jmespath
pip install jmespath
  • 使用示例
# -*- coding: utf-8 -*-
# @Time    : 2022/2/20
# @Author  : 大海
import jmespath
# jmespath表达式,想要提取的值
value = jmespath.search('foo.bar', {'foo': {'bar': 'baz'}})
print(value)  # baz
# -*- coding: utf-8 -*-
# @Time    : 2022/2/20
# @Author  : 大海
import jmespath
# 有点类似正则re模块,先使用compile编译表达式
expression = jmespath.compile('foo.bar')
a = expression.search({'foo': {'bar': 'baz'}})
b = expression.search({'foo': {'bar': 'other'}})
print(a)    # baz
print(b)    # other

基本表达式

  1. 字典取值,根据key获取value
  2. 嵌套字典取值,一层一层取值
  3. list根据索引取值,索引从0开始
  4. dict 嵌套list取值

切片

  • list可以使用切片取值,和python语法一致: 一般形式是[start:stop:step]
  1. 取值0-4,使用[0,5] ,不包含结束索引的值
  2. 省略开始索引,表示从索引 0 开始取值
  3. 省略始末索引表示取索引,第三个值为步长
  4. 反转list [::-1]

通配符*的使用

  1. 取出列表中所有的 first 对应的名称 people[*].first
  2. 取出列表中前 2 个 first 对应的名称 people[:2].first
  3. 取出 ops 对象的任意属性对应的numArgs ops.*.numArgs

过滤器使用

  • 过滤器表达式是为数组定义的,其一般形式为 [? <表达式> <比较器> <表达式>]
  • 常用的比较表达式可以使用 ==, !=, <, <=, >, > =
  • 假设我们有一个机器列表,每个机器都有一个名称和一个 状态。我们想要所有正在运行的机器的名称

管道表达式

  • 如果查询的结果是一个list,如果我想取出结果里面的第一个可以使用管道符 |

多选

  • 可以创建JSON文档中不存在的元素

函数的使用

  1. 结果的数量
  2. 打印age最大的name
  3. 函数与过滤器结合使用

extract 提取变量

  • 响应体如下
{
    "args": {
        "foo1": "bar11",
        "foo2": "bar21",
        "sum_v": "3"
    },
    "headers": {
        "x-forwarded-proto": "https",
        "x-forwarded-port": "443",
        "host": "postman-echo.com",
        "x-amzn-trace-id": "Root=1-6211933f-24cf77f24d4c33f642e58f91",
        "user-agent": "PostmanRuntime/7.29.0",
        "accept": "*/*",
        "postman-token": "42f334a1-a634-4aad-9eb1-0a3dec8e340f",
        "accept-encoding": "gzip, deflate, br",
        "cookie": "sails.sid=s%3AiNXWktAi8DbacjpSqG3Kjw3WrRKUSiVd.0ie7508ENALgRVOIVtzQdnnMNmkdI%2FVpp51lwP17n6M"
    },
    "url": "https://postman-echo.com/get?foo1=bar11&foo2=bar21&sum_v=3"
}

yaml

  • 想要提取args中foo2的值
extract:
        foo3: "body.args.foo2"

pytest

  • 先调用extract()方法,然后调用with_jmespath(“jmespath提取变量值”,“变量名”)
.extract()
.with_jmespath("body.args.foo2", "foo3")

validate 校验结果

  • 格式: - 运算符: [jmespath表达式, expected_value, message]
  • jmespath: jmespath表达式
  • expected_value: 指定期望值或变量,也可以调用方法
  • message(可选): 用于描述断言失败原因
  • 运算符
  • equal: 等于
  • contained_by: 实际结果是否被包含在预期结果中
  • contains: 预期结果是否被包含在实际结果中
  • endswith: 以…结尾
  • greater_or_equals: 大于等于
  • greater_than: 大于
  • length_equal: 长度等于
  • length_greater_or_equals: 长度大于等于
  • length_greater_than: 长度大于
  • length_less_or_equals: 长度小于等于
  • length_less_than: 长度小于
  • less_or_equals: 小于等于
  • less_than: 小于
  • not_equal: 不等于
  • regex_match: 字符串是否符合正则表达式匹配规则
  • startswith: 以…开头
  • string_equals: 字符串相等
  • type_match: 类型是否匹配
  • 场景:想要校验响应状态码和响应体中foo1的返回值

yaml

validate:
        - eq: ["status_code", 200]
        - eq: ["body.args.foo1", "bar11"] # jmespath提取变量值,期望值

pytest

  • 先调用validate(),在调用assert_equal(‘实际值’,‘期望值’)
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.args.foo1", "bar11")

说明

  • 提取响应状态码,可直接status_code
  • 提取响应值 body.args.foo1 , 其中body是固定值,如下图为响应体
相关文章
|
2月前
|
数据采集 Python
Python实用记录(七):通过retinaface对CASIA-WebFace人脸数据集进行清洗,并把错误图路径放入txt文档
使用RetinaFace模型对CASIA-WebFace人脸数据集进行清洗,并将无法检测到人脸的图片路径记录到txt文档中。
43 1
|
6月前
|
JSON JavaScript 测试技术
掌握JMeter:深入解析如何提取和利用JSON数据
Apache JMeter教程展示了如何提取和使用JSON数据。创建测试计划,包括HTTP请求和JSON Extractor,设置变量前缀和JSON路径表达式来提取数据。通过Debug Sampler和View Results Tree监听器验证提取结果,然后在后续请求和断言中使用这些数据。此方法适用于复杂测试场景,提升性能和自动化测试效率。
|
5月前
|
JSON 文字识别 数据格式
文本,文识11,解析OCR结果,paddOCR返回的数据,接口返回的数据有code,data,OCR返回是JSON的数据,得到JSON数据先安装依赖,Base64转换工具网站在21.14
文本,文识11,解析OCR结果,paddOCR返回的数据,接口返回的数据有code,data,OCR返回是JSON的数据,得到JSON数据先安装依赖,Base64转换工具网站在21.14
文本,文识11,解析OCR结果,paddOCR返回的数据,接口返回的数据有code,data,OCR返回是JSON的数据,得到JSON数据先安装依赖,Base64转换工具网站在21.14
|
4月前
|
JSON 数据格式
langchain 入门指南 - JSON 形式输出大模型的响应
langchain 入门指南 - JSON 形式输出大模型的响应
157 0
|
5月前
|
文字识别 Java Python
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
|
5月前
|
JSON Java Serverless
函数计算产品使用问题之如何使用Go SDK从HTTP上下文中提取JSON数据
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
XML 数据格式 Python
Python使用xpath对解析内容进行数据提取
今天就介绍一个用于提取所需数据的方法之一xpath。在后续会讲解bs4(beautifulsoup),re正则表达式。
|
7月前
|
Python
Python—提取页面上所有信息输出excel
Python—提取页面上所有信息输出excel
|
JSON 数据格式
jmeter--json 提取器
jmeter--json 提取器
|
JSON 数据格式 索引
03-Httprunner-JMESPath提取返回结果
03-Httprunner-JMESPath提取返回结果