实现Unitils对多数据源的支持

目前淘宝共享中心测试的数据准备主要使用Unitils + DBunit来完成,具体实现请参阅:

 

http://teamojiao.iteye.com/blog/456782

 

 文中已经提及和如何实现Uitils对Execl文件的 支持,并指出Unitils暂时无法支持多数据源的不足。在TC读写分离项目的测试中,需要同时往不同的数据   库插入测试数据,为此该问题的存在已经大大的影响了测试效率,因此决定对Unitils进行再次改造,使其能够对多数据源提供良好支持;

·How Unitils works with DBUnit

    我们首先来看下Unitls是如何将数据传递给DBunit的,org.dbunit.operation.DatabaseOperation提供的接口如下:

    public abstract void execute(IDatabaseConnection connection, IDataSet dataSet) throws DatabaseUnitException, SQLException;

   可以看出,Unitils只需要dataSet和相应的connection参数就可以完成数据库的操作,这样我们只需将一个Excel中的内容根据不同的数据源拆分成几个dataSet并配给不同数据源就可以实现对多数据源的需求了。

 


·Excel 文件的拆分

为了把Excel拆分成几个DataSet,我们就得先看下DataSet的结构,DataSet其实只有一个成员变量:ITable[] _tables,因此我们只需将_tables按不同的数据源拆分为几个ITable的数组即可。而为了能将不同的表单按数据源进行,本次做法是在 Excel的各个表单加上标签,即表单名由原来的TableName改为 DatasourceLable.TableName,DatasourceLable与数据源配置一一对应,为了可以兼容以前的用例,也可没有 DatasourceLable,此时使用默认数据源(详见数据源配置)。

 


 

如上标注中,sheet1中的数据将插入默认数据源的TC_BIZ_ORDER表中,sheet2中的数据将插入test标注的数据源的user表中。

·数据源配置

上例中,数据源配置如下:

默认数据源:

         #default datasource
        database.driverClassName=oracle.jdbc.driver.OracleDriver
        database.url=jdbc:oracle:oci:@dev-unittest
        database.userName=tbcenter
        database.password=tbcenter
        database.schemaNames=tbcenter

标注为test的数据源

         test.database.driverClassName=org.gjt.mm.mysql.Driver
        test.database.url=jdbc:mysql://127.0.0.1:3306/test
        test.database.userName=test
        test.database.password=

我们将根据数据源配置文件的配置将所用到的数据源放到一个Datasource Map中,以标注为Key。

接下来只需把DataSet和Datasource一一对应起来传递给DBunit即可实现多数据源的支持了。

一个很土却有效方法,欢迎拍砖。

你可能感兴趣的:(数据结构,oracle,mysql,jdbc,Excel)