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 语言的灵活性可以进行进一步的开发。

最新文章

  1. 从零自学Hadoop(02):环境准备
  2. spring的路径通配符
  3. 理解 OpenStack 高可用(HA)(2):Neutron L3 Agent HA 之 虚拟路由冗余协议(VRRP)
  4. Buffer、Channel示例
  5. AFNetworking菊花转圈圈
  6. CSS 奇技淫巧十八招
  7. 西南科技大学第十一届ACM程序设计大赛发言稿
  8. weblogic配置数据源出错
  9. 寒假ACM训练(二)
  10. hdu 5442 Favorite Donut 最大表示法+kmp
  11. 使用pager进行分页
  12. ●SPOJ 1811 Longest Common Substring
  13. SI9000常用共面阻抗模型的解释
  14. [Swift]LeetCode661. 图片平滑器 | Image Smoother
  15. C#生成MD5的方法
  16. FileZilla客户端连接腾讯云FTP服务器时出现“227 Entering Passive Mode”
  17. JS传值中文乱码解决方案
  18. Linux平台下停止后台进程脚本编写
  19. keras embeding设置初始值的两种方式
  20. sencha touch 分享到微博扩展

热门文章

  1. Pandas系列
  2. 文件IO大纲
  3. 五十一 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapyd部署scrapy项目
  4. 将本地代码提交到gitlub
  5. Juniper
  6. [转载]java开发实现word在线编辑及流转
  7. window.location与window.open()的区别
  8. jQ通过cookie记住用户名
  9. mysql注入介绍
  10. springmvc跨域(转)