技术开发 频道

Robot进行数据库的并发测试

   

    【IT168 技术文章】

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

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

    drop procedure [dbo].[Test]

    GO

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

    drop table [dbo].[testtable]

    GO

    CREATE TABLE [dbo].[testtable] (

    [testid] [int] NULL ,

    [counts] [int] NULL

    ) ON [PRIMARY]

    GO

    insert into testtable (testid,counts) values (1,0)

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    SET ANSI_NULLS ON

    GO

    CREATE Procedure dbo.Test

    as

    declare @count int

    begin tran TEST

    select @count=counts  from testtable where testid=1

    update testtable set counts=@count+1

    if (@@error >0) begin

    rollback tran TEST

    end else begin

    commit tran TEST

    end

    GO

    SET QUOTED_IDENTIFIER OFF

    GO

    SET ANSI_NULLS ON

    GO

    第二步:创建测试脚本:在Robot中新建VU脚本,输入以下内容:

    #include <VU.h>

    {

    push Timeout_scale = 200; /* Set timeouts to 200% of maximum response time */

    push Think_def = "LR";

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

    push Timeout_val = Min_tmout;

    ser=sqlconnect("server","sa","888","192.168.0.99","sqlserver");

    set Server_connection = ser;

    push Think_avg = 0;

    sync_point "logon";

    sqlexec ["sql_1000"] "testdb..test";

    sqldisconnect (ser);

    }

    说明:

    ser=sqlconnect("server","sa","888","192.168.0.99","sqlserver")

    sa为数据库用户名,888为sa密码,192.168.0.99数据库IP地址

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

    sqlexec ["sql_1000"] "testdb..test"

    testdb为新建存储过程test所在的数据库,按实际的数据库修改

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

    测试说明

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

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

    (3)、将存储过程中的select @count=counts  from testtable where testid=1修改为select @count=counts  from test
 

0
相关文章