Jmeter接口关联(一)【使用json层级方式提取值】与python中使用层级方式提取值 完成接口关联

文章目录

  • 前言
  • 一、按照 json 的路径来提取
    • ​​​​​​​(1)成功匹配到数据的案例(按照层级匹配)
    • (2)失败未匹配到数据的案例(没有按照层级匹配)
    • json提取器
  • 二、使用完整的接口关联,完成两个接口的请求
  • 三、使用Python来完成接口的关联
  • 四、注意点


前言

使用了聚合数据里面的接口来做接口,已经接口关联。

聚合数据网址:聚合数据-个人中心

选择两个接口:

天气预报接口

老黄历接口


天气预报接口:

请求Key:79a35e2a5997710f3bdc86de81f21dbb

根据城市查询天气

接口地址:http://apis.juhe.cn/simpleWeather/query

请求方式:http get/post

返回类型:json

接口描述:通过城市名称或城市ID查询天气预报情况

接口调试: API测试工具

请求Header:

名称
Content-Typeapplication/x-www-form-urlencoded

请求参数说明:

名称必填类型说明
citystring要查询的城市名称/id,城市名称如:温州、上海、北京,需要utf8 urlencode
keystring在个人中心->我的数据,接口名称上方查看


老黄历接口:

请求Key:949e4265cda71e7be277a3a25e23c576

日历

接口地址:http://v.juhe.cn/laohuangli/d

请求方式:http get/post

返回类型:json/xml

接口描述:日期开始时间为2010-01-01

接口调试: API测试工具

请求Header:

名称
Content-Typeapplication/x-www-form-urlencoded

请求参数说明:

名称必填类型说明
keystring在个人中心->我的数据,接口名称上方查看
datestring日期,格式2014-09-09


一、按照 json 的路径来提取

使用这种方法就需要按照json格式的层级才会匹配到数据,这种方法就是老老实实的一层一层的匹配,就是绝对路径匹配。

在察看结果树中,先使用测试的方式进行匹配。

步骤:察看结果树

(1)成功匹配到数据的案例(按照层级匹配):

(2)失败未匹配到数据的案例(没有按照层级匹配):

json提取器

步骤:

右键线程组——添加——后置处理器——json提取器

json提取器中的字段解释:

 


二、使用完整的接口关联,完成两个接口的请求

1、请求天气预报的接口,获取到时间

2、在请求老黄历接口中使用天气预报接口里面的时间

步骤:

(1)添加一个http请求,用来请求天气预报接口

 (2)添加一个查看结果树——(目的是用来查看天气预报接口返回的数据)

在这一步中我们需要实际模拟一下json路径的提取

 

(3) 添加一个json 路径提取器——(主要是用来提取天气预报接口的数据)

 (4)添加一个http请求——(主要是发送老黄历接口)

(5)再次添加一个察看结果树——(目的是用来查看老黄历返回的数据)

注意:察看结果树,其实可以只添加一个就行。因为这个东西就是用来察看结果的,会把所有响应的数据都放在这个里面。但是放两个或者多个也不影响。如果放多个在每一个响应的后面,便于观察每一个结果返回的数据。


三、使用Python来完成接口的关联

import requests# 天气预报的接口所需要传的参数
url1 = "http://apis.juhe.cn/simpleWeather/query"
key1 = "79a35e2a5997710f3bdc86de81f21dbb"# 老黄历接口所需要传的参数
url2 = "http://v.juhe.cn/laohuangli/d"
key2 = "949e4265cda71e7be277a3a25e23c576"# 把两个参数放在data字段中
data1 = {"city": "上海","key": key1
}# 发送接口的请求
req1 = requests.request(method="post", url=url1, data=data1)# 把json格式的字符转化为字典格式,便于使用字典的提取方式提取值
a = req1.json()
print(a)  # 这个地方是打印出来看下返回的结果
## 使用字典的方式提取想要的值,这里我是固定提取了第三个值,因为索引是从0开始
new_time = a["result"]['future'][2]["date"]# a={'reason': '查询成功!', 'result': {'city': '上海', 'realtime': {'temperature': '30', 'humidity': '90', 'info': '小雨', 'wid': '07', 'direct': '西北风', 'power': '2级', 'aqi': '52'}, 'future': [{'date': '2023-07-10', 'temperature': '27/34℃', 'weather': '小雨转阴', 'wid': {'day': '07', 'night': '02'}, 'direct': '南风'}, {'date': '2023-07-11', 'temperature': '28/35℃', 'weather': '阴转多云', 'wid': {'day': '02', 'night': '01'}, 'direct': '南风'}, {'date': '2023-07-12', 'temperature': '27/35℃', 'weather': '多云转阴', 'wid': {'day': '01', 'night': '02'}, 'direct': '南风'}, {'date': '2023-07-13', 'temperature': '27/35℃', 'weather': '阴', 'wid': {'day': '02', 'night': '02'}, 'direct': '南风'}, {'date': '2023-07-14', 'temperature': '28/35℃', 'weather': '阴', 'wid': {'day': '02', 'night': '02'}, 'direct': '南风'}]}, 'error_code': 0}
#
# b=a["result"]['future'][2]["date"]print(new_time)  # 打印出来看看是不是我们想要的那个值# 把上面提取出来的值放在老黄历接口的数据中
data2 = {"key": key2,"date": new_time
}# 请求老黄历接口
req2 = requests.request(method="post", url=url2, data=data2)
# 打印出返回的数据
print(req2.text)
{'reason': '查询成功!', 'result': {'city': '上海', 'realtime': {'temperature': '31', 'humidity': '88', 'info': '小雨', 'wid': '07', 'direct': '西北风', 'power': '2级', 'aqi': '52'}, 'future': [{'date': '2023-07-10', 'temperature': '27/34℃', 'weather': '小雨转阴', 'wid': {'day': '07', 'night': '02'}, 'direct': '南风'}, {'date': '2023-07-11', 'temperature': '28/35℃', 'weather': '阴转多云', 'wid': {'day': '02', 'night': '01'}, 'direct': '南风'}, {'date': '2023-07-12', 'temperature': '27/35℃', 'weather': '多云转阴', 'wid': {'day': '01', 'night': '02'}, 'direct': '南风'}, {'date': '2023-07-13', 'temperature': '27/35℃', 'weather': '阴', 'wid': {'day': '02', 'night': '02'}, 'direct': '南风'}, {'date': '2023-07-14', 'temperature': '28/35℃', 'weather': '阴', 'wid': {'day': '02', 'night': '02'}, 'direct': '南风'}]}, 'error_code': 0}
2023-07-12
{"reason":"successed","result":{"id":"4795","yangli":"2023-07-12","yinli":"癸卯(兔)年五月廿五","wuxing":"路旁土 建执位","chongsha":"冲牛(乙丑)煞西","baiji":"辛不合酱主人不尝 未不服药毒气入肠","jishen":"守日 月恩 圣心","yi":"嫁娶 纳采 出行 祭祀 祈福 解除 移徙 入宅","xiongshen":"小时 月建 土府 元武","ji":"动土 安葬"},"error_code":0}进程已结束,退出代码0

用json层级的方式验证提取的值

首先把第一个天气预报的接口的数据拿出来(注意:先把返回的接口的数据从json格式的字符串转换成字典)

a={'reason': '查询成功!', 'result': {'city': '上海', 'realtime': {'temperature': '31', 'humidity': '88', 'info': '小雨', 'wid': '07', 'direct': '西北风', 'power': '2级', 'aqi': '52'}, 'future': [{'date': '2023-07-10', 'temperature': '27/34℃', 'weather': '小雨转阴', 'wid': {'day': '07', 'night': '02'}, 'direct': '南风'}, {'date': '2023-07-11', 'temperature': '28/35℃', 'weather': '阴转多云', 'wid': {'day': '02', 'night': '01'}, 'direct': '南风'}, {'date': '2023-07-12', 'temperature': '27/35℃', 'weather': '多云转阴', 'wid': {'day': '01', 'night': '02'}, 'direct': '南风'}, {'date': '2023-07-13', 'temperature': '27/35℃', 'weather': '阴', 'wid': {'day': '02', 'night': '02'}, 'direct': '南风'}, {'date': '2023-07-14', 'temperature': '28/35℃', 'weather': '阴', 'wid': {'day': '02', 'night': '02'}, 'direct': '南风'}]}, 'error_code': 0}# 使用json层级(在这里可以理解为字典的层级)方式,来提取值
new_time = a["result"]['future'][2]["date"]# 打印出来看看是否被提取到想要的值
print(new_time)


四、注意点:

在Jmeter中,参数字段填写中,中文字符不不要加上引号,这里会直接变成字符串

 

 

 


总结:

本篇文章里面涉及到:

json提取器的字段解释

Jmeter中使用json层级提取器

Jmeter中接口关联的变量和提取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/17530.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django框架-11

聚合查询 1.聚合函数 使用aggregate()过滤器调用聚合函数。聚合函数包括:Avg 平均,Count 数量,Max 最大,Min 最 小,Sum 求和,被定义在django.db.models中。 例:查询图书的总阅读量。 from mo…

前端全集Ⅰ---- HTML/CSS/JavaScript

一 介绍web开发 Web:全球广域网,也称万维网,能够通过浏览器访问的网站 Web网站的工作流程:(前后端分离模式) 网页有哪些组成? 文字、图片、视频、音频、超链接 前端代码通过浏览器的解析和渲…

导入Excel数据【EasyPoi实战系列】- 第480篇

历史文章(文章累计480) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 【…

docker 安装zookeeper单机版

1. 安装版本3.5.7, 也可以自己去官网找到自己需要的版本复制命令即可 https://hub.docker.com/_/zookeeper/tags docker pull zookeeper:3.5.7 2. 创建映射文件夹: #1. 在centos中创建三个文件夹 mkdir -p /home/zookeeper/conf mkdir -p /home/zookeeper/data mkd…

Redis事务

reids事务是指将多条命令放在一个队列当中,保证多个命令在同一个事务中执行而不受其他客户端的影响。 mutil 表示开启事务 命令1 命令2 命令3 exec 表示执行事务 redis的事务中不会保证原子性,假如命令3有误,并不会影响命令1和命令2的执行…

Linux信号机制-2

转自:Linux信号处理_linux 信号处理函数_努力啃C语言的小李的博客-CSDN博客 什么是信号 信号本质上是在软件层次上对中断机制的一种模拟,其主要有以下几种来源: 程序错误:除零,非法内存访问等。 外部信号&#xff1a…

Mybatis从0到1 SQL注入 参数占位符 XML配置 动态SQL

1. Mybatis基础操作 学习完mybatis入门后,我们继续学习mybatis基础操作。 1.1 需求 需求说明: 根据资料中提供的《tlias智能学习辅助系统》页面原型及需求,完成员工管理的需求开发。 通过分析以上的页面原型和需求,我们确定了功能…

我爱学QT-仿写智能家居界面 上 中 下

学习链接: 仿写一个智能家居界面(上)_哔哩哔哩_bilibili 上 给QT工程添加资源文件 在这里 然后选这个,choose后会有起名,之一千万不能是中文,要不就等报错吧 然后把你要添加的图片托到文件夹下&#xf…

TortoiseGit 入门指南01:环境搭建和软件设置

在我的博文Keil MDK环境下Git入门指南的最后,我这样写道: 目前使用 TortoiseGit 管理工程,用 Gitee 作为远程仓库。 命令行 Git 已经不再使用。 当时我并没有介绍软件 TortoiseGit 的使用方法,这个系列补上。如果你还没有看过《Ke…

希尔排序及其时间复杂度(图文详解)

😾 博客主页: 爱吃bug的猿 🚀博客专栏: 数据结构,C语言初阶进阶全流程讲解 😽😽😽如果喜欢博主的文章,可以给博主点波赞和关注加速博主更新 文章目录 前言1. 代码思路代码实现法1代码实现法2(不…

HashMap底层原理:数据结构+put()流程+2的n次方+死循环+数据覆盖问题

导航: 【Java笔记踩坑汇总】Java基础进阶JavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线MySQL高级篇设计模式常见面试题源码_vincewm的博客-CSDN博客 目录 一、底层 1.1 HashMap数据结构 1.2 扩容机制 1.3 put()流程 1.4 HashMap是如何计算…

【Python爬虫与数据分析】Jupyter的安装与快捷键

目录 一、jupyter notebook安装与配置 二、命令模式快捷键 三、编辑模式快捷键 四、文件操作 一、jupyter notebook安装与配置 安装:Jupyter Notebook是以网页的形式打开的一个程序,集成在Anaconda包里面,也可以直接安装python3解释器&a…