LoadRunner测试SQL语句性能

上一篇 / 下一篇  2011-12-12 14:47:43 / 个人分类:LoadRunner

本次通过loadRunner录制SQLServer介绍一下如何测试一个sql语句或存储过程的执行性能51Testing软件测试网a'}yn ha:c

主要分如下几个步骤完成:

0QW2^o8A7m_0

第一步、测试准备

~3{0l b [0

第二步、配置ODBC数据源

Nn"K1j[DY _0

第三步、录制SQL语句在Sql Server查询分析器中的运行过程

M0?'?CDF G3xx |0

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

UY*r(P F)O/~!d0

第五步、改变查询数量级查看SQL语句的性能

n.{*H3Z#UZ0

第六步、在controller中运行脚本

)jce]T2n7L0

下面开始具体的介绍:51Testing软件测试网.Z'R1~r Z'h$gv_/Z

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

'}P*b ||7DB~0r5\u0

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

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

Xw:N sm;^_o0

--创建测试数据库51Testing软件测试网]!Sty+B1s$|a
create database loadrunner_test;51Testing软件测试网$rR)ONUW Q
use loadrunner_test51Testing软件测试网TZ3x(P T#O:Nw2M
--创建测试数据表51Testing软件测试网{ a_.f4g
create table test_table51Testing软件测试网;E6{ Jo&YXj
(username varchar(50),sex int,age int,address varchar(100),post int)
P AQrWNd4h:H0--通过一段程序插入不同数量级的记录,具体的语法在这里就不多说了
u#z"\K0mXJ5}R&V0declare   @i   int
V^D2Se0  set   @i=051Testing软件测试网r5qG!i.M]7^
  while   @i<1000    //循环1000次,可以根据测试数据情况改变插入条数51Testing软件测试网)?2t(^ S'b}3iF4P
  begin51Testing软件测试网|7`@ItO
      BEGIN TRAN T1
YOTP)j7oV.Q d:~0      insert into test_table (username,sex,age,address,post) values ('户瑞海'+cast(@i as varchar),@i-1,@i+1,'北京市和平里'+cast(@i as varchar)+'号',123456);
LB-@s O1hx7u7L0      IF @@ERROR <> 051Testing软件测试网^R3qAys P-FT
         begin51Testing软件测试网tgnx,~VD
           rollback;51Testing软件测试网(g ~w,tu;\
           select @@error51Testing软件测试网7^uIK[9a;n
         end51Testing软件测试网9s} J^c u7I
      else51Testing软件测试网,b:z1~bug r
         begin51Testing软件测试网.~}0\A zi
           commit;
a&?~R2f0           set   @i   =   @i+151Testing软件测试网9Z0j;f1m+mrsP
         end  
.O8D)Ulf9F k'J Kj0  end
+Vp*l4nY3LW0好了,执行完上述
语句后,建立的数据表中已经有1000条记录了,下面进行第二步的操作,配置ODBC数据源,为了能让loadrunner能够通过ODBC协议连接到我们建立的SQL SERVER数据路,我们需要在本机上建立ODBC数据源,建立方法如下:51Testing软件测试网b/~ j@ t&@

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

+i7Gh|A.N%Jb0

配置好ODBC数据源后就要录制SQL语句在查询分析器中的执行过程了:51Testing软件测试网4G6bFe"E L:A%F

1、  打开loadrunner,选择ODBC协议51Testing软件测试网9k:}/}2[I&[W$Sw I/B

2、  在start recording中的application type 选择win32 application;program to record中录入SQL SERVER查询分析器的路径“..\安装目录\isqlw.exe”

6W] @ V-b([pTY;}0

3、  开始录制,首先通过查询分析器登录SQL SERVER,在打开的查询分析器窗口中输入要测试的SQL语句,如“select * from test_table;”51Testing软件测试网w0V} J K!Fd

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

rM ~)ee;\,Tg0

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

接下来,我们来优化脚本,我们分别为数据库登录部分和执行SQL语句的部分加一个事物,在增加一个double的变量获取事务执行时间,简单内容如下:51Testing软件测试网0c/H{`J0}h8Q Q
Action()51Testing软件测试网q&qw{LSW}
{  double trans_time;  //定义一个double型变量用来保存事务执行时间51Testing软件测试网3f,p@b$tU
   lr_start_transaction("sqserver_login");  //设置登录事务的开始51Testing软件测试网v(fN E$Nb r,o0mf
lrd_init(&InitInfo, DBTypeVersion);   //初始化链接(下面的都是loadrunner生成的脚本了,大家可以通过帮助查到每个函数的意思)
4F&R X$O3Sl0       lrd_open_context(&Ctx1, LRD_DBTYPE_ODBC, 0, 0, 0);51Testing软件测试网U,t9t"b\3zkW5O
       lrd_db_option(Ctx1, OT_ODBC_OV_ODBC3, 0, 0);
/OP3Xd!\9j5ep0       lrd_alloc_connection(&Con1, LRD_DBTYPE_ODBC, Ctx1, 0 /*Unused*/, 0);51Testing软件测试网1}D6e~K1u3J7~Lrf f
    ………………51Testing软件测试网2F(z&}q9x,`vA
trans_time=lr_get_transaction_duration( "sqserver_login" ); //获得登录数据库的时间
gb:KKS^-wf:y0    lr_output_message("sqserver_login事务耗时 %f 秒", trans_time); //输出该时间
t&F R6k }V#J5L0    lr_end_transaction("sqserver_login", LR_AUTO);  //结束登录事务51Testing软件测试网6d"Wf:]0RV M?
lr_start_transaction("start_select");//开始查询事务51Testing软件测试网nO LQ&@y C I k&Qnm
lrd_cancel(0, Csr2, 0 /*Unused*/, 0);51Testing软件测试网iU+RFA h m-J&i
lrd_stmt(Csr2, "select * from test_table;\r\n", -1, 1, 0 /*None*/, 0);//此句为执行的SQL51Testing软件测试网lvF(pM8w6m
lrd_bind_cols(Csr2, BCInfo_D42, 0);51Testing软件测试网"u;c1iv%yQ
lrd_fetch(Csr2, -10, 1, 0, PrintRow24, 0);51Testing软件测试网KqRl c!V
……………..51Testing软件测试网K:\9Q&Sx^'P
trans_time=lr_get_transaction_duration( "start_select" ); //获得该SQL的执行时间
GdyS~C0lr_output_message("start_select事务耗时 %f 秒", trans_time); //输出该时间51Testing软件测试网 D7Bb0UH$Z
lr_end_transaction("start_select", LR_AUTO); //结束查询事务51Testing软件测试网~'D ]-V&V/{ Z%A8N
优化后,在执行上述脚本后,就可以得到登录到数据库的时间及运行select * from test_table这条语句的时间了,当然我们也可以根据实际情况对该条语句进行参数化,可以测试多条语句的执行时间,也可以将该语句改为调用存储过程的语句来测试存储过程的运行时间。
51Testing软件测试网~~;{ \%WxR

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

^2E?w1_+B0

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

(nH%wo0H:K;N4v&O0

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

l*~/YB B JZs0

TAG:

 

评分:0

我来说两句

Open Toolbar