jmeter ---json几种读取方式,ArrayList循环读取
在之前写过提取json数据格式的文章,这次对jmeter读取json数据格式进行整理。
举例一个接口的response 格式如下:
{
"data" : {
"device_vec" : [
{
"agent_version" : "9.7.0.2225",
"android_id" : "e3d699cf01620531",
"asset_number" : "",
"description" : "89vUwdwfVydEjqNAANxM11c72ujdmn",
"device_name" : "357568061882002",
"email" : "1504487508089@tt.com",
"encryption_log_count" : 0,
"encryption_version" : "",
"engine_version" : "9.715-1024",
"firewall_log_count" : 0,
"firewall_version" : "",
"group_id" : "aa000000-0000-0000-0000-000000000000",
"group_name" : "Default",
"id" : "35756806-1882-0020-0000-000000000000",
"imei" : "357568061882002",
"inactive_reason" : 0,
"install_time" : 1503642124,
"last_connected_time" : 1504742375,
"last_scan_time" : 1503642674,
"meid" : "",
"noncomp_reason" : "",
"os_version" : "4.3",
"pattern_version" : "2.437.00",
"phone_number" : "",
"platform_type" : 512,
"policy_id" : 32,
"policy_name" : "",
"security_status" : 3,
"status" : 3,
"user_name" : "test1504487508089",
"virus_log_count" : 26,
"wtp_log_count" : 0
},
{
"agent_version" : "2.0.0.1518",
"android_id" : "",
"asset_number" : "",
"description" : "3dLAbTlj7UQoOiodnAjDrfX1iI0PCx",
"device_name" : "Michael’s iPhone",
"email" : "1504487508089@tt.com",
"encryption_log_count" : 0,
"encryption_version" : "",
"engine_version" : "",
"firewall_log_count" : 0,
"firewall_version" : "",
"group_id" : "aa000000-0000-0000-0000-000000000000",
"group_name" : "Default",
"id" : "6954500b4f14e50bd20634481ee2c6d9f17b4ee3",
"imei" : "35 445006 267069 9",
"inactive_reason" : 0,
"install_time" : 1503641446,
"last_connected_time" : 1503652862,
"last_scan_time" : 1503641477,
"meid" : "35445006267069",
"noncomp_reason" : "",
"os_version" : "10.3.2",
"pattern_version" : "",
"phone_number" : "",
"platform_type" : 1024,
"policy_id" : 6,
"policy_name" : "",
"security_status" : 1,
"status" : 3,
"user_name" : "test1504487508089",
"virus_log_count" : 0,
"wtp_log_count" : 0
}
],
"total_count" : 2
},
"error_code" : 1,
"message" : "Success",
"timestamp" : 1504765848
}
下面就对device_vec取角标2的agent_version 参数进行提取。
方法一:Jmter Json插件,JSON Path Extractor 提取器。
处理Json数据的方法是使用JMeter的插件,该插件可以使用JSONPath来获取JSON数据中特定位置的数据。类似于XML文件中的XPath,JSONPath可以使用简单的表达式来操作Json对象。JSON Path Extractor是一个开源的增加了post处理器的插件,可以将该插件的Lib文件拷贝到JMeter的lib目录下或者通过Jmeter UI界面的Options-->Plugins Manager下载json插件即可。
可以使用如下的JSONPath进行描述:
$.data.device_vec[1].agent_version
在JMeter中,只需要从PostProcessor菜单中打开JSON Path Extractor然后输入变量名与默认值即可,如下所示:
JSONPath表达式较短并且易于阅读,能够有效提高测试脚本的易维护性,该插件并不随着标准的JMeter一起安装。
方法二:Jmter 正则表达式插件,正则表达式提取
JMeter安装了正则表达式插件之后,可以按照固定的格式从字符串中提取数据,而本例中正则表达式如下所示:
"agent_version":"(.+?)"
使用了该表达式之后会返回所有服从表达式的字符串,但是只有一个表达式是我们所关注的。可以使用1个组作为模板($1$),而2则会返回第二个数据。
方法三:Jmter BeanShell提取器, BeanShell提取器
借用了JMeter的对于BeanShell支持的特性,BeanShell是一个轻量级的面向Java的脚本语言。BeanShell Post Processor允许使用标准的Java语法来处理Json数据,使用方法如下图所示:
1.写一个jsonpath读取代码如下:
import java.util.LinkedHashMap; import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.Predicate; import net.minidev.json.JSONArray; public class GetJson {
public static String readjson(String json, String jsonPath){
try{
Object value = JsonPath.read(json, jsonPath, new Predicate[0]);
if (value instanceof Integer){
return value.toString();
}else if (value instanceof String){
return value.toString();
}else if (value instanceof Boolean){
return value.toString();
}else if (value instanceof JSONArray){
JSONArray arr = (JSONArray)value;
if(!arr.isEmpty()){
return arr.toJSONString();
}else
return "";
}else if (value instanceof LinkedHashMap){
return value.toString();
}else if (value instanceof Float) {
return value.toString();
}else{
return value.toString();
}
}catch(Exception e){
return "pathnotfound";
}
}
}
然后使用此方法来读取json数据格式
2.导入com.eclipsesource.json 方法直接读取json
com.eclipsesource.json,源码下载路径如下 https://github.com/ralfstx/minimal-json,只需将源码打成jar包放到jmeter的lib/ext目录下即可
com.eclipsesource.json 适用方法:http://static.javadoc.io/com.eclipsesource.minimal-json/minimal-json/0.9.3/com/eclipsesource/json/JsonObject.html
3.如果是循环读取,那就要算出List的长度做循环---用jsonpath读取方式去循环取(前面的jsonpath方法不再贴)
4.如果是循环读取,那就要算出List的长度做循环---用com.eclipsesource.json api 读取方式循环读
如下:
总结
本文列举出了三种可用的从Json格式的返回值中提取数据的方法,正则表达式对于简单的Json格式的数据的快速标准化非常占优势。而JsonPath插件可以用于创建能够被维护修改的脚本,但是需要额外的插件安装工作。而最后的带JSON库的BeanShell确实非常详细并且依赖于Java语言的灵活性可以进行进一步的开发。
jmeter ---json几种读取方式,ArrayList循环读取的更多相关文章
- json几种读取方式,ArrayList循环读取【转】
在之前写过提取json数据格式的文章,这次对jmeter读取json数据格式进行整理. 举例一个接口的response 格式如下: { "data" : { "devic ...
- 【Jmeter基础知识】Jmeter的三种参数化方式
JMeter的三种参数化方式包括: 1.用户参数 2.函数助手 3.CSV Data Set Config 一.用户参数 位置:添加-前置处理器-用户参数 操作:可添加多个变量或者参数 二.函数助手 ...
- Jmeter 参数化之 CSV Data Set Config 循环读取参数
对于做接口和性能测试,个人感觉Jmeter是一个非常方便易学的工具,今天随笔记录Jmeter 参数化之 CSV Data Set Config. 首先在开始记录之前,先搞明白2个问题 1.什么是参数化 ...
- jmeter的几种参数化方式
在用到jmeter工具时,无论做接口测试还是性能测试,参数化都是一个必须掌握且非常有用的知识点.参数化的使用场景,例如: 1)多个请求都是同一个ip地址,若服务器地址更换了,则脚本需要更改每个请求的i ...
- Jmeter脚本两种录制方式
Jmeter 是一个非常流行的性能测试工具,虽然与LoadRunner相比有很多不足,比如:它结果分析能力没有LoadRunner详细:很它的优点也有很多: l 开源,他是一款开源的免 ...
- Jmeter参数化四种方式
JMeter的三种参数化方式包括: 1.用户参数 2.函数助手 3.CSV Data Set Config/CSV数据配置文件 4.用户自定义变量 一.用户参数 位置:添加-前置处理器-用户参数 操作 ...
- 第63天:json的两种声明方式
一. json 两种声明方式 1. 对象声明 var json = {width:100,height:100} 2. 数组声明 var man = [ // 数组的 js ...
- jmeter的三种参数化方法
JMeter的三种参数化方式包括: 1.用户参数 2.函数助手 3.CSV Data Set Config 一.用户参数 位置:添加-前置处理器-用户参数 操作:可添加多个变量或者参数 二.函数助手 ...
- Perl读取标准输入<STDIN>、读取文件输入<>和chomp函数
读取标准输入<STDIN> <STDIN>表示从标准输入中读取内容,如果没有,则等待输入.<STDIN>读取到的结果中,如果没有意外,都会自带换行符. 例如,tes ...
随机推荐
- java泛型(整理)
1 泛型基础知识 泛型需要理解两个关键点:1)类型擦除 2)类型转换 1)类型擦除 泛型有个很重要的概念,是类型擦除.正确理解泛型概念的首要前提是理解类型擦除(type erasure). Java中 ...
- 1.Why Apache Spark?
Why Apache Spark? 1 Why Apache Spark 2 关于Apache Spark 3 如何安装Apache Spark 4 Apache Spark的工作原理 5 spark ...
- STM32初学Keil4编译时出现 Error:Failed to execute 'BIN40/Armcc'
一种是在系统开始--运行里输入cmd,查看armcc状态.详情见推文: http://blog.csdn.net/hicui/article/details/7350805(笔记记录,请勿见怪) 都没 ...
- JAVA多线程之Synchronized关键字--对象锁的特点
一,介绍 本文介绍JAVA多线程中的synchronized关键字作为对象锁的一些知识点. 所谓对象锁,就是就是synchronized 给某个对象 加锁.关于 对象锁 可参考:这篇文章 二,分析 s ...
- 从 Vue 1.x 迁移 — Vue.js
闲聊: 又到周五啦,明天不用上班啦哈哈哈哈哈,想想就好开心啊,嘻嘻,小颖这周三的早晨做个一个美梦,把自己愣是笑醒了,梦的大概剧情我忘记了,总之宝宝是被笑醒的,行了之后还傻笑了一段时间,真希望每天早上都 ...
- 《奇思妙想》在JavaScript语言中floor和round方法在某种随机分配场景下对分配区间的公平性!!!
前言 大欢哥的题目完成了,但是衍生出一个新的问题!上篇随笔中我和大欢哥采用的随机数生成方式,到底是谁的比较公平??? 正文 欢迎来到阿段博客<奇思妙想>!我们的口号是 “心有多大,bug就 ...
- C#和NewSQL更配 —— CockroachDB入门(可能是C#下的全网首发)
阅读目录 CockroachDB是什么 环境部署 实战 性能测试 结语 一.CockroachDB是什么 CockroachDB(https://www.cockroachlabs.com)是Goog ...
- UE4 C++ 跳转网页
FString TheURL = "https://home.cnblogs.com/u/huojiaoqingchun0123/"; FPlatformProcess::Laun ...
- mybatis 详解(十)------ 逆向工程
通过前面的学习,在实际开发中,我们基本上能对mybatis应用自如了,但是我们发现了一个问题,所有操作都是围绕着po类,xxxMapper.xml文件,xxxMapper接口等文件来进行的.如果实际开 ...
- CSS3基础(2)—— 文字与字体相关样式、盒子类型、背景与边框相关样式、变形处理、动画功能
一. CSS3 文字与字体相关样式 1. 给文字添加阴影 text-shadow: length length length ccolor; 属性适用于文本阴影,指定了水平阴影,垂直阴影,模糊的距离, ...