今天学到了一个新的工具:JdbcProxy,关于它的介绍可以看这里:http://www.ibm.com/developerworks/cn/java/j-lo-jdbcproxy/?S_TACT=105AGX52&S_CMP=tec-csdn
我感觉这个工具的最大用处就是
构造测试数据。目前可以想到的应用场景是这样的:设计好测试用例之后,测试人员先根据测试用例连接实际的数据库执行一遍,通过此过程用JdbcProxy生成JDBC调用过程。之后把生成的调用过程文件放到http服务器下(之前要用JdbcProxy中的StubTracerMerger类来合并成一个xml文件),修改数据库连接的配置,改成连接那个HTTP服务,这样测试人员可以在脱离数据库的情况下重复进行那个测试过程。JdbcProxy在这里起到了一个“录制-回放”的作用。
为什么要脱离数据库呢,这样一个明显的好处就是:你的测试数据在一个文件里,这样每个测试用例一个文件,大家各测各的,相互不影响。即使是只有一个测试人员,他在测试过程中,前面的测试也不致于影响后面测试时的数据。总之据我了解,测试人员在测程序时,构造数据都要构造一阵,耽误不少时间,有时候为了图省事,可能构造的数据不合要求,害处更大。
其实,按我上面描述的过程,似乎也不省事,但肯定有办法减少手工操作。以后确定了一个框架后我再补充在后面。
下面我想说一下实践过程,上面提供的网址里已经说的很详细了,但为方便实践,我还是自己再总结一下。
首先下载下来jar包(http://jdbcproxy.sourceforge.net/)JdbcProxy-1.1.jar。(在http://www.mvnrepository.com/上没有找到这个包的pom)
其次,录制DAO调用过程。
写类似下面的程序:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcProxyDemo {
public static void main(String args[]) throws Exception {
String driver = "nl.griffelservices.proxy.jdbc.oracle.StubTracerDriver";
String url = "jdbc:stubtracer:output:com.mysql.jdbc.Driver:jdbc:mysql://localhost:3306/test?user=root&password=root";
Class.forName(driver);
Connection connection = DriverManager.getConnection(url);
Statement stmt = connection.createStatement();
stmt.executeUpdate("delete from PERSON");//delete
stmt.executeUpdate("insert into PERSON values ('1', 'wowo')");
stmt.executeUpdate("insert into PERSON values ('2', 'pipilu')"); //insert
stmt.executeUpdate("update PERSON SET name = 'Good Night'"); //update
ResultSet rs = stmt.executeQuery("SELECT * FROM PERSON");//select
while (rs.next()) {
System.out.println(rs.getString("NAME"));
}
rs.close();
stmt.close();
connection.close();
}
}
这里面修改url可以达到不同的功能:
1、生成方便人阅读的JDBC调用过程记录,则采用下面格式的url
jdbc:tracer:<filename>:<driver>:<url>
2、生成方便软件“阅读”的JDBC调用过程记录,采用下面的格式:
jdbc:stubtracer:<foldername>:<driver>:<url>
3、访问部署到http服务器上的JDBC调用过程,采用如下格式:
jdbc:stub:<hostname>:<port>:<timeout>:<filename>
上面的示例程序是直接生成方便软件阅读的JDBC调用过程记录。生成到程序执行目录下的output文件夹下了(多个request_XX_XX.txt和response_XX_XX.txt文件)。
之后要把生成的文件合并为一个xml,在JdbcProxy-1.1.jar中有办这件事儿的工具:
nl.griffelservices.proxy.stub.StubTracerMerger
文件名可以随意取,我想,以用例的编号命名可能好一些。
把合并完成的xml(比如output.xml)放到http服务器上,确定可以访问到。
比如我把那个文件放到了我的Tomcat的webapps\ROOT下(你可以放到Apache下或IIS下)。那么,我启动了tomcat后,应该可以通过http://localhost:8008/output.xml访问到这个文件。
现在就可以测试一下效果了,用你的程序直接访问这个http服务,把上面示例程序中的url改为“jdbc:stub:localhost:8008:1000:output.xml”(只需改这一处),然后运行程序,程序在不访问数据库的情况下成功执行。修改程序中的sql试一下——报错了!当然,因为这个并不能代替数据库,它只是把JDBC调用过程录下来了而已。
分享到:
相关推荐
MySQL 是一种流行的关系型数据库管理系统,而 JDBCProxy 则是一个开源的 JDBC 代理项目,能够记录 Java 应用程序的数据库访问过程并将其重现。 JDBC 的主要功能是提供了一种统一的方式来访问不同的关系型数据库,...
JdbcProxy是JDBC 2.0驱动程序,可以帮助调试或测试应用程序。 该驱动程序可以包装另一个JDBC驱动程序,以调试应用程序完成的JDBC调用。 该驱动程序还可以模拟另一个JDBC驱动程序,以在没有数据库的情况下测试应用...
JdbcProxy 示例程序 JdbcProxy 可以理解为 JDBC 代理,是一个开源的 JDBC 项目。...本文将以一个具体的 Java 应用为例,演示如何使用 JdbcProxy 记录和重现 JDBC 访问,实现 Java 应用的测试工作。
代理模式(Proxy Pattern) 代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。...
commvault的api接口的postman导入文档
"基于模型预测控制的无人驾驶车辆运动学验证:Simulink与Carsim仿真结果对比与模型解析",无人驾驶车辆模型预测控制 自动驾驶 汽车运动学模型验证 simulink和Carsim仿真结果对比 1.基于matlab2021a和Carsim2020 2.提供模型相关的说明文档 ,核心关键词:无人驾驶车辆模型预测控制; 自动驾驶; 汽车运动学模型验证; simulink; Carsim仿真结果对比; MATLAB 2021a; Carsim 2020; 模型说明文档。,基于Matlab与Carsim的无人驾驶车辆模型预测控制与仿真结果对比分析
基于QRBiGRU双向门控循环单元的复杂时间序列预测模型研究——Matlab分位数回归与多图多指标评估模型优化案例。,Matlab实现基于QRBiGRU分位数回归双向门控循环单元的时间序列区间预测模型: 1.Matlab实现基于QRBiGRU分位数回归双向门控循环单元的时间序列区间预测模型 2.多图输出、多指标输出(MAE、RMSE、MSE、R2),多输入单输出,含不同置信区间图、概率密度图; 3.data为数据集,功率数据集,用过去一段时间的变量,预测目标,目标为最后一列,也可适用于负荷预测、风速预测;MainQRBiGRUTS为主程序,其余为函数文件。 BiGRU分位数预测得到不同置信区间下的风电功率结果如图所示。 可以看出,不同置信度条件下的预测区间与风电功率实际值的波动大致相同,表明本文的方法能够准确预测风电功率变化,此外在实际值变化剧烈的地方置信区间越宽,表明预测可信度变低,这也与实际情况相符合。 对比预测未来不同时间步的预测区间,预测的误差在增大。 根据BiGRU分位数预测未来90min后的结果,采用核密度估计,生成风电功率的概率密度曲线。 如图所示。 可以看到,风电功率实
MATLAB多相材料相场断裂分析:纤维基体界面三相的载荷位移曲线可视化研究,matlab多相材料相场断裂,图中包含纤维基体界面三相,并输出载荷位移曲线。 paraview可视化 ,关键词:Matlab;多相材料;相场断裂;纤维基体界面三相;载荷位移曲线;Paraview可视化,"MATLAB相场断裂分析:多相材料中纤维基体界面的三维可视化与载荷位移曲线输出"
基于MATLAB的FFT滤波技术:实现波形数据谐波分析、频段清除与提取的全面解决方案,基于matlab的FFT滤波,可以实现对simulink模型中示波器的波形数据或者外部mat数据、csv数据进行谐波分析(FFT)和自定义频段清除,对已有数据特定频段的数据进行提取也可以。 优点是滤波前后波形无相位滞后,幅值衰减可补偿,不足之处在于不支持实时滤波。 图一是将图二的信号(含三次谐波)进行140hz-150hz频段谐波清除前后的时域及频谱图,图3是对给定数据进行特定频段信号提取。 ,基于MATLAB的FFT滤波; 谐波分析; 频段清除; 波形无相位滞后; 幅值衰减可补偿; 数据特定频段提取,MATLAB的FFT滤波技术:数据频谱分析与自定义频段谐波清除与提取
c++编译器,适用于IDE没有自带编译器的
2020年09月Scratch一级理论B
"Comsol连续体束缚态BIC探究:一维光栅与二维光子晶体板的能带与Q因子计算",Comsol连续体中的束缚态BIC。 涉及能带计算与Q因子计算,包含一维光栅和二维光子晶体板。 注: 不包含拓扑荷计算。 ,核心关键词:Comsol连续体;束缚态BIC;能带计算;Q因子计算;一维光栅;二维光子晶体板。,《Comsol连续体束缚态BIC能带计算与Q因子探索》
MAKINO系列机床操作与维修设定指南:PRO3操作、S系列使用、培训课程及安装手册,MAKINO 牧野 PRO3 维修设定操作 A55 PRO3操作说明书 日文.pdf A55卧加工作台旋转后加工原点计算.xlsx A61_SPECS.pdf MAKINO PRO3 V55-Operation-Guide 英文.pdf MAKINO S 系列PRO5 使用说明书PIC-Makino-S33-S56-0209.pdf MAKINO 培训课程Schulung_英文.pdf MAKINO-F3F5安装手册MANUAL 英文.pdf Makino-GF8主轴头取汲说明书.pdf MAKINO-PRO3-ProgManua英文l.pdf PIC-Makino-a61-0209.pdf V33 V55 -Series-Operation-485a-9911e英文.pdf V55-Maintenance-Guide-4v2b1563英文.pdf 牧野J5机床说明书J5_OPERATION_中文.pdf 牧野Professional5使用说明书摘要(a1系列 a51 a61 a71 a81 a82
2022年7月信息技术服务管理体系
2019年11月职业健康安全管理体系
"Comsol一维光子晶体ZAK相位计算方法详解:含MPH文件与MATLAB代码的实践指南",Comsol一维光子晶体zak相位计算,包含mph文件和matlab代码。 ,核心关键词:Comsol一维光子晶体; zak相位计算; mph文件; matlab代码; 计算过程。,基于Comsol的一维光子晶体:Zak相位计算与mph及Matlab代码解析
SWOT分析培训
GBT27053复习备考
"Java开源海外跨境电商购物商城源码与TikToK内嵌商城系统源码:多语言支持,全球市场触手可及的在线外贸商城解决方案",Java开源海外跨境电商购物商城源码,TikToK内嵌商城系统源码,外贸商城在线,附带搭建教程 提供搭建部署文档、提供一年更新服务,协助资料准备,服务器域名等第三方资料自备 二十一种语言,可以做很多国家的市场,支持商家入驻,多店铺等等,还有币可以切美元USD或越南盾VND 访问网站:tiktok898点com 服务器配置:内存要高:最低:8H16G 服务器系统:ubuntu 20.04 ,关键词:Java开源; 跨境电商; 购物商城源码; TikToK内嵌商城; 外贸商城; 搭建教程; 部署文档; 更新服务; 商家入驻; 多店铺; 货币切换; 美元USD; 越南盾VND; 网站访问; 服务器配置; 高内存; 8H16G; ubuntu 20.04; 资料准备; 第三方资料。,海外多语种跨境电商平台源码:TikToK内嵌商城系统,支持商家入驻与货币切换
Java项目博物馆管理系统