不要追求绝对的公平,红尘之中没有公平而言,人活一世,难得糊涂。                                           it is no use doing what you like, you have got to like what you do.

Robot进行数据库的并发测试

上一篇 / 下一篇  2006-12-12 09:12:42 / 个人分类:Robot技术

数据库并发测试

:s L$Y`2kK CKx051Testing软件测试网"R9h l O"[.~.M2B

数据库并发测试的必要性:51Testing软件测试网C8bp6k_*jp

(Z8y sCr.xB01、  与数据库连接的服务程序采用多线程同时开启多个数据库连接;51Testing软件测试网 mU\y K j1nz

51Testing软件测试网X5\-C4r8U$i

2、  与数据库连接的服务程序单线程,但是同时开启多套服务程序;

4Iy2is e*o0

I'|_:B+V9Tli%m0    以上两种情况均会产生对数据库的并发访问操作。数据库并发访问会导致数据库数据错误、数据库死锁等故障,需要在测试阶段进行充分测试。51Testing软件测试网 x f,aet"Wn?

51Testing软件测试网Al9g P8P

 51Testing软件测试网$K(roE0?GT3`4b7^

51Testing软件测试网qd6|X&p/O?,q"t

数据库并发测试测试方法:51Testing软件测试网@J/\bE6z? G;L{.J

X} {P+\T01、  利用测试工具模拟多个最终用户进行并发测试;51Testing软件测试网 `V#M J0izj

DUS8@-WkI0    这种测试方法的缺点:最终用户往往并不是直接连接到数据库上,而是要经过一个和多个中间服务程序,所以并不能保证访问数据库时还是并发。其次,这种测试方法需要等到客户端程序、服务端程序全部完成才能进行;51Testing软件测试网2zq@ m$xv

[8@c u(Nme02、  利用测试工具编写脚本,直接连接数据库进行并发测试;51Testing软件测试网N;Y `K9rS(QZ C%L-T

51Testing软件测试网 ag|4I{$p&f.~

    这种方法可以有效的保证并发操作,而且在数据库访问程序完成即可测试,可以大大缩短测试时间,而且测试效果更好。

HUONdQ{@0

'r$n W~#j d0 

h7|}(Hu&vz&J051Testing软件测试网%pJm2P&e2R8S!u

第一步:创建演示程序:打开SQL SERVER查询分析器,在SQL SERVER测试数据库中执行下列脚本(脚本执行操作:创建表testtable,并插入一条记录;创建存储过程test):

u(kKF p051Testing软件测试网2J8_6|Xxzt

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Test]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

"@CV,N{ Z0

?7](I+{BG]0B^0drop procedure [dbo].[Test]51Testing软件测试网x0{S.[ p"V.l X K

51Testing软件测试网$YA\kV._S

GO

m;G w eN&h051Testing软件测试网5N.qG,O#O

 51Testing软件测试网7\n,N$V%_Ohm

51Testing软件测试网)N~$INbe'`

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[testtable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)51Testing软件测试网.B8xt`%F-l+U

Bc/qy2K+j0drop table [dbo].[testtable]

~1{o,J+gG8b ]0

0z k+ZS*|v0GO

MX2O pem051Testing软件测试网E:tk&jRsAlA

 

#VtY'Gt3v4Pg0

Y/e,Vn w4J0CREATE TABLE [dbo].[testtable] (51Testing软件测试网z\)Y`6\O

51Testing软件测试网qZJ4A D0},z

       [testid] [int] NULL ,51Testing软件测试网;e\ p J'z3|R @l

*o`SX)vw$l0       [counts] [int] NULL51Testing软件测试网9I&r!I,Hr:k+C&L]

CJ0Yj$v0) ON [PRIMARY]51Testing软件测试网1Md:M c1xEk/s'\:z5U

51Testing软件测试网%j)F&A9K3h

GO

Ss7f&Ot&d)@#zuO)[4cu051Testing软件测试网4C2|'f3Q,a;A^ L8y7n

 

9Rdype/}Q.k~Nq}051Testing软件测试网 Q9GkNumr4A m ^

insert into testtable (testid,counts) values (1,0)51Testing软件测试网Zz2RQ;v J9y

51Testing软件测试网SJ\4U%qu{#s

GO

-|$[v1aYhFl;t051Testing软件测试网2b]a{v Pj![

 51Testing软件测试网9F$T5@.n:kH|

#b FaX0^0_ _*_4^o0SET QUOTED_IDENTIFIER ON

;aB3i5[8be_ s q7h0

;CfT%d*cG-{w0GO51Testing软件测试网6S \Xw/D

51Testing软件测试网"C7|5QIuq!K$~U!S:n

SET ANSI_NULLS ON

I%C*gAY$q0

R6tn6RE4c|%am9L0GO51Testing软件测试网^~` h|v5JI_+a

3`z5PFHd0 51Testing软件测试网3{&F;D3b_ ^!h

51Testing软件测试网;r W;awM$kRB%N

CREATE Procedure dbo.Test

XZ7Rr+AJ@0

~/kF cA#Mm0as

:W)A6e$D(RWz0

HE PAOCzl0  declare @count int

&w#H sF Q H)I#@"V c0

*y7k%H1IG3lkG0  begin tran TEST   51Testing软件测试网["v*O E{.x

51Testing软件测试网tD+[ O!U e+H A

    select @count=counts  from testtable where testid=1   

E$gR ` vZ)]0

$c M M*{Rw/RNVu&M,w5c$W0    update testtable setcounts=@count+1

fQs?xr,m9f+}6Rt051Testing软件测试网c:f1P/k^ K.x/N?0A

   

C@ }1G"\'ia051Testing软件测试网q3FU4Z!X E r(A

  if (@@error >0) begin

|6IAB7ki g051Testing软件测试网6X@T6?&V%v:vW

       rollback tran TEST

_+h8l;W#D"?E0eP0

4[:^X$RY@2I M0  end else begin

)rrf%Zr,M051Testing软件测试网 QQW3o*U

       commit tran TEST51Testing软件测试网;^D^/_8p(|-`

4Jbk~:|:u Ys|#I0  end

2Mz&`5J1p051Testing软件测试网k9w:z']/z\H s4^&\r

GO51Testing软件测试网G@~P,ZK

51Testing软件测试网+D ]mW9Z)d:r

SET QUOTED_IDENTIFIER OFF

+P,pf"d1B%vcL051Testing软件测试网,S:?Ww"S P

GO51Testing软件测试网$e a'P0S^6O:VJ

o5@Qgl0SET ANSI_NULLS ON51Testing软件测试网yW:Q|BRJ5D z!hy3O

51Testing软件测试网"w5`fP(]:hlh

GO

k4dNI8Y+B~&l-O(g%q,^051Testing软件测试网B9`.o_#R5Z?

 51Testing软件测试网Uu5R2?~-p

3C]x.cFw*j0第二步:创建测试脚本:在Robot中新建VU脚本,输入以下内容:51Testing软件测试网:C)l ^/Q hY,K/Ve

1Tt }AL$zC:}8x4@0#include <VU.h>51Testing软件测试网 b$TtMtR-K7hr7|

G,n8z}].E)Tk ExG0{

$S)SBr$L(iA?7g2O051Testing软件测试网)h^FX#wql

push Timeout_scale = 200; /* Set timeouts to 200% of maximum response time */51Testing软件测试网k H%oDSP |h

$wRDl~.u`tt0push Think_def = "LR";51Testing软件测试网Vy{ It0f7A

51Testing软件测试网s!O} C1U7B

Min_tmout = 120000;       /* Set minimum Timeout_val to 2 minutes          */

:? NZ2An[V8C0

(} {WE+x-j o4i0push Timeout_val = Min_tmout;51Testing软件测试网^lEw%o)V rt

51Testing软件测试网|3Qnbt1r rR"Z

 

%o_~8Ka4]0

#BZ(D;?E?D(s o0ser=sqlconnect("server","sa","888","192.168.0.99","sqlserver");51Testing软件测试网N(q'@Le)U'f

51Testing软件测试网-R'p7O~R ^6T!v z9a

set Server_connection = ser;51Testing软件测试网e2RK8JnH2UGLA

51Testing软件测试网Cf4d"h X-z0N

push Think_avg = 0;

1t#_0lc:Eq~}R051Testing软件测试网2quy @/Sv C H

sync_point "logon";51Testing软件测试网"VgU&h1A!fo

zS ?N2or1z0sqlexec ["sql_1000"] "testdb..test";

kGd'PP5v#?0H.N051Testing软件测试网 @xy V-IEF$G

sqldisconnect (ser);

_C.|?p051Testing软件测试网^)l1e.m6\ n2wf2F

}

GAQPkmUU0

,b)K5[ s6Q ds J.M3n0说明:51Testing软件测试网tt DD&GP `+se

51Testing软件测试网O!BB6U.Q C3TYA

ser=sqlconnect("server","sa","888","192.168.0.99","sqlserver")51Testing软件测试网 dd9f/d6Pf

w3S}$dX$rv)Sj0  sa为数据库用户名,888为sa密码,192.168.0.99数据库IP地址

G}g5^+o"zek051Testing软件测试网5{ffQq \ s\([ \)j

  以上三项按实际的测试数据库设置更改,其他两项不用修改

!@$d3PJG3D&jt0X0

?d7biX}0sqlexec ["sql_1000"] "testdb..test"

*VcL8Ej)E0

/IJ N"mP#`*[V'W%P0  testdb为新建存储过程test所在的数据库,按实际的数据库修改

cUI2k V&C Z0

8N9j,I&b$q@.b0 

U5K,x/M+s k$x051Testing软件测试网4_7|F_J

第三步:执行测试:运行上一步创建的脚本(运行时自动创建Suite),在Run Suite窗口中的“Number of users”上输入20。运行完脚本,打开数据库查看counts的数值。把counts值改为零多次运行脚本,观察每次运行后counts的结果。

f_r$W$X/O9U@|A0

5x+j[D`0测试说明51Testing软件测试网 sl0a!C(]q6[

51Testing软件测试网"tE-Fa7EsB0F?4i$z%D

(1)、测试示例程序的目的是,存储过程test每执行一次,表testtable中的counts字段增加一;

1S.},k%o| Jk051Testing软件测试网S/~v]-Nq

(2)、第三步的测试可以发现每次执行后counts结果并不相同,而且不等于20,这说明这个程序是在并发时是问题的。

f9\ H Af0I6@Q&E0(3)、将存储过程中的select @count=counts  from testtable where testid=1修改为select @count=counts  from test

TAG: Robot 软件测试技术 Robot技术

 

评分:0

我来说两句

Open Toolbar