其他分享
首页 > 其他分享> > 03-Httprunner-JMESPath提取返回结果

03-Httprunner-JMESPath提取返回结果

作者:互联网

JMESPath提取返回结果


前言

JMESPath简介

   python中使用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取值
    在这里插入图片描述

  切片

  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
    在这里插入图片描述

过滤器使用

管道表达式

多选

函数的使用

  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

extract:
        foo3: "body.args.foo2"

  pytest

.extract()
.with_jmespath("body.args.foo2", "foo3")

validate 校验结果

  • 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: 类型是否匹配

  yaml

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

  pytest

.validate()
.assert_equal("status_code", 200)
.assert_equal("body.args.foo1", "bar11")

说明

标签:03,Httprunner,args,使用,提取,JMESPath,取值,jmespath,表达式
来源: https://blog.csdn.net/IT_heima/article/details/123022484