当前位置: 首页 > 工具软件 > JdbcProxy > 使用案例 >

学习JdbcProxy应用

岳凯康
2023-12-01
  今天学到了一个新的工具:JdbcProxy,关于它的介绍可以看这里:http://www.ibm.com/developerworks/cn/java/j-lo-jdbcproxy/?S_TACT=105AGX52&S_CMP=tec-csdn

  我感觉这个工具的最大用处就是[b]构造测试数据[/b]。目前可以想到的应用场景是这样的:设计好测试用例之后,测试人员先根据测试用例连接实际的数据库执行一遍,通过此过程用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调用过程录下来了而已。
  
 类似资料: