使用JdbcProxy测试Java应用程序

在我们测试 Java 应用程序时,往往需要连接数据库,并从数据库中获得准确 的测试数据用以测试应用程序是否正确。然而准备测试数据的工作较为复杂,一 旦数据库中的数据发生变化,要想恢复到之前的版本也很费时。对于那些没有条 件连接数据库的测试者而言,测试工作是不能进行下去的。因此,如果可以为某 个待测应用准备一套完备的测试数据,让程序开发、测试人员在不依赖于具体数 据库的情况下对应用进行测试,这无疑是十分方便的。

简介

JdbcProxy 是 SourceForge 上一个开源的 Java 项目,用 Java 语言编写, 遵循 LGPL 和 MPL1.1 协议,由 Frans van Gool 开发,支持 JDBC2.0 规范。通 过继承和重写 JDBC2.0 的接口,将一个 Java 应用访问数据库的过程记录在 XML 文件中,并通过这些文件在脱离数据库的情况下重现这个调用过程。 JdbcProxy 可以用在 Java 应用程序的测试中,进行数据准备并模拟数据库调用过程。读者 可以从 JdbcProxy 主页 获得最新的程序源代码以及说明文档。目前最新的版本 是 1.1 。

使用 JdbcProxy 代替普通的数据库调用可以满足程序开发、测试人员的很多 需求,使准备测试数据的工作变得简单。以文章查询系统为例,有些测试用例需 要测试当数据库中没有数据时页面的显示情况——显示没有相应数据的页面;有 些测试用例需要测试当数据库中只有一条数据时页面的显示情况——显示文章的 内容而不是文章的列表;还有些测试用例需要测试页面的分页效果,这时就需要 为程序准备不同的测试数据。如果采用直接连接测试用数据库的方式进行测试, 不同的测试用例需要重新准备测试数据库,操作起来比较复杂,也不能同时测试 不同的测试场景。如果使用 JdbcProxy,就可以为同一个 Java 程序准备不同的 测试用数据文件,测试者可以脱离后端数据库的限制,只需要访问到数据文件就 能完成测试。不同测试人员能够彼此不受影响的同时测试这个应用,从而大大简 化了准备测试环境的过程。

使用 JdbcProxy

JdbcProxy 提供了两种记录 JDBC 调用过程的方式,一种是方便开发人员和测 试人员阅读的,另一种是用于回放 JDBC 调用过程的。

第一种方式主要是为了让开发人员和测试人员能够了解 Java 应用调用 JDBC 的详细信息,当应用程序较为复杂——例如进行了多表查询,采用这种记录方式 可以让开发人员和测试人员一目了然的看到应用程序访问数据库的过程。

第二种方式是为测试程序准备数据的关键步骤之一。为了回放 JDBC 调用过程 ,JdbcProxy 分别处理应用程序对数据库的每个请求 (request) 与响应 (response),并在指定目录下生成一系列 XML 文件,这些文件是回放 JDBC 调用 过程的基础。这些 request/response 文件并不能直接被 JdbcProxy 调用, JdbcProxy 还提供了一个 StubTraceMerger 工具,用来将这些 request/response 文件整合在一个文件中,这个整合的文件就是我们测试 Java 应用所需要的数据文件。

JdbcProxy 提供了一种通过 HTTP 服务器发送请求并接收响应的机制,这些请 求和响应都按照应用程序的 JDBC 调用顺序记录在整合文件中,当 Java 应用试 图通过 JDBC 连接数据库时,JdbcProxy 会通过 HTTP 服务器从整合文件中读取 相应的数据,模拟调用数据库的过程,使用户得以在脱离数据库的情况下进行 Java 应用的测试。

因此要想利用 JdbcProxy 测试 Java 应用程序,首先需要生成用于回放 JDBC 调用过程的 request/response 文件,然后将这些 request/response 文件整合 在一个文件中,最后将这个整合的数据文件提供给 HTTP 服务器,这样 JdbcProxy 就可以通过 HTTP 服务器访问到数据文件,实现脱离数据库进行测试 的目的。

下面将对 JdbcProxy 提供的每个功能做详细的介绍。

记录方便开发人员和测试人员阅读的 JDBC 调用过程

JdbcProxy 可以跟踪 JDBC 调用过程,生成方便开发人员和测试人员阅读的文 件格式。在普通的数据库调用中,如果开发人员和测试人员想了解 JDBC 的调用 过程,或者需要完整的查看某个 SQL 语句,则需要手工将这些信息打印出来或者 记录在日志中。 JdbcProxy 的这个功能就像为 JDBC 的调用过程自动记录了一个 日志,开发人员和测试人员可以从日志中获得被调用的每一个方法,以及调用方 法的参数和返回值。这样便于开发人员和测试人员发现由于 SQL 语句拼写错误而 导致的数据库访问失败,或是由于数据库中没有数据而导致的空指针异常,使应 用程序的数据库访问过程更加直观。可以根据清单 1中的示例代码生成 JDBC 调 用过程。

清单 1

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:tracer::COM.ibm.db2.jdbc.app.DB2Driver:jdbc:db2:SAMPLE";
     Class.forName(driver);
     Connection connection = DriverManager.getConnection (url);
     Statement stmt = connection.createStatement();
     stmt.executeUpdate("DELETE FROM greetings WHERE greeting='Good Night'");//delete
     stmt.executeUpdate("INSERT INTO greetings VALUES('Good Evening')"); //insert
     stmt.executeUpdate("UPDATE greetings SET greeting = 'Good Night'
       WHERE greeting = 'Good Evening'"); //update
     ResultSet rs = stmt.executeQuery("SELECT * FROM greetings");//select
     while (rs.next()) {
       System.out.println(rs.getString("greeting"));
     }
     rs.close();
     stmt.close();
     connection.close();
   }
}

时间: 2024-08-31 03:48:09

使用JdbcProxy测试Java应用程序的相关文章

新措施:Java手机程序测试费用将降50%

6月3日消息,据国外媒体报道,Sun.Orange.沃达丰集团以及索尼爱立信移动通信正采取措施使Java手机程序开发更简单和便宜. 一年一度JavaOne开发者大会周二在旧金山举行,大会发布了新开源测试工具并宣布正在改善Java认证计划以加强认证Java ME手机程序.其目标是:简化该流程,减少软件开发商不得不为不同款式手机所做的测试数量. Orange合作伙伴计划技术总监Martin Wrigley在发布会上说:"没人喜欢测试."他表示,随着移动 应用市场的成熟,更多的测试开发人员会

使用jmeter测试java程序

最近在用jmeter进行性能测试,防止被忘记,把步骤写下. 场景:测试java程序 1.右击测试计划-> 添加 -> Threads(Users) -> 线程组 2.设置线程属性,用于并发请求. 介绍: 线程数: 5 Ramp-Up Period(in seconds) : 1 循环次数: 2 含义:1秒种起动5个线程,每个线程循环调用2次java请求 3.线程组右击 -> 添加 -> Sampler -> Java请求 之前建立测试类: Java代码 package

Ubuntu中为Android系统实现内置Java应用程序测试Application Frameworks层的硬件服务_Android

我们在Android系统增加硬件服务的目的是为了让应用层的APP能够通过Java接口来访问硬件服务.那么, APP如何通过Java接口来访问Application Frameworks层提供的硬件服务呢?在这一篇文章中,我们将在Android系统的应用层增加一个内置的应用程序,这个内置的应用程序通过ServiceManager接口获取指定的服务,然后通过这个服务来获得硬件服务.        一. 参照在Ubuntu Android实现Application Frameworks层增加硬件访问服

使用JMeter测试JSP应用程序性能

js|程序|性能     如果你想测试你的JSP应用程序性能,那么你可以使用JMeter,它是由Apache软件基金会开发的开放源代码的产品.JMeter允许你开发测试方案,用以测试可访问的HTTP,FTP和JDBC数据库服务.JMeter可使用cookie和URL重写来处理Servlet验证,因此,在测试JSP应用程序时表现良好.它的下载地址为:http://jakarta.apache.org/jmeter     下面来看看JMeter,你可以写一个非常简单的JSP页面来使用JMeter进

使用Java小程序为网页上的照片添加效果

程序|网页 1.准备源文件 选择要放置到网页上的照片,用扫描仪扫描得到照片的图像文件,再用PhotoShop等图像处理软件处理成大小为300×300象素的图像,最后保存为或者使用ACESee等图像查看软件转换为.jpg格式,保存到新建的文件夹photo中(注意千万别使用汉字为这个文件夹命名).现在假设这些照片图像分别为photo1.jpg.photo2.jpg.photo3.jpg.其中photo1.jpg为主要照片,photo2.jpg和photo3.jpg为辅助照片,最好选择不同时期的照片以

如何在 Java 应用程序中读取 8 位和 24 位 Microsoft Windows 位图(转)

window|程序 如何在 Java 应用程序中读取 8 位和 24 位 Microsoft Windows 位图在 Java 应用程序中加载位图文件的逐步指南 作者:Jeff West 和 John D. Mitchell 摘要目前,标准的 getImage() 方法仅支持 GIF 和 JPEG 图像.尽管存在用于读取 PNG(可移植网络图形)格式的 Java 例程,但我们还没听说过有用于读取 Microsoft Windows 位图图像的阅读程序.Jeff West 撰写的这篇技巧提供了加载

使用Install Anywhere让您的Java安装程序更高效和灵活

本文将介绍如何借助 Install Anywhere 更好地规划和设计 Java 安装程序,提供多平台多操作系统的部署,定义更灵 活的安装流程和环境检查,开发更加友好和美观的用户交互界面.文章主要面向 Java 软件安装程序开发人员,假定您对 Java 以及 Ant 开发有基本的了解,您也可以参见参考资料以了解更多 Install Anywhere 相关的知识. Install Anywhere 介绍 Install Anywhere 概述 Install Anywhere(以下简称 IA)是由

为Java应用程序加入脚本引擎

前言 现代许多流行的应用程序,越来越多的使用了脚本引擎,最典型的有 Microsoft Office中的VBA等.脚本引擎能提供应用程序极大的可扩展性,也是 被许多热忠于二次开发的使用者所乐意看到的.本文主要讲解 BeanShell----这 样一个Java应用程序脚本引擎,你会了解它的基本特性,及如何将它嵌入到你的 应用程序中.你将看到,为自己的应用程序加上脚本引擎是多么容易的一件事情 . 常见的脚本引擎 现在网络上流行着许多种脚本语言,如TCL,Perl, JavaScript,Python

java入门程序 char初始值 和例题答案不一样

问题描述 java入门程序 char初始值 和例题答案不一样 public class Ex1 { int a; char b; public Ex1(){ System.out.println(a); System.out.print("["+b+"]"); System.out.print("www"); } public static void main(String[] args){ new Ex1(); /*我只是想把初始值试出来嘛,为