欢迎所有爱好软件测试的任人志士加入本空间!

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

上一篇 / 下一篇  2007-05-16 16:00:10

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

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

DBMonster的下载和安装

        DBMonster的下载和安装非常简单,直接从sourceforge上下载dbmonster-core,解压到本地的任一目录即可。如果需要DBMonster和Ant的集成,则还需下载dbmonster-ant软件测试网H(P#W o;DA

DBMonster的运行

        DBMonser的运行也很简单,DBMonster解压后的bin目录中有dbmonster.bat和dbmonster文件,如果是在windows平台上,则可以直接运行dbmonster.bat文件;如果是在Unix平台上,则运行dbmonster文件。
0Q!f vH)@p)g4R`0        DBMonster运行时的主要参数是-c和-s,分别指明配置文件和schema文件的位置。缺省的配置文件位于DBMonster的安装目录下,名称是dbmonster.properties。例如,如果我们使用缺省的配置文件,指明schema文件为test-schema.xml,则命令行为:
8KcJW2f1i8I0 
        dbmonster -s test-schema.xml
软件测试网2jj&a:F EY
        另外,DBMonster可以直接抓取数据库schema中的表结构,使用--grab参数即可。但要注意的是,如果你没有在配置文件中指定schema名称,dbmonster会抓取全部的表。软件测试网 gK9P[z*Xjq

DBMonster的配置文件

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

mj|?OZ&s5oN8X r0
dbmonster.jdbc.driver=oracle.jdbc.driver.OracleDriver
{u"_/V3W0dbmonster.jdbc.url=jdbc:oracle:thin:@testdb:1521:test
*Ry7O3R4~e;i3r0dbmonster.jdbc.username=student
&jw^S4k%|3F0dbmonster.jdbc.password=123456
$@T'}u*~K0dbmonster.jdbc.transaction.size=50
x{-I3R G2cj)HbM0
.K J-g8i Ls)A Yp s0# for Oracle and other schema enabled databases
wQ$@ ~\@;] @4V"J0dbmonster.jdbc.schema=student
8Ga ou&} m)iR.E0
9n k6[ y)N$o6p0# maximal number of (re)tries
~sk#CVvRK0dbmonster.max-tries=1000
![9S,D(fz0@4x3kg0软件测试网bhWx5i.uu
# default rows number for SchemaGrabber
Fl/bT&T0dbmonster.rows=1000软件测试网*b-wg2e m/Q$[!L

H8X6CR!],C HA+\0# progres monitor class
C1fT/g8u/eF%g]0dbmonster.progress.monitor=pl.kernelpanic.dbmonster.ProgressMonitorAdapter
软件测试网 J)A R9C2@O

DBMonster的schema文件

        schema文件描述了产生数据的规则,在DBMonster中,数据的产生是通过Generator生成的,DBMonster中缺省的数据Generator包括两个Key Generator(用于产生不重复的数据,分别为MaxKeyGenerator和StringKeyGenerator)和 10 个Data Generator。以下简单说明一下Data Generator的使用。
0@5kNUsB(?3Q]0        BinaryGenerator用于从外部文件中获取二进制数据并插入相应字段,该Generator有两个属性,分别为file和nulls,file属性描述数据来源,而nulls属性则给出该字段生成null的几率。
NaT T3lp$f0        BooleanGenerator用于产生bool型数据,该Generator包括两个属性,分别为probability和nulls,probability属性描述产生true值数据的几率,nulls属性给出生成null的几率。软件测试网2u%XA c#g\
        ConstantGenerator用于产生固定值的数据,该Generator只有一个属性constant,给出要插入数据库的值;
RS,Wa Ea9jV0        DateTimeGenerator用于产生DateTime型数据,该Generator包括四个属性,分别是startDate,endDate,returnedType和nulls,startDate描述开始时间,endDate描述终止时间,格式为“yyyy-mm-dd hh24:MM:ss”;returnedType描述生成数据的类型,可以为date、time或是timestamp;软件测试网4Z?[ K B
        DirectoryGenerator用于根据本地文件(字典)的条目向数据库插入数据,该Generator包括两个属性,分别为dictFile和unique,dictFile指明字典文件所在的位置,unique指明产生的数据是unique的还是random的;
&tzLz.Z Wj0        ForeignKeyGenerator用于为设置了外键的字段生成数据,该Generator包含两个属性,分别是tableName和columnName,tableName指明外键引用的表名,columnName指明外键引用的字段名;
1K7r}+Mp@0        NullGenerator用于产生null类型的数据,该Generator不带任何参数(只产生null);软件测试网B&ma{QH(Q
        NumberGenerator用户产生数值类型的数据,该Generator包括5个属性,分别是minValue、maxValue、returnedType、scale和nulls。其中,minValue和maxValue分别给出产生值的下边界和上边界;returnedType给出生成数据的类型,可以是short、integer、long、float、double和numeric类型;scale指明小数位数;nulls表示产生null的几率;
v p6vGU;GxWX0        StringGenerator用于产生字符串类型的数据,该Generator包括5个属性,分别是minLength、maxLength、allowSpaces、excludeChars和nulls。其中,minLength和maxLength限定了字符串长度;allowSpaces控制字符串中是否包含空格;excludeChars排除产生字符串时不使用的字符;nulls表示产生null的几率;软件测试网,A1sM$dN4f5\'\2a$Z
        StringChoiceGenerator用于从给定的字符串中随机挑选一个作为字段内容,该Generator包含两个属性,分别是choice和nulls。其中choice是以逗号分隔的字符串,逗号分隔开的每个内容是一个字段可用的内容。
GMd-ZggD,A2{ V0        例如,如果我们有一张数据表的DDL如下:
uC{S WqL0软件测试网I7[y*[ U+`Ny/W
CREATE TABLE "TEST"."TEST_DATA" ("INT_ID" NUMBER NOT软件测试网AbN1T1h7F%|x
    
NULL, "IPADDR" VARCHAR2(15 byte) NOT NULL, "COMPRESS_DAY"软件测试网%s(T1D,G5S4~
    DATE 
NOT NULL, "CPUIDLE" NUMBER, "CPUSYSUTIL" NUMBER,
:N"Ut1E6E0    "CPUUSRUTIL" 
NUMBER, "SYSTEM_LOAD" NUMBER, "MEMRATIO" NUMBER,
:LU%[F'PYk8c*r0    "MEMFREE" 
NUMBER, "SWAPFREE" NUMBER, "SWAPRATIO" NUMBER,软件测试网6[ AY5Xx!Go#R.^
    "BUSY_FLAG" 
NUMBER(5))  软件测试网:G!z[;^%Nef"A!H
    TABLESPACE "TS_IPWEB" PCTFREE 
10 PCTUSED 0 INITRANS 1
:D S)T \`"NE%V0    MAXTRANS 
255
vmit Kd s6N2F0    STORAGE ( INITIAL 120K 
NEXT 512K MINEXTENTS 1 MAXEXTENTS
j1k;|(A)hZ,z2Th'{"d0    
2147483645 PCTINCREASE 0)
_V:F#ta9@!r.B I0    LOGGING 
软件测试网2BjZ:]r
        则,对应的产生数据的schema文件如下(只包含部分字段):
[:jhm6s"v N8t0
<?xml version="1.0" encoding="iso-8859-1"?>
NT2@g.a{:]|q0
<!DOCTYPE dbmonster-schema PUBLIC软件测试网xPYR^b2A'U
    "-//kernelpanic.pl//DBMonster Database Schema DTD 1.1//EN"软件测试网wen)cHA4BQ u
    "http://dbmonster.kernelpanic.pl/dtd/dbmonster-schema-1.1.dtd"
>
8fu f7c;Xh0    软件测试网7y"vF*~eSzeL
<dbmonster-schema>
z9o;iN8ug|iW ~K K0   
<name>ipnms</name>软件测试网 I7N|b4m(vBh
    
<table name="test.test_data" rows="500">
#H l8L,}8zu+X$N2n3G0       
<column name="int_id">软件测试网9@[F `S E
             
<generator type="pl.kernelpanic.dbmonster.generator.NumberGenerator">软件测试网R1V%Pr!E Oz!z
                 
<property name="nulls" value="0"/>
)b:| G` y5h0WKuxj _0                 
<property name="minValue" value="20"/>
GDNK;u}'@_U0                 
<property name="maxValue" value="20"/>软件测试网,R9I#f~[ SR1i
                 
<property name="returnedType" value="numeric"/>软件测试网Bin(@.NzL&X
                 
<property name="scale" value="0"/>软件测试网I[6M!E4mq0R)xYb
             
</generator>
/Q-]FDl p!mg]0       
</column>
vjh1Zr+ZoY0       
<column name="ipaddr">
!NL j]3l;L6H0             
<generator type="pl.kernelpanic.dbmonster.generator.ConstantGenerator">
)]3VP5UdC;f,M0                 
<property name="constant" value="10.1.200.201"/>
na*R wY-E0             
</generator>软件测试网t9I,@'Pf5SX Wq
               
</column>软件测试网6y0p)HD?]Q/rY)z
               
<column name="compress_day">
C` Y_ v;G5T$c+S0                    
<generator type="pl.kernelpanic.dbmonster.generator.DateTimeGenerator">
_g'w6@vSX_0                        
<property name="nulls" value="0"/>软件测试网2^,o1bj1O [z*cF
                        
<property name="startDate" value="2006-03-01 00:00:00"/>软件测试网 PL2gP1v6n}
                        
<property name="endDate" value="2006-03-31 00:00:00"/>
S.O(b$l(@.~|!R ?0                        
<property name="returnedType" value="date"/>
`1@r.y4x$i0                     
</generator>
f*v'cUe)g1X0               
</column>
X#S7f6\%A)N0               
<column name="disk_dir">
4I u9l.a7P s0                    
<generator type="pl.kernelpanic.dbmonster.generator.ConstantGenerator">软件测试网V?Y$ZF0_$|e
                        
<property name="constant" value="/var/mqm"/>
XB Baf7hf0                     
</generator>软件测试网)Z9R0GA7_3?\j
               
</column>软件测试网"ZJ:U+}0[m0x
               
<column name="disk_device">
T8h^ Yu#T&[0                    
<generator type="pl.kernelpanic.dbmonster.generator.ConstantGenerator">
"I(F?V'w+\Bb8h0                        
<property name="constant" value="/dev/c0s0t1"/>软件测试网.Wo1N5W `3d b:Er-L
                     
</generator>软件测试网 H_#UI {Ef'TT
               
</column>软件测试网C `dgI8I
       
<column name="disk_used_rate">
RM4YB_l1Ub1?0            
<generator type="pl.kernelpanic.dbmonster.generator.NumberGenerator">
/[X:mYF0                
<property name="nulls" value="0"/>软件测试网HP,v0v3q`P5h
                
<property name="minValue" value="1"/>软件测试网IjiS a0K
                
<property name="maxValue" value="80"/>
Atg1^|Q:d;l0                
<property name="returnedType" value="numeric"/>
!ad%M!C}G0                
<property name="scale" value="0"/>
O/D?&F&w s:t~3A0             
</generator>软件测试网 \8`;{D6xq"c&C`
       
</column>
!u]1f9m"Z}r?5e0    
</table>软件测试网$i$?"j^Qxf.[
</dbmonster-schema>
软件测试网{G"Oo%pQV l

DBMonster 和 DataFactory 的对比

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

结语

        如果你正在寻找一个能够为你产生大量数据库数据的免费的工具,毫无疑问,DBMonster可以帮助你;如果你希望找到一个可以和Ant工具协作的数据产生器,DBMonster是一个很好的选择;如果更进一步,你希望找到一个可以自行扩展的数据产生工具,那么相信我,DBMonster一定是你的最佳选择:)  软件测试网(k"||*P(AN6a

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2011-05-24  
1234567
891011121314
15161718192021
22232425262728
293031    

数据统计

  • 访问量: 8468
  • 日志数: 113
  • 图片数: 2
  • 建立时间: 2007-04-28
  • 更新时间: 2008-03-04

RSS订阅

Open Toolbar