今天跟大家一起学习如何在jmeter中做json数据对比,希望对大家有帮助。
Jmeter中JDBC Request和BeanShellPostProcessor的结合使用方法以及json数据对比;
一、Jmeter连接数据库
1. 下载对应数据库的驱动包到jmeter安装目录的lib下ext文件中,并导入到jmeter的测试计划中,本实例中使用的是mysql如下所示:
点击测试计划-->点击浏览-->选中mysql驱动jar包-->打开
2. 添加线程组,并在线程组下新建一个JDBC Connection Configuration配置元件,详细配置如下:
其中, Variable Name:testdb 定义变量名称,作用:说明哪个JDBC Request需要引用此配置,jdbc请求时需要用到此变量,变量值自定义保持一致即可;
Database Connection Configutration配置要访问的数据库信息
- Database URL:数据库连接的信息
- JDBC Driver class:com.mysql.jdbc.Driver 数据库的连接驱动名称
- Username:数据库的用户名
- Password:数据库的密码
3. 新建一个JDBC请求,测试连接数据库,详细步骤如下:
Variable Name:输入需要引用的JDBC配置(当前输入的数值与JDBCConnection Configuration相同的名称),两者的变量名称是需要一致的 ,就代表引用哪一个数据库连接Query Type:输入查询的类型(默认选择Select Statement,即只执行第一条select语句)
Restult Variable name:将所查询的结果放到此结果集中(result)
4. 添加BeanShell PostProcessor并从中取出结果集
取出结果集中的数据:
columnValue =vars.getObject(“resultObject”).get(0).get(“Column Name”);
- vars.getObject(“resultObject”):代表从哪个结果集中取数据
- get(0):取第几行
- get(“ColumnName”):取哪一列(哪一列即为JDBCRequest查询结果中的字段名)
备注:
1)columnValue= vars.getObject(“resultObject”).get(0).get(“Column Name”),返回的类型是Object类型。
2)需要将Object类型转换成String类型(取出对象的名称.toString())。
例如:columnValueResule.toString()),其中columnValueResule是取出的对象名称
3)取出来的变量放到jmeter中,用此方法:vars.put(“key”,Value)。
例如:vars.put(“xxxx”,DBclassname.toString());如果要引用此查询语句的结果,只需要引用key值就可以https://www.cnblogs.com/baoziluo/p/9099375.html
二、Jmeter对Json格式数据的三种处理方式
示例,若从如下json数据中取loginName的值:
{
"flag":true,
"message":"",
"data":{
"user":{
"id":"0200167a-03f5-49c1-a822-886fad2e8413",
"name":null,
"loginName":"user",
"passowrd":null,
"userType":-1,
"userTypeText":"普通用户"
},
"extands":[
{
"id":"f212abcd-7b73-4dcd-9614-81d7331d488c",
"name":"爱好",
"nameCode":"like"
}
]
}
}
1. 使用正则表达式提取请求响应中的值
1) 添加Jmeter正则表达式提取器
添加—>后置处理器—>正则表达式提取器
2)Jmeter正则表达式提取器控制面板
其中:
引用名称:定义变量名称,后续请求将要引用到的变量名,如填写的是:login_name,后面的引用方式是${ login_name}
正则表达式:提取内容的正则表达式,相当于lr中的关联函数
() 括起来的部分就是需要提取的,对于你要提的内容需要用小括号括起来
. 点号表示匹配任何字符串
+ 一次或多次
? 在找到第一个匹配项后停止
模板:用$$引用起来,如果在正则表达式中有多个正则表达式(多个括号括起来的),则可以是$2$,$3$等,表示解析到的第几个值给login_name。例如:$1$表示匹配到的第一个值
匹配数字:0代表随机取值,-1代表所有值,此时提取结果是一个数组,其余正整数代表第几个匹配的内容提取出来。如果匹配数字选择的是-1,还可以通过${ login_name _1}的方式来取第1个匹配的内容,${ login_name _2}来取第2个匹配的内容。
缺省值:正则匹配失败时,取的值
2. 使用 JMeter 的插件JSONPath 来获取 JSON 数据中字段的数据
1)添加—>后置处理器-JSON Extractor
2)使用方法
Variable names : 变量名称
JSONPath Expression:JSON表达式
Match Numbers:匹配哪个,可为空即默认第一个
Default Value:未取到值的时候默认值
备注:jmeter中通过vars.get("loginName")来读取;
3. 使用JMeter的BeanShell PostProcessor来处理Json数据
1)将json-lib-2.4-jdk15.jar拷贝到 jmeter lib 文件夹下后重启 jmeter
2)在Sampler上面添加后置处理器-->BeanShell PostProcessor
3)在Sampler上面添加断言--> BeanShell断言
本文列举出了三种可用的从Json 格式的返回值中提取数据的方法。正则表达式对于简单的 Json 格式数据的处理非常快速标准化,JsonPath插件可以创建能够被维护的脚本,引入fastjson库的BeanShell 依赖于 Java 语言的灵活性可以进行进一步的开发;
本次 到此,大家自己仔细看看,体会体会,有想法,欢迎交流!