希望能找到能与我共同进步的知心朋友!

生成大量的测试数据的三种方法

上一篇 / 下一篇  2012-08-13 17:45:54

生成大量的测试数据的三种方法:

1写sql,2工具plsql,3LoadRunner

性能测试场景之一:
[1]03 临时表里有20W记录,发送ESB
说明:结算后台对完账后,在对账汇总确认菜单中点“确认”按钮,系统会将已清算的数据信息插入资金库的临时表pac_biz_account_histmp中,然后逐步esb发送给物流订单系统进行分润处理。
一 通过工具生成20w笔记录1、  首先介绍一种很方便的方法:采用PL SQL Develop内嵌的data generator工具
1)  打开PL SQL Develop,选择Tools/Data Generator,出现以下界面

 




2)  Owner中选择资金库Pacioli,Table中选择临时表pac_biz_account_histmp,number of records中输入200000(这些都可以根据具体的需要进行选择的噢)
然后下面会出现临时表中所有的字段,根据实际情况进行配置后,显示如下: 


 


3)        当然拉,为了防止ID和现有的表重复,我们是可以使用SEQUENCES的,点击每个字段后面的…选项可以对每个字段进行设置
4)        所有的准备好之后,我们可以先测试一下Strat a test run,测试通过后,可以选择窗口中左下角的create data in DB按钮即可生成数据到临时表中。

2.通过自动化工具实现,下面以load runner为例
   1)  Load runner是一款负载压力测试工具,可以通过load runner的Vurtual User Generator工具实现模拟业务场景然后系统向数据库中插入记录,跟进实际业务实现使用load runner向表中插入记录,或者通过脚本来实现,现将脚本操作和运行过程分享下:
   2) 打开Mercury LoadRunner,选择applications/Vurtual User Generator,在出现的窗口中选择Oracle(2-tier)如下图:

 


3) 点击ok后,在弹出的窗口中选择:

 



其中Program to record 选择电脑中plsqldev.exe的安装路径,然后点击ok,在弹出的窗口中输入以下脚本:
vuser_init()
{
    unsigned long rownum;
//初始化数据库部分
         lrd_init(&InitInfo, DBTypeVersion);
         lrd_initialize_db(LRD_DBTYPE_ORACLE, 3, 0);
         lrd_env_init(LRD_DBTYPE_ORACLE, &OraEnv1, 0, 0);
         lrd_ora8_handle_alloc(OraEnv1, SVCCTX, &OraSvc1, 0);//
         lrd_ora8_handle_alloc(OraEnv1, SERVER, &OraSrv1, 0);
         lrd_ora8_handle_alloc(OraEnv1, SESSION, &OraSes1, 0);

//连接数据库
         lrd_server_attach(OraSrv1, "PAY", -1, 0, 0);//pay怎么得到的?
//初化始句柄
    lrd_ora8_attr_set_from_handle(OraSvc1, SERVER, OraSrv1, 0, 0);
//连接数据库
         lrd_ora8_attr_set(OraSes1, USERNAME, "adm_zhifb", -1, 0);
         lrd_ora8_attr_set(OraSes1, PASSWORD, "ali88", -1, 0);

//初始化句柄
    lrd_ora8_attr_set_from_handle(OraSvc1, SESSION, OraSes1, 0, 0);

//进程开始      
    lrd_session_begin(OraSvc1, OraSes1, 1, 0, 0);
         lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm1, 0);
//设定语句
    lrd_ora8_stmt(OraStm1, "insert into zhifb.beyond_bank_pay_online(id,iw_account_no,gmt_create) values (zhifb.seq_beyond_bank_pay_online.nextval,1234,to_date('2005-4-12 13:45:34','YYYY-MM-DD fmHH24fm:MI:SS'))",1,0,0);
//执行语句
lrd_ora8_exec(OraSvc1, OraStm1, 0, 0,&rownum,0,0, 0, 0, 1);
         return 0;
}
这个脚本是师傅流川教我的,目前我也不大懂,有兴趣的同学以后可以和我一起学习这个哦,不过这个脚本在运行的时候向临时表插入有点问题,希望各位大虾指点下
直接通过SQL语句来实现    在表浏览视图,选择表后,按住鼠标左键将表拖到query sql窗口,然后在弹出的快捷菜单中选择insert,然后在另一个表里面点select,修改where条件(这样就可以不用书写这么一大串SQL语句了,直接通过鼠标操作实现
insertintopac_biz_account_histmp
  (id,   bank_name,   trans_code,   digest_no,   amount,   trans_log_id,   account_date,   compare_date,   clear_date,   voucher_no,   batch_no,   gmt_create,   gmt_modified,   memo,   standby_voucher_no,  operator)
  selectid,  bank_name, trans_code, digest_no,amount,trans_log_id,account_date, compare_date,         clear_date,         voucher_no,         batch_no,         gmt_create,         gmt_modified,         memo,         standby_voucher_no,        operator
frompac_biz_account_historywhererownum<5001and  bank_name = '宅急送快递'andtrans_code = '400322'
通过存储过程来实现存储过程可以理解为是内嵌在ORACLE里面的包装好的SQL语句。存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
在公司内部,创建存储过程是必须通过DBA的批准的。在数据库中查找存储过程很方便,在数据库浏览窗口中选择Procedures来查看,可以看一个简单的例子:
while()
{
         callprocedure("p_test").;
         }
create procedure p_test(a,b,c)
begin
         insert into t values(a,b,c);
end;
四 通过程序来实现   程序实现有两种方式
一种为通过for循环,链接数据库,然后执行insert操作实现,不过这种方式会每insert一条记录然后就要链接一次数据库,而且还要网络传输数据到DB中,所以会比较慢
另一种也是通过程序,不过可以把链接数据库的操作在for循环之前执行,然后insert多条数据的时候就只用耗费网络传输数据的时间了,这样比之前的一种操作要节约时间一些。
附上一个简单的例子:
java
while()
{
         callprocedure("p_test").;
         }
create procedure p_test(a,b,c)
begin
         insert into t values(a,b,c);
end;

  • 大小: 19.5 KB
  • 大小: 28.6 KB
  • 大小: 37.1 KB
  • 大小: 19.6 KB

TAG:

 

评分:0

我来说两句

Open Toolbar