欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

学习JdbcProxy应用 博客分类: Java 应用服务器JDBC软件测试SQLMySQL 

程序员文章站 2024-02-21 15:01:40
...
  今天学到了一个新的工具: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调用过程录下来了而已。