[转载]海量数据自动生成系统的架构与实现(附源码) – 蔡春升 – 博客园.
海量数据自动生成系统介绍
在做单元测试和功能测试的时候,需要比较多的数据来发现问题,对于软件工程师来讲,手动输入这些数据
是蛮浪费时间的事。为了减轻咱们工程师的工作压力和工作量,我开发了这个系统。
希望大家在使用过程中提供更多宝贵意见。
该系统的主要功能
1> 自动生成字符串、中文字符串、整数和浮点数。
2> 目前支持MSSQL,MySQL, Oracle,Sqlite
3> 对需要加密用户密码的系统,提供加密
4> 支持第三方开发的插件
该 系统的使用方法
该系统已内置了三种常用的数据库,包括MSSql,MySql, 和Oracle.
对于这几种数据库的使用方法如下: (在App.Config需要配置ConnectionString)
MSSql:
//定义插入数据表的sql语句
string query = “insert into Users(Email,Password, Salt, Status, Online, CreateDate, VerifyDate, LastLoginDate) values(@Email, @Password, @Salt, @Status, @Online, @CreateDate, @VerifyDate, @LastLoginDate)”;
//创建 PreparedStatement
PreparedStatement pstmt = new PreparedStatement(DBType.MSSql, query);
for (int index = 0; index < 1000000; index++)
{
var email = Gloser.GetRandomEmail(8, “@gmail.com”);
var password = Gloser.getRandomString(8);
pstmt.SetParam(“@Email”, email);
pstmt.SetParam(“@Password”, CryptographyManager.EncodePassowrd(password));
pstmt.SetParam(“@Salt”, Gloser.getRandomString(15));
pstmt.SetParam(“@Status”, 1);
pstmt.SetParam(“@Online”, 1);
pstmt.SetParam(“@CreateDate”, DateTime.Now);
pstmt.SetParam(“@VerifyDate”, DateTime.Now);
pstmt.SetParam(“@LastLoginDate”, DateTime.Now);
pstmt.AddBatch();
if ((index > 0) && (index % 500 == 0))
{
pstmt.Execute();
pstmt.ClearParameters();
}
}
pstmt.Execute();
MySql
string query = “insert into settings(k,v) values(@k,@v)”;
PreparedStatement pstmt = new PreparedStatement(DBType.MySql, query);
for (int index = 0; index < 100000; index++)
{
pstmt.SetParam(“@k”, Gloser.getRandomString(32));
pstmt.SetParam(“@v”, Gloser.GetRandomChinese(100));
pstmt.AddBatch();
if ((index > 0) && (index % 500 == 0))
{
pstmt.Execute();
pstmt.ClearParameters();
}
}
pstmt.Execute();
Oracle:
string query = “insert into book(bookid,bookname,author,price) values(:bookid,:bookname,:author,:price)”;
PreparedStatement pstmt = new PreparedStatement(DBType.Oralce, query);
for (int index = 0; index < 100000; index++)
{
pstmt.SetParam(“:bookid”, Gloser.GetRandomInt(100000));
pstmt.SetParam(“:bookname”, Gloser.GetRandomChinese(25));
pstmt.SetParam(“:author”, Gloser.GetRandomChinese(10));
pstmt.SetParam(“:price”, Gloser.GetRandomInt(200));
pstmt.AddBatch();
if ((index > 0) && (index % 500 == 0))
{
pstmt.Execute();
pstmt.ClearParameters();
}
}
pstmt.Execute();
Sqlite:
Sqlite的使用方法与以上数据库类似,不同的地方是系统通过插件接口调用的。需要在配置文件中定义:
<appSettings>
<add key=”SqlCacheAssembly” value=”PerfRunner.Sqlite”/>
<add key=”SqlCacheName” value=”PerfRunner.Sqlite.SqlitePerformanceTest”/>
</appSettings>
SqlCacheAssembly指实现Sqlite的程序集名称,SqlCacheName指实现 ISqlCache接口的类名
配置Connection:
<add name=”OtherDbConnectionString” connectionString=”Data Source=E:\test.db” />
生成海量数据代码如下:
string query = “insert into book(bookid,bookname,author,price) values(@bookid,@bookname,@author,@price)”;
PreparedStatement pstmt = new PreparedStatement(query);
for (int index = 0; index < 100000; index++)
{
pstmt.SetParam(“@bookid”, index);
pstmt.SetParam(“@bookname”, Gloser.GetRandomChinese(25));
pstmt.SetParam(“@author”, Gloser.GetRandomChinese(10));
pstmt.SetParam(“@price”, Gloser.GetRandomInt(200));
pstmt.AddBatch();
if ((index > 0) && (index % 500 == 0))
{
pstmt.Execute();
pstmt.ClearParameters();
}
}
pstmt.Execute();
该系统的架构
未来的发展路径
以后的版本会提供如下功能:
1>支持Mono
2>支持更多的数据库,包括DB2,Postgsql等等。
3>界面操作
4>集成在开发环境中
5>支持更多业务规则
参考