[转载]海量数据自动生成系统的架构与实现源码

[转载]海量数据自动生成系统的架构与实现(附源码) – 蔡春升 – 博客园.

海量数据自动生成系统介绍

在做单元测试和功能测试的时候,需要比较多的数据来发现问题,对于软件工程师来讲,手动输入这些数据

是蛮浪费时间的事。为了减轻咱们工程师的工作压力和工作量,我开发了这个系统。

希望大家在使用过程中提供更多宝贵意见。

test-data

该系统的主要功能

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>支持更多业务规则

参考

C#中海量数据的批量插入和更新

PreparedStatement

ConnectionString

设计 模式 from TerryLee

插件系统的设 计

Reflection in .NET

test driven

Ezsocio

dotConnect for PostgreSQL

主键生成器

generating random char and random string, random double

oracle 数据测试

表 或视图不存在

附源码

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏