Datafactory 实际使用案例

一、       简介

QuestDataFactory 是一种快速的、易于产生测试数据工具,它能建模复杂数据关系,且有带有GUI界面。DataFactory是一个功能强大的数据产生器,它允许开发人员和QA毫不费力地产生百万行有意义的测试数据。

二、       原理说明

通过和数据库进行连接后,首先读取数据库中表的schema(概要),即表的定义之类的内容,以列表的形式显示;然后由用户定制要产生数据的具体内容,如数字范围、字符串长度、要产生数据记录的个数等等,最后运行工程,批量生成数据,Datafactory支持各种主流数据库(oracle、DB2、MS SQL),甚至excel、access等。下面以以主流的oracle为例进行说明。

三、       安装说明

第一步:解压Quest DataFactory v5.6 英文正式版.zip,执行setup.exe文件,按向导安装。

第二步:运行Keygen.exe,在Site Message中设置名称,下拉框中选择DataFactory生成 key。

第三步:安装成功后,使用key在bin文件中的工具(dfactory.exe)进行注册,选择DataFactory,点击Edit key,输入第二步中生成的key以及Site message中设置的名称即可。

四、       数据库环境说明

图表 1

数据库中有3个表,一个是FW_DEPARTMRNT(部门表),一个UP_STAFFROOM(教研室表),另一个为JH_COURSE(课程表)。现在我们需要用datafactory往JH_COURSE中插入记录,JH_COURSE中的STAFFROOMID需要读取UP_STAFFROOM中的STAFFROOMID,而 UP_STAFFROOM中的STAFFROOMID又取自FW_DEPARTMRNT的DEPID,所以我们需要先给UP_STAFFROOM插入记录,才能在继续添加课程记录。

下图为JH_COURSE中的字段信息:

图表 2

下图为UP_STAFFROOM中的字段信息

图表 3

五、       详细操作步骤

1、            连接数据库,创建工程文件

安装完datafactory之后,进入file菜单下面点击new,然后选择oracle数据库类型。

图表 4

下一步,输入需要连接数据库服务、用户名和密码。

下一步,选择需要插入数据的表UP_STAFFROOM和JH_COURSE。

注意:“Fetch Dependent Tables”按钮,用来加入对应所选表在数据库设计中有依赖关系的表,防止生成数据库时的疏漏。(不建议使用)

下一步,输入工程名称为“JH_test后,下一步完成即可。

2、            设置数据量及生成数据方式

Datafactory可对每个字段进行设置,在导入数据表时工具已通过数据字典读取每个字段的数据类型,根据不同的数据类型datafactory可进行不同的规则设置:

首先选择左侧的表设置需要插入的数据数量,如图:

Datafactory工具栏中的setting可进行通用设置,如下所示

3、            常见的三种数据类型的设置

1)   数字型

  1. 从本地表格中选择数据

将本地数据文件导入DataFactory的配置中,下次可以方便选择。

导入数据文件的操作如下:

第一步:准备数据文件,要求TXT格式,文件模版。

COURSENAME:varchar(64)

评论写作

论文写作

外贸英语

专业英语

低温物理导论

英语影视

英语听说训练

…………

第二步:按图将数据文件导入DF。

  1. 取相关联的表的数据信息(主从表关系的字段)

比如,有2张表课程表(COURSE)和教研室表(STAFFROOM),课程的STAFFROOMID需要部门表STAFFROOMID中取值,如图设置:

  1. 从数据库的查询结果中选择数据(具有主键关系和转码的字段)

将查询的sql 语句粘入文本框,如教研室表中的STAFFROOMID信息需要在部门表的PEDID中取值,如图设置:

  1. 插入连续的值

我们能够设定起始值及增长值的大小,系统自动计算结果,如:起始值为001,增长值为1,则产生的数据序列为001,002,003,……例如编号(COURSENO),具体设置如下图:

  1. 插入一定范围内的随机值

插入随机值,我们可以设置其范围,则结果大小在设定范围之内,所以选择Insert random values方式,例如学分(CREDITHOUR)设置为0—20之间随机取值,具体设置如下图:

  1. 插入常量

将字段信息设置为一个常量,例如总学时(TOTALPERIOD)设置为80,方法如图所示:

2)   字符型

  1. 从本地表格中选取数据

具体方式参考:(A.从本地表格中选择数据

  1. 取相关联的表的数据信息(主从表关系的字段)

具体方式参考:(B取相关联的表的数据信息(主从表关系的字段))

  1. 从数据库的查询结果中选择数据(具有主键关系和转码的字段)

具体方式参考:(C从数据库的查询结果中选择数据(具有主键关系和转码的字段))

  1. 插入随机的字符组合

插入随机的字符组合,可以设置字符组合的长度,例如SHORTNAME(课程简称),具体设置如下图:

  1. 插入常量字符串

将字段信息设置为一个常量字符串,例如“是否实践环节”(ISPRACTICE)这个字段,可以根据体的业务要求输入一个常量字符串“是”或“否”,具体设置如图所示:

  1. 插入组合文本,可以插入文本,数字,日期时间混合的文本。

设置一个固定字符串+一个递增值为1的流水号的字段。

例如课程名称(COURSENAME)需要设置固定字符串为“英语”,递增值为1,具体操作如下:

第一步:选择Build a composite field(组合文本)方式。

第二步:通过点击的 add 按钮得到下图界面

第三步:根据具体要求选择首先选择Text字符型,点击Ok,得到下图,进行设置如下:

第四步:点击Add,因为要插入递增流水号,随意选择Numerice,点击ok得到下图进行设置:

3)   日期/时间

  1. 取相关联的表的数据信息(主从表关系的字段)

具体方式参考:(B取相关联的表的数据信息(主从表关系的字段))

  1. 从数据库的查询结果中选择数据(具有主键关系和转码的字段)

具体方式参考:(C从数据库的查询结果中选择数据(具有主键关系和转码的字段))

  1. 插入连续的时间

插入连续的时间,可以指定起始时间和增长时间,例如入学时间(ENROLDATE)设置如下图:

  1. 插入随机的时间(可以设置时间范围)

插入随机的时间,可以设置时间范围,例如毕业时间(GRADUATEDATE)具体设置如下图:

  1. 插入当前系统时间

插入系统当前的时间,可以设置日期的格式。

格式设置方式如下:

第一步:点击Format(日期格式)设置按钮

第二步:进入页面进行设置

4、     Run(运行)

5、          运行时出现的一些关于约束的问题

出现一些字段有关于约束的提示

根据提示的字段到数据库中进行相关约束的查找查询,后根据具体的字段约束,选择合适的方式进行设置。

+

  • 从数据表插入数据,这里的数据表是系统提供的。
  • 从数据库插入数据,我们需要自己编写SQL语句从数据库中提取数据。
  • 用表达式产生数据,我们可以编写表达式,系统将使用结果生成数据。
  • 插入连续的值,我们能够设定种子及增长值的大小,系统自动计算结果,如:种子为1,增长值为2,则产生的数据序列为1,3,5,7……
  • 插入随机值,我们可以设置其范围,则结果大小在设定范围之内。
  • 插入常量,结果将为常量值

实例说明:

数据型有4种设置规则 Insert values  from  an arithmetic expression、Insert sequential values、Insert random values、Insert a constant value.

  1. 1.  
    Insertvalues  from  an arithmetic expression方式如下

用表达式产生数据,我们可以编写表达式,系统将使用结果生成数据,如下图:

  1. 2.  
    Insert
    sequential values
    方式如下:

如JH_COURSE表中的COURSENO(教研室编号),COURSENO编号字段为long integer类型,这里设定为插入顺序值(insert sequential
values)。

  1. 3.  
    Insert
    random values
    方式设定规则如下:

如JH_COURSE表中的TOTALPERIOD(总学时)为number类型,这里设定一个随机数值(Insert random values),数字跨度为1—200如下图:

  1. 4.  
    Insert a
    constant value.
    方式

例如TOTALPERIOD(总学时),我们需要设置它为一个固定的数字,就直接选择Insert a constant value(插入常量)方式,然后自定义将要应用的常量数据,如下图:

4)   字符型

  • 从数据表中插入数据。
  • 从数据库中插入数据。
  • 从外部文件中插入数据。
  • 插入随机的字符组合,可以设置字符组合的长度。
  • 插入常量字符串
  • 插入组合文本,可以插入文本,数字,日期时间混合的文本。

实例说明:

1、     外部数据(TXT 文档)的引入

说明: 在测试数据库时,很多情况要求根据真实的数据来做必要的测试,这就需要我们可以通过外部自定义的文档来产生数据表中的数据,比如我现在有一个
TXT 文档,里面我想要录入到数据表”港口”的值,上海,大连,香港,福建,青岛 .....

首先创建一个 TXT 文件,名字任意,格式如下

注意:
字段名称:字段类型
(字段类型长度)

引入 TXT 文件的方法:

右击项目名称(比如说这里的 JH_COURSE),如图下图所视

选择 Insert Create Datatable 进入如下图界面

点选 Import data from file,点击下一步,点击 Browse 选择相应的 TXT 文件,点击下一步,然后为该引入的 TXT 自定义一个名字,下一步,最后完成引入 TXT 文件的操作.引入成功后,然后选择Insert value from 
data  table方式,在data中选择刚刚定义的那个名称。

例如JH_COURSE表中的COURSENAME(教研室名称),我们需要设置的字段要求是:教研室+一个自动增加的流水号,方式如下:

首先选择Build a composite field(创建一个合成字段)方式,然后我们来对这个合成字段做格式设置,通过点击的
add 按钮得到下图界面

因为我们要产生COURSENAME这个固定的字符,所以我们选择 Text 类型,点击 OK,进入下图界面,在 Option 中选择对应的 Insert a string constant ,

然后在 Constant Text Expression 中输入自定义的字符,比如这里的教研室,完成后保存设置

因为还要生成一个流水账号,所以还要通过点击的
add 按钮,我们选择 Numeric 类型

点击 OK,进入下图界面,在 Option 中选择对应的 Insert sequential values,

然后进行字段规则的设置,start表示开始流水号,Increment表示递增值,

完成后保存设置

对于合成字段的元素,选取后可以进行策略修改(Modify),删除(Remove),顺序上移(Move up),顺序下移(Move down)

5)   日期/时间

  • 从数据表中插入数据。
  • 从数据库中插入数据
  • 插入连续的时间,可以指定起始时间和增长时间。
  • 插入随机的时间,可以设置时间范围
  • 插入当前系统时间

日期/时间有3种设置规则 Insert sequential values、Insert random values、Insert  the current system
date

  1. 1.  
    Insert sequential
    values
    方式

例如JH_COURSE表中的CREATETIME(创建时间),我们需要设置当前时间+递增值为1,递增类型为月的规则,我们将在Option中先选择Insert sequential values方式,start选择当前时间,Increment为1,类型选择month,进行设置,如下图:

  1. Insert 
    random  values
    方式

例如JH_COURSE表中的CREATETIME(创建时间),在Option中先选择Insert 
random  values方式(某一个时间段),我们在Between this
date时间选填控件中进行设置,时间跨度选择为2005年-2013年的任何一天,如下图:

  1. Insert  the 
    current  system  date
    方式

例如JH_COURSE表中的LASTMODIFYTIME(最后修改时间),在Option中先选择Insert 
the  current  system 
date方式(插入系统当前时间),既然是最后修改时间那我们就设置为系统当前日期。

  1. 此外可以通过weekdays and weekend
    days(工作日+周末)/weekdays only(只有工作日)/weekend days only(只有周末)来设置周末,如下图:

可通过format选项来设置日期格式,分别设置Date和Time的格式,生成数据将以设置样式保存到数据库中,样式可参照最下方Sample。此外,也可以在Custom Format选项中指定自定义格式,如‘2010-08-18’。

6、     外键字段的产生

说明:外健是数据库关系中最普通也是使用最平凡的约束方式,我们可以通过二种方式来实现外健约束. 一种是 Insert value from a data table,另一种是 Insert value from an
sql database

1)      
Insert value from an sql database 方式

例如:UP_STAFFROOM表中STAFFROOMID和 FW_DEPARTMENG表中 DEPID 之间是外健关系, 所以选择从数据库插入数据,我们需要自己编写SQL语句从数据库中提取数据,STAFFROOMID需要取DEPID值,因此我们使用Insert value from an sql database方式。

我们把DEPID字段产生的方式先设置成为写 SQL 语句的方式,然后在SQL Statement 中填入Select DEPID from GDS_CS.FW_DEPRATMENT  这个简单的SQL语句使STAFFROOMID 得到 DEPID 的值,并且用户可以在 SQL 返回的结果中,筛选所需要的内容
if more than
one recode is returned(如果返回的条件超过一行),Use first record(只选择第一行作为当前字段值),Select a record at random(随机选择一个值作为当前字段值) 注意:由于教研室ID字段是唯一的,所以要勾选Unique(唯一的)。

2)      
Insert value from an sql database 方式

例如:表UP_STAFFROOM中的SATFFROOMID与表JH_COURSE中的SATFFROOMID为外键关系,所以表JH_COURSE中的SATFFROOMID需要取值与表UP_STAFFROOM中的SATFFROOMID,需要使用Insert value from a data table 方式,分别出现以下设置内容,在Data(产生数据的数据源)中选择与之关联的~GDS_CS.UP_STAFFROOM 表,然后在Field中选择SATFFROOMID 如图:

7、 字段转码问题

例如:FW_COURSE表中的SUBJECTTYPE(课程学科分类码),转码问题需要选用Insert value from an sql database方式,首先在数据库中查询出需要转码的字段。

根据表中的提示,先在FW_CODELIST视图中查看有没有KCXKFLM的码值。

我们把需要转码的字段产生的方式先设置成为写 SQL 语句的方式,然后在SQL Statement 中填入select CODEVALUE  from GDS_CS.FW_CODELIST where  CODETYPE='KCXKFLM' 这个简单的SQL语句使SUBJECTTYPE得到KCXKFLM 的码值。

8、 运行(Run)

9、         
运行后出现的一些约束问题

如果运行中出现一些字段有关于约束的提示

根据提示的字段到数据库中进行相关约束的查找查询。

然后根据具体的字段约束,选择合适的方式进行设置。

Datafactory 实际使用案例的更多相关文章

  1. 数据库优化案例——————某市中心医院HIS系统

    记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是整体的优化思想是很难学会的.这也是为什么自己特别喜欢看案例,今天也开始分享自己做的优化案例. 最近一直很忙,博客产出也少的 ...

  2. SQL Server内存遭遇操作系统进程压榨案例

    场景: 最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈(请读yù)值设置的是15%,开始时没当回事,以为是有什么统计类的查询,后来越来越频繁. 探索: 我决定来查一下,究竟是什么在作怪,我排查的 ...

  3. solr_架构案例【京东站内搜索】(附程序源代码)

    注意事项:首先要保证部署solr服务的Tomcat容器和检索solr服务中数据的Tomcat容器,它们的端口号不能发生冲突,否则web程序是不可能运行起来的. 一:solr服务的端口号.我这里的sol ...

  4. Yeoman 官网教学案例:使用 Yeoman 构建 WebApp

    STEP 1:设置开发环境 与yeoman的所有交互都是通过命令行.Mac系统使用terminal.app,Linux系统使用shell,windows系统可以使用cmder/PowerShell/c ...

  5. 了不起的 nodejs-TwitterWeb 案例 bug 解决

    了不起的nodejs算是一本不错的入门书,不过书中个别案例存在bug,按照书中源码无法做出和书中相同效果,原本兴奋的心情掺杂着些许失落. 现在我们看一下第七章HTTP,一个Twitter Web客户端 ...

  6. 一个表缺失索引发的CPU资源瓶颈案例

    背景 近几日,公司的应用团队反应业务系统突然变慢了,之前是一直比较正常.后与业务部门沟通了解详情,得知最近生意比较好,同时也在做大的促销活动,使得业务数据处理的量出现较大的增长,最终系统在处理时出现瓶 ...

  7. 【Machine Learning】决策树案例:基于python的商品购买能力预测系统

    决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...

  8. Redis简单案例(二) 网站最近的访问用户

    我们有时会在网站中看到最后的访问用户.最近的活跃用户等等诸如此类的一些信息.本文就以最后的访问用户为例, 用Redis来实现这个小功能.在这之前,我们可以先简单了解一下在oracle.sqlserve ...

  9. springmvc+bootstrap+jquerymobile完整搭建案例(提供下载地址)

    用一张简单的截图说明下,然后提供一个下载地址. bootstrap的大部分样式官方都是写好的,所以只需要class="官方样式即可",具体可以看官方的案例,下面来个地址 http: ...

随机推荐

  1. 第七章 路由 72 路由-路由redirect重定向的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  2. java虚拟机的基本结构如图

    1 java虚拟机的基本结构如图: 1)类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间.除了类的信息外,方法区中可能还会存放运行时常量池信息,包括字 ...

  3. 201871010101-陈来弟《面向对象程序设计(java)》第十七周学习总结

    实验十七  线程同步控制 实验时间 2018-12-10 第一部分:理论知识 1.多线程并发执行中的问题 ◆多个线程相对执行的顺序是不确定的. ◆线程执行顺序的不确定性会产生执行结果的不确定性. ◆在 ...

  4. Js基础知识(四) - js运行原理与机制

    js运行机制 本章了解一下js的运行原理,了解了js的运行原理才能写出更优美的代码,提高运行效率,还能解决开发中遇到的不理解的问题. 进程与线程 进程是cpu资源分配的最小单位,进程可以包含多个线程. ...

  5. 题解 [ZJOI2008]树的统计Count

    [ZJOI2008]树的统计Count Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u ...

  6. Educational Codeforces Round 26 [ D. Round Subset ] [ E. Vasya's Function ] [ F. Prefix Sums ]

    PROBLEM D - Round Subset 题 OvO http://codeforces.com/contest/837/problem/D 837D 解 DP, dp[i][j]代表已经选择 ...

  7. 在java下面配置xml导致idea编译失败

    1.今天遇到一个问题在java配置dao.xml的时候导致,idea编译失败 然后把pom.xml上面的 <build> <resources> <resource> ...

  8. CDOJ 1256 打表+数组 统计

    昊昊爱运动 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  St ...

  9. 23.Python位运算符详解

    位运算符通常在图形.图像处理和创建设备驱动等底层开发中使用.使用位运算符可以直接操作数值的原始 bit 位,尤其是在使用自定义的协议进行通信时,使用位运算符对原始数据进行编码和解码也非常有效. 位运算 ...

  10. shiro 不使用加密 解决 org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token [org.apache.sh

    测试本方法为失效的 报错: org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token ...