千万级测试数据生成方法【转】
http://blog.csai.cn/user1/16350/archives/2009/36012.html
在对业务系统进行可用性测试以及性能测试时,往往需要在后台数据库中生成大量的测试数据,如何快速的生成所需要的数据?这里给出几种不同的解决方法,并对各自的使用场合进行大致的比较。
一:使用存储过程
在这种方法中,需要对后台数据库的表结构有相当的了解,比如表之间的参照关系,表的自增长主健如何实现的,表中的特殊字段的代码如何产生等等。在熟悉表结构的基础上编写存储过程产生数据,当然对于复杂的数据结构可以编写一系列的存储过程去分别产生各个表的数据,然后由一个总的存储过程控制。
该方法的适用场合:对数据库结构非常熟悉,并且熟悉相应的存储过程编写。
优点是:在数据库中执行,效率比较高。
缺点是:需要花大量的时间在存储过程的调试上,而且为了可以并行执行存储过程需要做一些特殊的设计。
二:使用批量测试工具
这里可以首先使用测试工具如WinRunner,Quality Test Center等录制运行脚本,然后多次运行这些运行脚本,通过应用程序的反复运行在后台数据库中产生业务数据。
该方法的使用场合:不熟悉后台数据库结构,业务数据量需求不是很大。
优点是:测试脚本录制一遍,可以分步在不同的机器上反复运行。
缺点是:如果应用程序中对重复输入数据进行了屏蔽,则会导致脚本重复运行的失败。
三:使用工具批量生成Insert脚本
这里可以使用PowerDesigner等工具,首先从数据库中Reverse Engineering出来数据库的Schema,然后设置测试数据所需要的Profile,以及各个表所需要的测试数据量,再生成Insert脚本,最后通过数据库的命令行程序执行这个SQL脚本将数据Insert到数据库中。对于不同的数据库命令行程序不同,比如对MS SQL Server是osql,对Sybase ASE是isql,对Oracle是sqlplus等。
该方法的使用场合:对数据库结构不熟悉,同时需要产生大量业务数据(如千万级)。
优点是:做了相应设置之后,Insert脚本自动生成。
缺点是:对于千万级的测试数据可能要分成若干个SQL脚本,分别产生,并行运行。对Oracle之类的数据库尤其要考虑时间日期以及时间戳类型的字段的值得处理问题。
以上对如何生成大批量数据的常用方法作了大致的对比介绍,当然还有其它一些通用的问题需要考虑,如为了提高数据生成效率,生成测试数据的时候是否首先删掉大表的索引,以及可能影响数据插入数据的trigger,数据生成完了之后再重新generate到数据库中等问题。
总之,我们可以结合各种不同的场合,选择一种方便,高效,快速的数据生成方法,以便提高性能测试和可用性测试的执行效率。