专利名称:一种数据库测试数据的生成方法及系统的制作方法
技术领域:
本发明属于数据库应用领域,尤其涉及一种数据库测试数据的生成方法及系统。
背景技术:
随着信息化社会的飞速发展,数据库在企业、学校以及图书馆中都得到了普遍的应用。在日常应用中,数据库系统需要存储大量数据,随着业务的不断发展,数据量不断增加,数据库的负荷越来越大。为保证数据库运行的稳健性,从数据库建立到修改的过程中,维护人员需要对数据库进行大数据量的压力测试。在测试数据的生成方面,目前主要依靠数据生成装置如gen-data,但其缺点是过于僵化,不能模拟现实用户的使用习惯,数据真实性不高。另一方面,对不同的业务操作类型,现有技术也不能按照用户期望的场景,自动生成数据
发明内容
本发明提供一种数据库测试数据的生成方法及系统以解决上述问题。本发明提供一种数据库测试数据的生成方法,包括以下步骤。获取用户操作对应的程序语句,根据所述程序语句中包含的数据表名获取所述数据表的字段信息。根据所述字段信息及用户指定数量为所述数据表的不同字段分别生成所述指定数量的呈正态分布的测试数据。本发明提供一种数据库测试数据的生成系统,包括生成模块及处理模块,所述生成模块连接所述处理模块。所述生成模块,用于获取用户操作对应的程序语句,根据所述程序语句中包含的数据表名获取所述数据表的字段信息。所述处理模块,用于根据所述字段信息及用户指定数量为所述数据表的不同字段分别生成所述指定数量的呈正态分布的测试数据。相较于先前技术,根据本发明提供的数据库测试数据的生成方法及系统,通过获取用户操作对应的程序语句,并根据语句中包含的数据表名获取数据表的字段信息。根据用户业务需求提取相关数据表的字段信息,增强了业务针对性。根据所述字段信息及用户指定数量为数据表的不同字段分别生成指定数量的呈正态分布的测试数据。如此,通过模拟现实用户的使用方式,增加了测试数据的真实度。
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中图I所示为根据本发明的较佳实施例提供的数据库测试数据的生成方法的流程图;图2所示为根据本发明的较佳实施例提供的数据库测试数据的生成系统的示意图。
具体实施例方式下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。图I所示为根据本发明的较佳实施例提供的数据库测试数据的生成方法的流程图。如图I所示,本发明的较佳实施例提供的数据库测试数据的生成方法包括步骤IOf 102。步骤101 :获取用户操作对应的程序语句,根据所述程序语句中包含的数据表名获取所述数据表的字段信息。具体而言,所述数据表可以为所有关系型数据库中的数据表,对应的程序语言为 任意一种结构化查询语言。当用户在浏览器页面进行某项操作时,获取并解析用户操作对应的程序语句,将该语句中包含的所有数据表的字段信息分别导出。所述字段信息包括数据表的字段名、字段类型、字段最大宽度及是否允许字段为空。其中,字段类型包括字符型、整数型、日期型及浮点型。举例而言,若现用户在某网站进行注册,点击注册按钮后,对应的程序语句为Insert into user values,语句中包含的数据表为user表。获取user表中所有的字段信
息例如下表所示。
字段名字段类型字段最大宽度是否允许字段为空
userjd整数型10否
email字符型40否
"p^d字符型32^
username字符型24否
birth日期型10是类似地,若需要在学生查课系统中查询编号为A的学生的选课情况,用户在系统界面上点击查询按钮,对应的程序语句为Select course. *from course left joinstu-course on course. id=stu-course. id where stu_id=A0 语句中包含课程表 course及学生课程关系表stu-course,则利用数据库功能分别导出上述两数据表的字段信息。所述字段信息格式与上表相同,字段信息具体内容可根据各数据表应用自行设置,于此不再一一举例说明。步骤102 :根据所述字段信息及用户指定数量为所述数据表的不同字段分别生成所述指定数量的呈正态分布的测试数据。具体而言,根据字段信息中的字段类型、字段最大宽度及用户指定的数量为字段信息中包含的每个字段生成测试数据,且所述测试数据呈正态分布。若所述字段类型为字符型,该字段对应的测试数据由任意字符组成;若所述字段类型为浮点型,该字段对应的测试数据由包含小数点的数字组成;若所述字段类型为整数型或日期型,该字段对应的测试数据由整数组成。此外,于本实施例中,若数据表中含有字段内容为系统自动编号的字段,则不为该字段生成测试数据。举例而言,按照步骤101的示例,若用户需要为程序语句Insert into uservalues包含的user表每个字段生成10万条测试数据。以user表的pwd字段为例,该字段的字段类型为字符型,且字段最大宽度为32。下面以调用函数R,即NORMRND(MU,SIGMA,M,N)为例说明为pwd字段生成测试数据的过程。其中,MU值为pwd字段最大宽度与最小宽度的中间值。按照步骤101,pwd字段不允许为空,则该字段最小宽度为1,故所述MU值为(32+1)/2=16. 5。于本实施例中,生成的测试数据按标准正态分布,故函数R中的SIGMA值为I,于其它实施例中,可按非标准正态分布生成测试数据,对此本发明不作限定。此外,当用户需对每个字段分别生成N条测试数据时,函数中M和N值为用户需生成的测试数据排列成矩阵后的行数和列数,S卩,若用户对pwd字段生成100000条测试数据,排列成矩阵为1*100000,故函数R中的M=l,N=100000。将上述各值代入函数,则程序调用函数NORMRND (16. 5,1,1,100000)后,可为user表的pwd字段生成呈标准正态分布的100000条测试数据。除上述调用函数生成测试数据的方式外,本实施例还提供以程序代码生成测试数据的方式。仍以Pwd字段为例,生成100000条呈标准正态分布的测试数据的代码如下
const int N = 100000;
//const double MAX = 32.0;
//const double MIN = 1,0;
//consl double MTU = 16.5;
//const double SIGMA= 1.0;
static Random aa = new Random! (int)(DateTime.Now.Ticks / N));
public double AverageRandom(double mk, double max)//产 §£(min,max)t_ 均句分布
的随机数
{
int MINiiteger = (int)(miii 傘 N);
int MAXnteger = (_(max N);
int resultliiteger = m.K1 ext(MMnteger, MAXnteger);
return resultlnteger / N;
}
puijlic double NormalCdotible x, double mill, double sigma) /71丨丨态分布概率密IiSft
return 1.0 / (x * Math.Sqrt(2 * Math.PI)傘 sigma) * Matli.Exp(-l * (Math.Log(x)-miu) * (Math.Log(x) - mm) / (2 * sigma * sigma));
I
public double Random_NormaI(cioiible miu, double sipna, double min, double max)〃产态分布随机数
{
double x;
double dScope; double y:
do
{
K .= AvemgeRandom(min5 max);
y = Normal(x,mk, si,};
dScope = AverageRandom(0, Nomal(mk, ink, sigma));
} while (dScope > y); return x;
}于本实施例中,生成正态分布测试数据的方式为调用函数及代码实现,于其它实施例中,也可以用户自定义方式实现,对此本发明不作限定。图2所示为根据本发明的较佳实施例提供的数据库测试数据的生成系统的示意图。如图2所示,本发明的较佳实施例提供的数据库测试数据的生成系统包括生成模块201及处理模块202,所述生成模块201连接所述处理模块202。所述生成模块201,用于获取用户操作对应的程序语句,根据所述程序语句中包含的数据表名获取所述数据表的字段信息。所述处理模块202,用于根据所述字段信息及用户指定数量为所述数据表的不同字段分别生成所述指定数量的呈正态分布的测试数据。关于上述系统的具体操作流程同上述方法所述,故于此不再赘述。综上所述,根据本发明提供的数据库测试数据的生成方法及系统,获取用户操作对应的程序语句,并根据语句中包含的数据表名获取数据表的字段信息。根据所述字段信息中字段类型、字段最大宽度及用户指定数量为每个字段分别生成呈正态分布的测试数据。如此,根据用户业务需求提取相关数据表的字段信息,增强了业务针对性。并且借助接近用户使用习惯的分布方式,增加了测试数据的真实度。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种数据库测试数据的生成方法,其特征在于,包括以下步骤 获取用户操作对应的程序语句,根据所述程序语句中包含的数据表名获取所述数据表的字段息; 根据所述字段信息及用户指定数量为所述数据表的不同字段分别生成所述指定数量的呈正态分布的测试数据。
2.根据权利要求I所述的方法,其特征在于,所述数据表的字段信息包括字段名、字段类型、字段最大宽度及是否允许所述字段为空。
3.根据权利要求2所述的方法,其特征在于,所述字段类型包括字符型、整数型、日期型及浮点型。
4.根据权利要求I所述的方法,其特征在于,所述数据库为关系型数据库,所述程序语 言为结构化查询语言。
5.一种数据库测试数据的生成系统,其特征在于,包括生成模块及处理模块,所述生成模块连接所述处理模块, 所述生成模块,用于获取用户操作对应的程序语句,根据所述程序语句中包含的数据表名获取所述数据表的字段信息; 所述处理模块,用于根据所述字段信息及用户指定数量为所述数据表的不同字段分别生成所述指定数量的呈正态分布的测试数据。
全文摘要
本发明提供一种数据库测试数据的生成方法及系统,本发明方法包括以下步骤。获取用户操作对应的程序语句,根据所述程序语句中包含的数据表名获取所述数据表的字段信息。根据所述字段信息及用户指定数量为所述数据表的不同字段分别生成所述指定数量的呈正态分布的测试数据。
文档编号G06F17/30GK102722537SQ20121015953
公开日2012年10月10日 申请日期2012年5月22日 优先权日2012年5月22日
发明者刘晓东, 胡加明 申请人:苏州阔地网络科技有限公司