51Testing丛书:性能测试进阶指南—LoadRunner 11实战(11)

发表于:2012-5-23 11:28

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陈霁    来源:51Testing软件测试网原创

  6.2.2  数据生成

  对于性能测试环境的搭建,还有一个麻烦的问题,就是性能测试数据如何生成?也就是大家经常遇到的容量问题。在性能测试方案中存在着容量为500万条论坛帖子,3万注册会员的数据要求,如何快速有效地生成这些容量呢?

  某些公司会将历史业务数据通过导入的方式实现容量的模拟,但是这种做法存在着几个问题:

  ● 某些数据内容敏感,是否会涉及信息泄露。

  ● 历史业务数据和新系统的结构不同,导出困难。

  这样做不行,难道自己再编写个LoadRunner脚本专门来发那么多帖子么?500万个帖子,如果用LoadRunner来进行数据生成效率太低,这里可以考虑使用编写SQL代码或者专门的数据生成工具来实现容量的生成。

  通过编写一个存储过程来完成对数据的随机生成,只需要修改中间的Insert命令即可完成表格的适应,以及对生成记录条数的控制。这里以T-SQL为例,该存储过程可以实现随机生成10~20位大小写混合的字符串,最终通过insertrandstr存储过程,实现记录的添加。

 --生成随机数据
 if exists (select * from sysobjects where name = 'createsinglechar' and type = 'p')
 drop proc createsinglechar
 go
 if exists (select * from sysobjects where name = 'createsingleip' and type = 'p')
 drop proc createsingleip
 go
 if exists (select * from sysobjects where name = 'createwholestr' and type = 'p')
 drop proc createwholestr
 go
 if exists (select * from sysobjects where name = 'insertrandstr' and type = 'p')
 drop proc insertrandstr
 go
 use [projcet]
 go
 
 create procedure createsingleip
 @randip int output
 as
 declare @singleip int
 set @singleip = cast(rand()*256 as int)
 --print @singleip
 while (@singleip>255 or @singleip<0)
 begin
 set @singleip = cast(rand()*256 as int)
 --print @singleip
 end
 set @randip = @singleip
 --print @randip
 go
 
 create procedure createsinglechar
 @randchar varchar(3) output
 as
 declare @singlechar varchar(10)
 set @singlechar = cast(rand()*123 as int)
 while (@singlechar<65 or @singlechar>122 or (@singlechar>90 and @singlechar<97))
 begin
 set @singlechar = cast(rand()*123 as int)
 end
 set @randchar = @singlechar
 go
 --97 122
 --65 90
 create procedure createwholestr
 @wholestr varchar(20) output
 as
 declare @len varchar(10)
 set @len = cast(rand()*20 as int)
 while (@len>20 or @len<10)
 begin
 set @len = cast(rand()*20 as int)
 end
 declare @singlechar varchar(10)
 declare @mystr varchar(20)
 declare @i int
 set @i=1
 set @mystr = ''
 while(@i<=@len)
 begin
 exec createsinglechar @singlechar output
 --select @singlechar
 set @mystr = @mystr + char(@singlechar)
 set @i=@i+1
 end
 set @wholestr = @mystr
 go
 --exec createwholestr abc
 
 create procedure insertrandstr
 as
 declare @data1 varchar(20)
 declare @data2 varchar(20)
 declare @ip1 int
 declare @ip2 int
 declare @ip3 int
 declare @ip4 int
 declare @ip varchar(15)
 
 create table testtable(
 id int not null,
 username varchar(20) not null,
 message varchar(20) not null,
 logindate varchar(20) not null,
 ip varchar(20) not null
 )
 declare @j int
 set @j=1
 while (@j<=10)
 begin
 exec createwholestr @data1 output
 exec createwholestr @data2 output
 exec createsingleip @ip1 output
 exec createsingleip @ip2 output
 exec createsingleip @ip3 output
 exec createsingleip @ip4 output
 
 set @ip=cast(@ip1 as varchar(3))+'.'+cast(@ip2 as varchar)+'.'+cast(@ip3 as varchar)+'.'+cast(@ip4 as varchar)
 
 insert into testtable([id],[username],message,logindate,ip) values (@j,@data1,@data2,getdate(),@ip)
 set @j = @j + 1
 end
 select * from testtable
 --drop table testtable
 go
 
exec insertrandstr

51/512345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号