• 数据库数据产生工具 DBMonster 应用详解


            在进行某些侧重数据计算相关的应用(例如报表程序),或是在对一个应用进行负载和压力测试时,往往需要在数据库中产生大量的负载,对测试工程师来说,这个工作往往会不那么轻松。当然,从“现场数据库”中获得现有的数据作为测试基础数据是一个办法,但如果目前还得不到现场数据,或者,很难获得现场数据,那该怎么办呢?
            答案只有一个——使用工具:)。这方面的商业工具有 Quest 公司的 DataFactory 工具,几乎可以产生任何你所需要的数据。不过,作为开源工具的提倡者,我今天要介绍的,是一个可用于这个目的的开源测试工具 DBMonster。
            DBMonster ( http://dbmonster.kernelpanic.pl )是一个Java的开源项目,通过JDBC方式连接数据库,因此可以在任何支持Java和JDBC的平台上运行。DBMonster开发的原意是为数据库开发者服务,可以协助产生大量的规则或不规则数据,便于数据库开发者基于这些数据进行数据库的调优。
            DBMonster通过两个XML文件(配置文件 和 schema文件)控制数据产生的行为,配置文件指明需要连接的数据库、连接使用的用户名和口令、需要操作的sheme、重试次数等全局设置,而scheme文件则指明针对每张数据表的每个字段产生数据的规则。

    DBMonster的下载和安装

            DBMonster的下载和安装非常简单,直接从sourceforge上下载dbmonster-core,解压到本地的任一目录即可。如果需要DBMonster和Ant的集成,则还需下载dbmonster-ant。

    DBMonster的运行

            DBMonser的运行也很简单,DBMonster解压后的bin目录中有dbmonster.bat和dbmonster文件,如果是在windows平台上,则可以直接运行dbmonster.bat文件;如果是在Unix平台上,则运行dbmonster文件。
            DBMonster运行时的主要参数是-c和-s,分别指明配置文件和schema文件的位置。缺省的配置文件位于DBMonster的安装目录下,名称是dbmonster.properties。例如,如果我们使用缺省的配置文件,指明schema文件为test-schema.xml,则命令行为:
     
            dbmonster -s test-schema.xml

            另外,DBMonster可以直接抓取数据库schema中的表结构,使用--grab参数即可。但要注意的是,如果你没有在配置文件中指定schema名称,dbmonster会抓取全部的表。

    DBMonster的配置文件

            缺省的配置文件位于DBMonster的安装目录下,名称是dbmonster.properties。其内容如下(以Oracle为例,其他的数据库类型请自行修改JDBC驱动名称、数据库连接字符串等内容):

    dbmonster.jdbc.driver=oracle.jdbc.driver.OracleDriver
    dbmonster.jdbc.url=jdbc:oracle:thin:@testdb:1521:test
    dbmonster.jdbc.username=student
    dbmonster.jdbc.password=123456
    dbmonster.jdbc.transaction.size=50

    # for Oracle and other schema enabled databases
    dbmonster.jdbc.schema=student

    # maximal number of (re)tries
    dbmonster.max-tries=1000

    # default rows number for SchemaGrabber
    dbmonster.rows=1000

    # progres monitor class
    dbmonster.progress.monitor=pl.kernelpanic.dbmonster.ProgressMonitorAdapter

    DBMonster的schema文件

            schema文件描述了产生数据的规则,在DBMonster中,数据的产生是通过Generator生成的,DBMonster中缺省的数据Generator包括两个Key Generator(用于产生不重复的数据,分别为MaxKeyGenerator和StringKeyGenerator)和 10 个Data Generator。以下简单说明一下Data Generator的使用。
            BinaryGenerator用于从外部文件中获取二进制数据并插入相应字段,该Generator有两个属性,分别为file和nulls,file属性描述数据来源,而nulls属性则给出该字段生成null的几率。
            BooleanGenerator用于产生bool型数据,该Generator包括两个属性,分别为probability和nulls,probability属性描述产生true值数据的几率,nulls属性给出生成null的几率。
            ConstantGenerator用于产生固定值的数据,该Generator只有一个属性constant,给出要插入数据库的值;
            DateTimeGenerator用于产生DateTime型数据,该Generator包括四个属性,分别是startDate,endDate,returnedType和nulls,startDate描述开始时间,endDate描述终止时间,格式为“yyyy-mm-dd hh24:MM:ss”;returnedType描述生成数据的类型,可以为date、time或是timestamp;
            DirectoryGenerator用于根据本地文件(字典)的条目向数据库插入数据,该Generator包括两个属性,分别为dictFile和unique,dictFile指明字典文件所在的位置,unique指明产生的数据是unique的还是random的;
            ForeignKeyGenerator用于为设置了外键的字段生成数据,该Generator包含两个属性,分别是tableName和columnName,tableName指明外键引用的表名,columnName指明外键引用的字段名;
            NullGenerator用于产生null类型的数据,该Generator不带任何参数(只产生null);
            NumberGenerator用户产生数值类型的数据,该Generator包括5个属性,分别是minValue、maxValue、returnedType、scale和nulls。其中,minValue和maxValue分别给出产生值的下边界和上边界;returnedType给出生成数据的类型,可以是short、integer、long、float、double和numeric类型;scale指明小数位数;nulls表示产生null的几率;
            StringGenerator用于产生字符串类型的数据,该Generator包括5个属性,分别是minLength、maxLength、allowSpaces、excludeChars和nulls。其中,minLength和maxLength限定了字符串长度;allowSpaces控制字符串中是否包含空格;excludeChars排除产生字符串时不使用的字符;nulls表示产生null的几率;
            StringChoiceGenerator用于从给定的字符串中随机挑选一个作为字段内容,该Generator包含两个属性,分别是choice和nulls。其中choice是以逗号分隔的字符串,逗号分隔开的每个内容是一个字段可用的内容。
            例如,如果我们有一张数据表的DDL如下:

    CREATE TABLE "TEST"."TEST_DATA" ("INT_ID" NUMBER NOT
        
    NULL, "IPADDR" VARCHAR2(15 byte) NOT NULL, "COMPRESS_DAY"
        DATE 
    NOT NULL, "CPUIDLE" NUMBER, "CPUSYSUTIL" NUMBER,
        "CPUUSRUTIL" 
    NUMBER, "SYSTEM_LOAD" NUMBER, "MEMRATIO" NUMBER,
        "MEMFREE" 
    NUMBER, "SWAPFREE" NUMBER, "SWAPRATIO" NUMBER,
        "BUSY_FLAG" 
    NUMBER(5))  
        TABLESPACE "TS_IPWEB" PCTFREE 
    10 PCTUSED 0 INITRANS 1
        MAXTRANS 
    255
        STORAGE ( INITIAL 120K 
    NEXT 512K MINEXTENTS 1 MAXEXTENTS
        
    2147483645 PCTINCREASE 0)
        LOGGING 

            则,对应的产生数据的schema文件如下(只包含部分字段):
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!DOCTYPE dbmonster-schema PUBLIC
        "-//kernelpanic.pl//DBMonster Database Schema DTD 1.1//EN"
        "http://dbmonster.kernelpanic.pl/dtd/dbmonster-schema-1.1.dtd"
    >
        
    <dbmonster-schema>
       
    <name>ipnms</name>
        
    <table name="test.test_data" rows="500">
           
    <column name="int_id">
                 
    <generator type="pl.kernelpanic.dbmonster.generator.NumberGenerator">
                     
    <property name="nulls" value="0"/>
                     
    <property name="minValue" value="20"/>
                     
    <property name="maxValue" value="20"/>
                     
    <property name="returnedType" value="numeric"/>
                     
    <property name="scale" value="0"/>
                 
    </generator>
           
    </column>
           
    <column name="ipaddr">
                 
    <generator type="pl.kernelpanic.dbmonster.generator.ConstantGenerator">
                     
    <property name="constant" value="10.1.200.201"/>
                 
    </generator>
                   
    </column>
                   
    <column name="compress_day">
                        
    <generator type="pl.kernelpanic.dbmonster.generator.DateTimeGenerator">
                            
    <property name="nulls" value="0"/>
                            
    <property name="startDate" value="2006-03-01 00:00:00"/>
                            
    <property name="endDate" value="2006-03-31 00:00:00"/>
                            
    <property name="returnedType" value="date"/>
                         
    </generator>
                   
    </column>
                   
    <column name="disk_dir">
                        
    <generator type="pl.kernelpanic.dbmonster.generator.ConstantGenerator">
                            
    <property name="constant" value="/var/mqm"/>
                         
    </generator>
                   
    </column>
                   
    <column name="disk_device">
                        
    <generator type="pl.kernelpanic.dbmonster.generator.ConstantGenerator">
                            
    <property name="constant" value="/dev/c0s0t1"/>
                         
    </generator>
                   
    </column>
           
    <column name="disk_used_rate">
                
    <generator type="pl.kernelpanic.dbmonster.generator.NumberGenerator">
                    
    <property name="nulls" value="0"/>
                    
    <property name="minValue" value="1"/>
                    
    <property name="maxValue" value="80"/>
                    
    <property name="returnedType" value="numeric"/>
                    
    <property name="scale" value="0"/>
                 
    </generator>
           
    </column>
        
    </table>
    </dbmonster-schema>

    DBMonster 和 DataFactory 的对比

            作为一款开源的数据产生工具,DBMonster与Data Factory想比较,在功能方面DBMonster显得弱一些,例如,在产生composite类型的字段、在自动查找关联表方面,DBMonster都只能让用户自己解决;另外,在使用的便利性方面DBMonster也没有提供漂亮的GUI界面,因此肯定会有些人觉得这个工具不好用(但对我来说,我似乎更加习惯于这种用xml描述数据产生的方式)。
    不过,DBMonster其实已经可以胜任大多数情况下的数据库数据产生了,我在使用中发现的它的最大的局限性是在针对具有多字段约束(例如,包含多个字段的unique index约束)时数据产生的不便,当然,在DBMonster的Manual中也提到了,可以通过自己写代码来扩展这些,而且也给出了相应的代码示例,但对普通用户来说,还是希望工具能够用起来更加方便吧。

    结语

            如果你正在寻找一个能够为你产生大量数据库数据的免费的工具,毫无疑问,DBMonster可以帮助你;如果你希望找到一个可以和Ant工具协作的数据产生器,DBMonster是一个很好的选择;如果更进一步,你希望找到一个可以自行扩展的数据产生工具,那么相信我,DBMonster一定是你的最佳选择:) 
  • 相关阅读:
    .NET Interop 工具集
    关于正弦波的算法
    Windows Phone 系列 本地数据存储
    Xaml cannot create an instance of “X”
    Windows Phone 系列 使用 MVVM绑定时无法获取当前值
    Windows Phone 系列 应用程序图标无法显示
    Windows Phone 系列 WPConnect无法上网的问题
    Windows Phone 系列 使用 Windows Phone 保存铃声任务
    WP7.5提交应用
    Windows Phone 系列 动态删除ObservableCollection
  • 原文地址:https://www.cnblogs.com/guanhe/p/439327.html
Copyright © 2020-2023  润新知