学习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调用过程。
写类似下面的程序:
这里面修改url可以达到不同的功能:
1、生成方便人阅读的JDBC调用过程记录,则采用下面格式的url
2、生成方便软件“阅读”的JDBC调用过程记录,采用下面的格式:
3、访问部署到http服务器上的JDBC调用过程,采用如下格式:
上面的示例程序是直接生成方便软件阅读的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调用过程录下来了而已。
我感觉这个工具的最大用处就是构造测试数据。目前可以想到的应用场景是这样的:设计好测试用例之后,测试人员先根据测试用例连接实际的数据库执行一遍,通过此过程用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调用过程录下来了而已。
上一篇: PHP的时间戳与具体时间转化的简单实现
下一篇: 不一般的phpword中文乱码有关问题