本空间所有日志均为原创,如有转载请注明出处!!!!!!! 有需要讨论问题的可加QQ:28005389(上班时间一般都在隐身),邮箱hurh_888@sina.com 共同学习、共同进步

Loadrunner 测试sql语句性能

上一篇 / 下一篇  2008-09-22 15:23:49 / 个人分类:loadrunner

本次通过loadrunner录制Sql Server介绍一下如何测试一个sql语句或存储过程的执行性能。51Testing软件测试网sp3h}\Oc3V ^a A

主要分如下几个步骤完成:51Testing软件测试网p@Gbf

第一步、测试准备

{?;}+wPk ^0

第二步、配置ODBC数据源

pUOE$Pk3R-q0

第三步、录制SQL语句在Sql Server查询分析器中的运行过程51Testing软件测试网%Er:^ vn+_)b(ISV ~

第四步、优化录制脚本,设置事务

9D-n(` nW(|mD0

第五步、改变查询数量级查看SQL语句的性能51Testing软件测试网 ds#`O?*zT p

第六步、在controller中运行脚本

-a:GS4IZj0

转载请注明出处:http://www.51testing.com/?41972

"Sxb A9^o-g:p0

下面开始具体的介绍:

n2h!D.K\b"Z NY^#e0

测试准备阶段我们首先要确认测试数据库服务器:我们可以在本地安装SQL SERVER数据库服务端及客户端,也可以确定一台装好的SQL SERVER服务器。51Testing软件测试网dv%o$RqGO

接下来,准备测试数据:对数据库测试时我们要考虑的不是SQL语句是否能够正确执行,而是在某数量级的情况下SQL语句的执行效率及数据库服务的运行情况,所以我们分别准备不同数量级的测试数据,即根据实际的业务情况预估数据库中的记录数,在本次讲解中我们不考虑业务逻辑也不考虑数据表之间的关系,我们只建立一张表,并向此表中加入不同数量级的数据,如分别加入1000条、10000条、50000条、100000条数据查看某SQL语句的执行效率。51Testing软件测试网)n8Pj.m9X,^ U

在查询分析器中运行如下脚本:

s{0roR E0

--创建测试数据库51Testing软件测试网/MD-U6Pd2EO9Vt_{4U

create database loadrunner_test;

iA9[;z&\ A;D$~0

use loadrunner_test51Testing软件测试网e;c,i6u~wF1P s

--创建测试数据表

k}i2kh`0

create table test_table

efS8h~0

(username varchar(50),sex int,age int,address varchar(100),post int)51Testing软件测试网;t5P,h&U9U}

--通过一段程序插入不同数量级的记录,具体的语法在这里就不多说了

8HG#U n*\vPoEQJ0

declare  @i  int  

R*m F{gq@+i/F%qu(x0

 set  @i=0  

mV$V5n{0

 while  @i<1000   //循环1000次,可以根据测试数据情况改变插入条数

gr [K } W0

 begin51Testing软件测试网 E c2GF X#Ye

     BEGIN TRAN T1

)w8dw'kD0

     insert into test_table (username,sex,age,address,post) values ('户瑞海'+cast(@i as varchar),@i-1,@i+1,'北京市和平里'+cast(@i as varchar)+'',123456); 51Testing软件测试网W\ |:kY#N{0t-j,Y"[-F

     IF @@ERROR <> 0

G4PUJ,iN){0

        begin51Testing软件测试网IW6zr%^1e3S3Q8t R

          rollback;51Testing软件测试网-DP,Li*o@l

          select @@error

vy Y@ c-T#\0

        end

%g(v6u-Y3? bV#S0

     else

^m:M e G y0

        begin

.cE)}"c8R?0

          commit;

pL7aV4F%]r'D0

          set  @i  =  @i+1

V*ifIM's D q0

        end    51Testing软件测试网,gFsC"D r,a

 end51Testing软件测试网+_,t-f.IUyFf0}!{

转载请注明出处:http://www.51testing.com/?41972

7y^p7B4SoI0

好了,执行完上述语句后,建立的数据表中已经有1000条记录了,下面进行第二步的操作,配置ODBC数据源,为了能让loadrunner能够通过ODBC协议连接到我们建立的SQL SERVER数据路,我们需要在本机上建立ODBC数据源,建立方法如下:

7X,{a.x+?t9c0

控制面板性能和维护管理工具数据源(ODBC--添加,在列表中选择SQL SERVER点击完成,根据向导输入数据源名称,链接的服务器,下一步,输入链接数据库的用户名和密码,更改链接的数据库,完成ODBC的配置,如果配置正确的话,在最后一步点击“测试数据源”,会弹出测试成功的提示。51Testing软件测试网;n n(b:`f _ v:O]S

配置好ODBC数据源后就要录制SQL语句在查询分析器中的执行过程了:51Testing软件测试网4I!i3nb:}&{j

1、 打开loadrunner,选择ODBC协议

6\^UP:R"M/qt0

2、 start recording中的application type选择win32 applicationprogram to record中录入SQL SERVER查询分析器的路径“..\安装目录\isqlw.exe51Testing软件测试网GACA\fK&l*W

3、 开始录制,首先通过查询分析器登录SQL SERVER,在打开的查询分析器窗口中输入要测试的SQL语句,如“select * from test_table;

xdi,p+O$d0

4、 在查询分析器中执行该语句,执行完成后,结束录制

,Q2^w L&u0

好了,现在就可以看到loadrunner生成的脚本了(由于脚本过长,在这里就不粘贴了,有需要的朋友可以加我QQ,我把脚本发给你们),通过这些语句,我们可以看出,登录数据库的过程、执行SQL语句的过程51Testing软件测试网'Xs9n$s0i`W

转载请注明出处:http://www.51testing.com/?4197251Testing软件测试网^Xu5PLTX dh.|y#M

接下来,我们来优化脚本,我们分别为数据库登录部分和执行SQL语句的部分加一个事物,在增加一个double的变量获取事务执行时间,简单内容如下:

-o4x*p8M]7q LA4q0

Action()51Testing软件测试网#A w6E1Q"g8C-{tmv

{ double trans_time; //定义一个double型变量用来保存事务执行时间51Testing软件测试网4qC%j&DL

  lr_start_transaction("sqserver_login"); //设置登录事务的开始

6GtA3M|]9N0

lrd_init(&InitInfo, DBTypeVersion);  //初始化链接(下面的都是loadrunner生成的脚本了,大家可以通过帮助查到每个函数的意思)

q9t0?&i2Ns5[-N0

      lrd_open_context(&Ctx1, LRD_DBTYPE_ODBC, 0, 0, 0);

l\-cah:\;O0

      lrd_db_option(Ctx1, OT_ODBC_OV_ODBC3, 0, 0);

:o'~D6^X5o(qq6b0

      lrd_alloc_connection(&Con1, LRD_DBTYPE_ODBC, Ctx1, 0 /*Unused*/, 0);51Testing软件测试网D.m)b6t4?^oB

   ………………

p]\O/d_ g0

trans_time=lr_get_transaction_duration( "sqserver_login" ); //获得登录数据库的时间51Testing软件测试网)n%gE4Ae yZ'z#[`@

   lr_output_message("sqserver_login事务耗时%f", trans_time); //输出该时间51Testing软件测试网M X~5W"p f*F

   lr_end_transaction("sqserver_login", LR_AUTO); //结束登录事务51Testing软件测试网xj;S3Jh3mvh1p2@

lr_start_transaction("start_select");//开始查询事务51Testing软件测试网+I%[(C#qKFj4p

lrd_cancel(0, Csr2, 0 /*Unused*/, 0);51Testing软件测试网'J]o6j'YcR2Fb.L

lrd_stmt(Csr2, "select * from test_table;\r\n", -1, 1, 0 /*None*/, 0);//此句为执行的SQL51Testing软件测试网'm1pN B R0Mkd1~)sTN#F

lrd_bind_cols(Csr2, BCInfo_D42, 0);51Testing软件测试网a~ }u di1huu)o T

lrd_fetch(Csr2, -10, 1, 0, PrintRow24, 0);

!vl#DCZf)W&c&z$o0

……………..51Testing软件测试网_(_Tt$Hg-F{X;n

trans_time=lr_get_transaction_duration( "start_select" ); //获得该SQL的执行时间51Testing软件测试网+Eiv1EY;?'X%e~WY:p

lr_output_message("start_select事务耗时%f", trans_time); //输出该时间51Testing软件测试网4\~n*^Yc*lX)dx2Z

lr_end_transaction("start_select", LR_AUTO); //结束查询事务

{K.v {$E:klF0

优化后,在执行上述脚本后,就可以得到登录到数据库的时间及运行select * from test_table这条语句的时间了,当然我们也可以根据实际情况对该条语句进行参数化,可以测试多条语句的执行时间,也可以将该语句改为调用存储过程的语句来测试存储过程的运行时间。

[:e {7z-|0

接下来把该脚本在controller中运行,设置虚拟用户数,设置集合点,这些操作我就不说了,但是值得注意的是,没有Mercury授权的SQL SERVER用户license,在运行该脚本时回报错,提示“You do not have a license for this Vuser type.51Testing软件测试网KJk^{J

Please contact Mercury Interactive to renew your license.”我们公司穷啊买不起loadrunner,所以我也无法继续试验,希望有license朋友们监控一下运行结果!

Y!WM$I2M5b"^0

最起码在VUGen中运行该脚本我们可以得到任意一个SQL语句及存储过程的执行时间,如果我们测试的B/S结构的程序,我们也可以通过HTML协议录制的脚本在CONTROLLER中监控SQL SERVER服务器的性能情况,这样两方面结合起来就可以对数据库性能做一个完整的监控了。

+v+ie"a`d3U)jr0

本人对LOADRUNNER也是在摸索中,如果文章有写的不对,或理解错误的地方请指出,不甚感激51Testing软件测试网v2?$Hst/p:z cG

转载请注明出处:http://www.51testing.com/?4197251Testing软件测试网)k8u/MM:_T


TAG: loadrunner

yuanjuanfang的个人空间 引用 删除 yuanjuanfang   /   2009-12-19 17:40:27
我也遇到和lit0302  相同的情况,录制的脚本和楼主的不同。请问该怎么解决啊。是不是SQL版本不同的原因还是LR版本不同。
引用 删除 lit0302   /   2009-09-03 11:57:11
我邮箱lit0302@126.com.
还有个问题,配置好ODBC数据源后是不是可以直接录制了,loadrunner不用跟ODBC关联吗
引用 删除 lit0302   /   2009-09-03 11:55:20
你好,我有上面类似的问题,就是登陆查询分析器后,都不记录了。
只生成下列代码,执行sql语句的都没记录
vuser_init()
{
        lrd_init(&InitInfo, DBTypeVersion);
        lrd_open_context(&Ctx34, LRD_DBTYPE_ODBC, 0, 0, 0);
        lrd_db_option(Ctx34, OT_ODBC_OV_ODBC3, 0, 0);
        lrd_open_context(&Ctx35, LRD_DBTYPE_ODBC, 0, 0, 0);
        lrd_db_option(Ctx35, OT_ODBC_OV_ODBC3, 0, 0);
        lrd_close_context(&Ctx35, 0, 0);
        lrd_open_context(&Ctx36, LRD_DBTYPE_ODBC, 0, 0, 0);
        lrd_db_option(Ctx36, OT_ODBC_OV_ODBC3, 0, 0);
        lrd_close_context(&Ctx36, 0, 0);
        return 0;
}
如果知道,回我邮箱,谢谢
雪落无痕的个人空间 引用 删除 huimgh0315   /   2009-02-25 17:07:41
1
雪落无痕的个人空间 引用 删除 huimgh0315   /   2009-02-25 17:07:07
你好 请问这段脚本是自动生成的吗 还有省略号的内容是什么?我录制的时候没有这段代码,是不是我录制的步骤有问题,能不能给我发一段完整的脚本呀 谢谢了! huimgh3333@163.com
lr_start_transaction("start_select");//开始查询事务

w5JG6["vH(O208724
lrd_cancel(0, Csr2, 0 /*Unused*/, 0);51Testing软件测试网j.{UNfYE i4w

lrd_stmt(Csr2, "select * from test_table;\r\n", -1, 1, 0 /*None*/, 0);//此句为执行的SQL51Testing软件测试网8rWsU'y

lrd_bind_cols(Csr2, BCInfo_D42, 0);51Testing软件测试网p%m2L~#M/F NSB

lrd_fetch(Csr2, -10, 1, 0, PrintRow24, 0);51Testing软件测试网![{am]8n

……………..

H&c bn'uZ9H208724
x-man-bb的个人空间 引用 删除 x-man-bb   /   2008-10-03 01:04:48
huruihai兄,你好,我按你上面的方法去录制,但是录制时,弹出的查询分析器登录框输入密码点击后,没有反应,就是登录框一直在那,始终进入不了查询分析器,这个是怎么回事啊??用lr8.0 和 8.1去录都是这样
引用 删除 boymarco   /   2008-09-22 22:05:21
我也正在学习,谢谢分享!
snnylip的个人空间 引用 删除 snnylip   /   2008-09-22 16:44:22
真是好人
户瑞海的测试空间 引用 删除 huruihai   /   2008-09-22 16:07:05
我刚才又换了个license,重新试了一下,可以在controller中监控了,现在把license贴出来,大家可以试试AEAMAUIK-YAFEKEKJJKEEA-BCJGI
 

评分:0

我来说两句

日历

« 2024-04-01  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 203880
  • 日志数: 25
  • 图片数: 4
  • 建立时间: 2008-01-24
  • 更新时间: 2009-07-22

RSS订阅

Open Toolbar