jsonpath做接口封装使用技巧

下面是关于“jsonpath做接口封装使用技巧”的详细攻略:

什么是JsonPath

JsonPath是一种轻量级的、语言无关的解析JSON数据的语法。类似于XPath,使用JsonPath可以通过简短的表达式来找到JSON文档中的某个元素,支持复杂的嵌套场景,非常适合做接口测试用例的编写。

JsonPath的语法

JsonPath的语法比较简单,以下是一些常用的表达式:

  1. $.:表示根节点。
  2. @:表示当前节点。
  3. .:表示属性选择器,如$.foo表示选择根节点下的foo属性。
  4. []:表示索引选择器,如$[1]表示选择根节点下的第2个元素。
  5. *:表示通配符选择器,如$.store.*表示选择根节点下的store对象下的所有属性。
  6. .[]* 可以组成更复杂的表达式,例如 $.store.book[0].title

使用表达式可以获取JSON文档中的任何元素。JsonPath还支持一些函数,包括minmaxavg等等,可以对选择器的结果进行处理。

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技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • Python 处理数据的实例详解

    Python处理数据的实例详解 Python是一种流行的编程语言,广泛用于数据处理和分析。本文将介绍如何使用Python处理数据的实例详解,包括数据读取、数据清洗、分析和可视化等方面。 数据读取 在Python中,我们可以使用pandas库来读取各种格式的数据文件,如、Excel、JSON。以下是一个示例,演示如何使用pandas库读取CSV文件: impo…

    python 2023年5月13日
    00
  • 关于js中removeEventListener取消事件监听的坑

    下面我会详细讲解关于JS中removeEventListener取消事件监听的坑的攻略。 什么是removeEventListener? removeEventListener()是一个方法,它用于从指定元素中移除事件监听器。例如,对于一个按钮元素,我们可以使用addEventListener()方法为它添加鼠标点击事件监听器,然后使用removeEvent…

    python 2023年6月13日
    00
  • 使用成对的输入文件和多个输出文件编写 bash 或 python for 循环

    【问题标题】:Writing a bash or python for loop with paired input files and multiple output files使用成对的输入文件和多个输出文件编写 bash 或 python for 循环 【发布时间】:2023-04-06 04:38:01 【问题描述】: 我正在研究用于分析 RNA-s…

    Python开发 2023年4月7日
    00
  • 详细解读Python字符串的使用与f-string

    下面我将详细解读Python字符串的使用与f-string。 Python字符串的使用 Python字符串可以使用单引号(’),双引号(”)或三引号(”’或”””)来表示。其中,单引号和双引号用于表示一行字符串,而三引号用于表示多行字符串。 以下是一些常见的Python字符串操作: 字符串拼接 使用+运算符将两个或多个字符串拼接在一起。例如: a = &q…

    python 2023年6月5日
    00
  • Python实现多脚本处理定时运行

    Python实现多脚本处理定时运行攻略 在Python中,我们可以使用cronjob或者apscheduler等库实现多脚本定时运行功能,以下是详细步骤。 步骤一:安装定时任务库 我们可以使用pip命令来安装cronjob或apscheduler库。 pip install cronjob 或者 pip install apscheduler 步骤二:编写定…

    python 2023年5月19日
    00
  • python获取指定日期范围内的每一天,每个月,每季度的方法

    要获取指定日期范围内的每一天,每个月,每季度的方法,需要使用Python标准库中的datetime和dateutil模块。以下是详细的攻略步骤: 步骤一:导入模块 from datetime import datetime, timedelta from dateutil.relativedelta import relativedelta 在这里,date…

    python 2023年6月2日
    00
  • Python正则表达式使用范例分享

    Python正则表达式使用范例分享 正则表达式是一种用于描述字符串模式的语言,可以用于配、查找、替换和分割。在Python中,可以使用re模块来使用正则表达式。本文将详细介绍Python中正则表达式的语法、字符集、转义字符以及常用函数,并提供两个示例说明。 正则表达式语法 正则表达式由普通字符和元字符组成,普通字符表示本身,而元字符有特殊的含义。下面是一些常…

    python 2023年5月14日
    00
  • Selenium+Python自动化脚本环境搭建的全过程

    下面是Selenium+Python自动化脚本环境搭建的全过程: 准备工作 安装Python 首先需要安装Python。可以从官方网站 https://www.python.org/downloads/ 下载,建议下载最新的稳定版。安装时需要注意设置环境变量。 安装pip pip 是 Python 包管理工具,通过它可以方便地下载并安装 Python 包。在…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部