当前位置: 首页 > news >正文

JMeter中返回Json数据的处理方法

Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛。而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Json 数据的响应处理。本文中假设需要从 HTTP 的响应头中返回的 Json 格式的数据流中抽取某些特定的数据,数据格式如下:

{

   "name":"Simpsons family",

   "members":[

                {"firstName":"Homer", "lastName":"Simpson"},

                {"firstName":"Marge", "lastName":"Simpson"},

                {"firstName":"Bart", "lastName":"Simpson"},

                {"firstName":"Lisa", "lastName":"Simpson"},

                {"firstName":"Maggie", "lastName":"Simpson"}

            ]

}

下面我们使用不同的方法来进行数据的抽取工作:

正则表达式提取

JMeter 安装了正则表达式插件之后,可以按照固定的格式从字符串中提取数据,而本例中正则表达式如下所示:

"firstName":"(.+?)"

使用了该表达式之后会返回所有服从表达式的字符串,但是只有一个表达式是我们所关注的。可以使用$1$ 来作为模板,而 3 则会返回第三个数据。

 当偶尔需要对Json数据进行处理时,正则表达式是一个合适的选择,它的一个优势在于JMeter本身就内置了Json处理模块。但是,阅读处理正则表达式却是比较复杂的,特别是对于某些复杂的Json数据。

JMeter JSON 插件

另一种处理 Json 数据的方法是使用 JMeter 的插件,该插件可以使用 JSONPath 来获取 JSON 数据中特定位置的数据。类似于 XML 文件中的 XPath , JSONPath 可以使用简单的表达式来操作 Json 对象。 JSON Path Extractor 是一个开源的增加了 post处理器的插件,可以将该插件的 Lib 文件拷贝到 JMeter 的 lib 目录下即可。

而上文中提及的需要定位的数据可以使用如下的JSONPath 进行描述:

$.members[2].firstName

 JMeter 中,只需要从 PostProcessor 菜单中打开 JSON Path Extractor 然后输入变量名与默认值即可,如下所示:

 

JSONPath 表达式较短并且易于阅读,能够有效提高测试脚本的易维护性,该插件并不随着标准的 JMeter 一起安装。

BeanShell Post Processor

最后一种方法即是借用了 JMeter 的对于 BeanShell 支持的特性, BeanShell 是一个轻量级的面向 Java 的脚本语言。 BeanShell Post Processor 允许使用标准的 Java 语法来处理 Json 数据,使用方法如下图所示:

 

总结

本文列举出了三种可用的从 Json 格式的返回值中提取数据的方法,正则表达式对于简单的 Json 格式的数据的快速标准化非常占优势。而 JsonPath 插件可以用于创建能够被维护修改的脚本,但是需要额外的插件安装工作。而最后的带 JSON 库的BeanShell 确实非常详细并且依赖于 Java 语言的灵活性可以进行进一步的开发。

转载于:https://www.cnblogs.com/mochaMM/p/7010204.html

相关文章:

  • getopts命令行参数处理
  • SparkSQL架构
  • 两个fragment之间简单的跳转
  • Spring《六》管理Bean
  • Python开发【第四篇】:Python基础之函数
  • 【cocos2d-x 3.7 飞机大战】 决战南海I (四) 敌机管理
  • 先来认识一些UML图标
  • C# 泛型
  • Android使用Canvas画图
  • 14.6 将运算分组为事务
  • bpm功能指标
  • 《Effective Modern C++》翻译--条款4:了解怎样查看推导出的类型
  • nginx 前端调度 对后端的app的生存状态的检测
  • 《计算机科学导论》一1.6计算机科学作为一门学科
  • dede的应用
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 30秒的PHP代码片段(1)数组 - Array
  • AWS实战 - 利用IAM对S3做访问控制
  • Bootstrap JS插件Alert源码分析
  • HTTP--网络协议分层,http历史(二)
  • HTTP中GET与POST的区别 99%的错误认识
  • laravel 用artisan创建自己的模板
  • Laravel 中的一个后期静态绑定
  • linux安装openssl、swoole等扩展的具体步骤
  • Mybatis初体验
  • PHP变量
  • React系列之 Redux 架构模式
  • SOFAMosn配置模型
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Yii源码解读-服务定位器(Service Locator)
  • 高程读书笔记 第六章 面向对象程序设计
  • 后端_MYSQL
  • 前端js -- this指向总结。
  • 入口文件开始,分析Vue源码实现
  • 微服务入门【系列视频课程】
  •  一套莫尔斯电报听写、翻译系统
  • ​520就是要宠粉,你的心头书我买单
  • ​ubuntu下安装kvm虚拟机
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (poj1.3.2)1791(构造法模拟)
  • (多级缓存)多级缓存
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (四)Controller接口控制器详解(三)
  • (转)关于pipe()的详细解析
  • (转载)虚函数剖析
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET MVC第三章、三种传值方式
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET下的多线程编程—1-线程机制概述
  • .net项目IIS、VS 附加进程调试