很多时候我们需要把Response Data取到的 Json 字符串跟数据库里的对比,来验证接口的正确性,使用Beanshell断言可以比较灵活的实现这个需求。

Beanshell是一种类似JAVA的脚本语言,可以直接调用外部的jar包,可以拿现成的json解析包来用,所以笔者选择了这个方法。实现的思路是

1、历史数据存储到MYSQL数据库里,

2、Jmeter读取参数化的CSV文件,把测试用例都存入CSV文件一次执行,

3、CSV文件和数据库中数据用ID关联,

4、每次断言都用BeanShell使用JDBC连接MYSQL库,使用测试用例的ID查出MYSQL中的数据

5、调用GSON的解析JSON方法,对比两个数据,进行断言

BeanShell在Jmeter中的使用可以参考这篇文章,https://www.blazemeter.com/blog/queen-jmeters-built-componentshow-use-beanshell   在这里就不多做介绍了。

GSON是Google的一个解析JSON的工具,笔者不太懂java,但是JSON字符串的对比不能直接用字符串比较,所以引用了这个包,然后调用了GSON的JsonObject.equals()方法,来判断两个JSON的内容是否一样。大家可以多研究下,最好能完成例如断言失败时打印内容不同的KEY等功能。

一、在Jmeter中添加BeanShell断言

二、为了方便查看断言结果,再添加一个断言结果,如果断言报错可以在这里查询具体信息

三,选中测试计划,添加JAR包的引用地址。MYSQL的驱动和GSON包都需要下载下来,如下图直接点开窗口选择JAR文件即可。

四、Beanshell脚本编写

import java.sql.*;
import java.util.*;
import java.lang.*;
import org.apache.regexp.*;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser; //数据库连接字段
String drive = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://yourdatabase:yourDatabasePort/";
String dbName = "YourDataBaseName";
String user = "YourDataBaseUser";
String pass = "YourDataBasePass";String history = "";
String response = "";
String failuer = "";//vars.get是Jmeter提供的方法,可以取到变量值,这个caseno是用来关联用例和数据库中结果的
String CaseNo = vars.get("caseno");//下面是查询的SQL
String query = "SELECT response_data From test_json_compare Where case_no = '" + CaseNo + "'";//JDBC声明
Connection Mycon = null;
Statement Mystmt = null;
ResultSet Myrset = null;//try中获取数据库连接
try{Mycon = DriverManager.getConnection(url+dbName, user, pass);} catch(SQLException e){}Mystmt = Mycon.createStatement();Myrset = Mystmt.executeQuery(query);//prev.getResponseDataAsString是Jmeter提供的方法,可以调取上次请求的响应字符串response = prev.getResponseDataAsString();//如果取到库中的数据,赋值给historywhile (Myrset.next()){history = Myrset.getString(1);}Myrset.close();Mystmt.close();//Gson提供的方法,原理笔者也不明白,效果是把字符串生成Json对象JsonParser parser = new JsonParser();
JsonObject responseObj = (JsonObject) parser.parse(response);
JsonParser parser1 = new JsonParser();
JsonObject historyObj = (JsonObject) parser1.parse(history);  if(history == "")
{Failure = true;FailureMessage = "连接数据库失败或者数据库内没有历史数据"; //调用Gson提供的Json对象euqals方法判断是否一致
}else if(responseObj.equals(historyObj) == false)
{
//把断言失败置为真
Failure = true;
FailureMessage = "和历史数据不匹配";
}

Jmeter入门实战(二)如何使用Jmeter的BeanShell断言,把响应数据中的JSON跟数据库中的记录对比相关推荐

  1. Jmeter入门实战(二)如何使用Jmeter的BeanShell断言,把响应数据中的JSON跟数据库中的记录对比...

    链接:http://blog.csdn.net/drico1986/article/details/53021071 转载于:https://www.cnblogs.com/ysjt/p/656452 ...

  2. Jmeter接口测试实战(二):一粒云项目

    目录 1.Jmeter完成文件上传 2.Jmeter完成文件下载 3.Jmeter完成文件列表的获取 4.Jmeter JSON Extractor获取数组类型的数据 5.正则表达式获取数组类型的数据 ...

  3. 【转】JMeter学习(二十七)Jmeter常见问题

    收集工作中JMeter遇到的各种问题 1.  JMeter的工作原理是什么? 向服务器提交请求:从服务器取回请求返回的结果. 2.  JMeter的作用? JMeter可以用于测试静态或者动态资源的性 ...

  4. golang入门实战(二)

    golang入门实战 github 接上篇 接口数据时间格式 token校验中间件 多平台打包 未完待续 github 项目完整代码–github 接上篇 golang入门实战(一) 接口数据时间格式 ...

  5. 我在公司用Jmeter刚压一天就崩了,请求、响应数据都为空?就问你慌不慌

    文章前景,公司服务器需要压两天,在使用GUI模式下,本机Jmeter压了一天就蹦了,而且期间有错误请求,但是返回查看日志时,日志信息的请求.响应时间都显示为空. 注意: 第6点Jmeter5.0更改放 ...

  6. 【二十】Jmeter:插件二次开发—— JMeter 源码导入 eclipse

    目录 一.源码官网下载 二.lib 目录官网下载 三.源码 & lib 目录 下载 四.导入eclipse 一.源码官网下载 点击前往官网下载并解压:下载地址 二.lib 目录官网下载 点击前 ...

  7. Jmeter入门(一)使用Jmeter进行简单的性能测试

    一.新建线程组 thread group(线程组):一个线程组可以看做一个虚拟用户 线程属性的设置: 1.设置线程数: 线程数也就是并发数,每个线程将会完全独立的运行测试计划,互不干扰.多个线程用于模 ...

  8. 【QGIS入门实战精品教程】10.1:QGIS基于DEM数据的地形分析案例教程

    本文讲解QGIS中基于DEM数据的地形分析方法,包括:坡度分析.坡向分析.山体阴影.地貌分析.强度指数(地形复杂性). 文章目录 一.加载DEM 二.坡度分析 三.坡向分析 四.山体阴影 五.地貌分析 ...

  9. 【QGIS入门实战精品教程】7.1:QGIS面状数据符号化设置案例教程

    本文讲解QGIS空间数据符号化设置. 文章目录 一.符号化模式详解 1. 单一色彩 2. 字段分类 3. 渐进 4. 基于规则 5. 翻转多边形 6. 2.5维 二.样式文件的保存与使用 1. 保存样 ...

最新文章

  1. matplotlib 波士顿房价数据集可视化
  2. spring22:Aspectj实现环绕通知@Around
  3. 倒计时2天!年末最大AI开发者盛典来袭,快来报名
  4. c语言按F1键运行,C语言的编译和运行按什么键
  5. jQuery相当于对 javascript二次开发,所以基于 jQuery实现的各种插件直接调用即可...
  6. elasticsearch原理_花几分钟看一下Elasticsearch原理解析与性能调优
  7. 关于微信小程序使用获取用户信息getUserProfile的问题:TypeError: wx.getUserProfile is not a function
  8. 表达式for loop
  9. python的高级特性3:神奇的__call__与返回函数
  10. Linux基础命令---显示文本grep
  11. AI_机器学习与深度学习有什么区别?
  12. UltraEdit 25注册机 通用版 32/64位 绿色免费版(附破解激活教程+序列号)
  13. 【FastDFS】FastDFS在CentOS的搭建
  14. Java实现Base64的编码与解码
  15. linux inet_aton使用实例,C语言中实现inet_aton和inet_ntoa函数功能
  16. java jsp实现注册登录界面_jsp实现简单的用户登录和注册
  17. 2016 版 Laravel 系列入门教程(二)【最适合中国人的 Laravel 教程】
  18. maven错误Unknown lifecycle phase “build“. You must specify a valid lifecycle phase or a goal in the fo
  19. 卡巴斯基和趋势科技安全产品的DLL劫持漏洞
  20. python twisted框架_Python的Twisted框架上手前所必须了解的异步编程思想

热门文章

  1. android 录制视频清晰度问题
  2. 爱普迪供应CS连接器,适用400G传输
  3. Linux 磁盘- 存储
  4. Android————一个简单的新闻面板
  5. CSS多行文本溢出隐藏,显示省略号
  6. Java代码签名证书申请和使用指南
  7. 使用python 模仿mybinlog 命令 二进制分析mysql binlog
  8. 最小二乘法解的矩阵形式推导
  9. 强大的虚拟机软件vmware图文使用教程
  10. 图片延迟加载对seo有什么影响呢?