Jmeter入门实战(二)如何使用Jmeter的BeanShell断言,把响应数据中的JSON跟数据库中的记录对比
2016-11-03 17:15
1226 查看
很多时候我们需要把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脚本编写
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(); //如果取到库中的数据,赋值给history while (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 接口测试中使用Beanshell断言: 将接口响应报文与数据库结果对比
- 【Jmeter】BeanShell断言--数据解析&数据库对比校验
- 如何设置Jmeter的响应数据为“json”格式
- 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格
- 如何使用JSON Framework库解析与生成json数据(iphone网络篇二)
- VC6 下学习使用Teechart8记录 三 数据库读取与鼠标选取数据
- 如何使用JSON Framework库解析与生成json数据
- 对于如何使用默认配置文件连接数据库的记录
- ZODB入门 -- 如何通过面向对象的动态语言 Python 使用对象数据库
- GWT入门介绍(使用JSON格式的数据通讯)
- 创建Accress 数据库连接文件UDL/如何使用 ADO 的数据链接文件
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格?
- 【原创】c#讲数据库数据转换为json格式(使用extjs,easyui中的datagrid)
- 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格
- Enterprise Library 4.1数据访问应用程序块快速入门【6】使用DataSet更新数据库
- 数据库交易记录--如何添加审计信息到闪回归档数据以替换操作日志表
- 如何使用jQuery向asp.net Mvc传递复杂json数据
- 如何使用JSON Framework库解析与生成json数据
- 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格?[转]