jsonpath做接口封装使用技巧

yizhihongxing

下面是关于“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利用Appium实现自动控制移动设备并提取数据功能

    Python利用Appium实现自动控制移动设备并提取数据功能 什么是Appium? Appium 是一个开源的自动化测试框架,用于测试移动应用程序,可以支持多种移动操作系统和编程语言,包括 iOS、Android、Windows等系统和Java、Python等编程语言。 实现自动化控制移动设备需要准备的工具 安装 Appium Server 安装 Pyth…

    python 2023年6月5日
    00
  • python输出第n个默尼森数的实现示例

    Python输出第n个默尼森数的实现示例 什么是默尼森数? 默尼森数是指能够表示为 $2^{p}-1$ 形式的素数,在此形式表达时,p 也必须是一个素数。例如:当p=2时,则$2^2-1=3$;当p=3时,则$2^3-1=7$。 对于任意一个默尼森数,假如其对应的p是质数,那么该默尼森数肯定也是质数,因此,默尼森数可以在RSA加密算法中用作大素数。 如何输出…

    python 2023年6月3日
    00
  • python中使用urllib2获取http请求状态码的代码例子

    下面是python中使用urllib2获取http请求状态码的完整攻略。 1. urllib2介绍 urllib2是Python自带的一个HTTP客户端库,可以用来向Web服务器发送HTTP请求并获取响应。它提供了一个模块化的操作方式,大大简化了HTTP协议编写过程,适用于爬虫、Web开发等多个领域。 2. urllib2使用方法 使用urllib2的一般步…

    python 2023年6月3日
    00
  • Python转码问题的解决方法

    Python转码问题的解决方法 在使用Python进行编程时,经常会遇到编码(encoding)或解码(decoding)的问题。这种问题主要出现在读写文本文件、网络请求和处理命令行参数等场景中。本文将介绍Python中常见的编码相关问题,以及如何解决它们。 Python中的编码问题 Python为了支持不同的语言环境和字符集,采用了Unicode字符集,而…

    python 2023年5月13日
    00
  • Python cookie的保存与读取、SSL讲解

    本攻略将提供一个Python cookie的保存与读取、SSL讲解,包括cookie的概念、保存与读取cookie的方法,以及SSL的概念和使用方法。攻略将包含两个示例,分别演示如何保存和读取cookie,以及如何使用SSL。 Cookie的保存与读取 Cookie是Web编程中的基本概念,用于在客户端和服务器之间传递数据。以下是一个示例,演示如何使用Pyt…

    python 2023年5月15日
    00
  • C# 如何调用python脚本

    C# 调用 Python 脚本需要借助 Python 的交互式接口,包括以下步骤: 安装 Python 解释器和 Python 的相关库 在 C# 中调用 Python 脚本需要使用 Python 的交互式接口,因此需要在本地安装 Python 解释器和相关的库以供 C# 调用。可以从 Python 官网上下载并安装 Python 解释器,同时使用 pip …

    python 2023年5月18日
    00
  • Ubuntu linux 安装 PHP5.3.0的命令

    下面是安装PHP5.3.0的攻略: 1. 安装PHP5.3.0前的准备工作 在安装PHP5.3.0之前,需要先卸载掉原有的PHP版本,以免出现冲突。可以使用以下命令卸载: sudo apt-get remove php* 卸载完成之后,需要更新一下系统,执行以下命令: sudo apt-get update && sudo apt-get u…

    python 2023年6月3日
    00
  • Python中glob库实现文件名的匹配

    下面是详细的攻略: Python中glob库实现文件名的匹配 在Python中,我们可以使用glob库实现文件名的匹配。glob库提供了一个函数,可以根据指定的模式匹配文件名。本文将对Python中glob库的使用进行详细讲解,并提供两个示例说明。 glob库的使用 在Python中,我们可以使用glob库的glob函数实现文件名的匹配。glob函数接受一个…

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