google搜索 51Testing站内搜索                    软件测试门户 | 软件测试培 训 | 文章资料精选 | 软件测试论坛 | 软件测试博客 | 测试招聘求职 
打印

[转贴] Robot压力测试实例

Robot压力测试实例


看到很多人在要这个,找到一篇,转过来给大家看看

第一贴内容是关于CS结构的基于socked协议的脚本录制,修改,设置,回放的

第二贴内容是关于自写SQL SERVER数据库压力脚本的

文章的出处没有看到作者的名字,非常抱歉

脚本与被测程序有关,直接运行这个脚本是不能回放成功的(因为你没有脚本运行的环境)

文章如下



第一步:设置Robot

Robot――Tools――Session Record options,Method选择API Recorder,Generater Filtering中Filtering选择Auto filtering,Select protocols只选择Socket;

第二步:录制VU脚本

    在启动的Start Application窗口中,Executable输入被测程序的客户端程序的路径和文件名,Working Directory中输入被测程序的工作路径,Program Arguments如果没有就空着。被测程序程序启动后,执行需要的操作然后关闭程序,停止录制脚本,Robot会自动生成脚本。

脚本示例:

#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;



SERVER = sock_connect("123001", "SERVER:2000");



{ INFO SERVER "SERVER"="192.168.1.12"; } /*1*/



set Server_connection = SERVER;



push Think_avg = 0;



sock_send

    "`45645651300000000001cc00f701000002000000c3330100000000000000000001000000"    "00000000000sdgsdfgfhjghjjdfhjhkjgfhjgfjjk000000000000hh0000000000000000000000"    "000000000000000000000000000000000000000000000100`g2222`0012313546545465431"    "`45641313000000000000000000000000000000000000`";



sock_nrecv ["123002"] 200;



sock_send    "`1321321656548745215599154654456546122132112313210000000000000001000000"    "00000000021321215665654548879654654655562000000000000000000000000000000"    "00000000000000000000000000000000000000000000012131132321213212111323213"    "`123110000000`Z2";



sock_recv ["123003"] "$"; /* 50 bytes */



sock_disconnect(SERVER);



pop [Think_def, Think_avg, Timeout_val, Timeout_scale];



}



这个脚本如果不能正确回放,可以将将sock_recv ["123003"] "$"; /* 50 bytes */改为

sock_nrecv ["123003"] 50; /* 50 bytes */



第三步:设置Suite,回放脚本

回放录制的脚本,Testmanager会自动创建Suite,如下所示:




默认脚本运行一次,为了长时间运行,修改增加脚本的运行次数(最大32767),在Run properties中Iterations中设置。然后运行Suite,在Run Suite窗口中的“Number of users”上输入虚拟用户数,如200。

    第四步:观察被测服务程序的运行情况,查看有无异常。压力测试需要连续、高负载运行不少于72小时,运行完成服务程序需要无资源泄漏、无报错、无异常退出以及其他不正常情况。

[ 本帖最后由 ilovejolly 于 2006-5-17 09:29 编辑 ]
附件: 您所在的用户组无法下载或查看附件

TOP

数据库并发测试

数据库并发测试的必要性:

1、  与数据库连接的服务程序采用多线程同时开启多个数据库连接;

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

以上两种情况均会产生对数据库的并发访问操作。数据库并发访问会导致数据库数据错误、数据库死锁等故障,需要在测试阶段进行充分测试。



数据库并发测试测试方法:

1、  利用测试工具模拟多个最终用户进行并发测试;

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

2、  利用测试工具编写脚本,直接连接数据库进行并发测试;

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



          下面通过一个演示程序,演示使用Robot使用第二种测试方法进行数据库的并发测试:

第一步:创建演示程序:打开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 testtable with (UPDLOCK) where testid=1。再次进行并发测试,每次的结果应该都是20。



    以上演示程序,仅仅演示了测试的方法。在实际的数据库并发测试中,首先要确定存在哪些并发情况、哪些数据受到并发影响,然后编写脚本,设置suite进行并发测试。

TOP

好贴。受益非浅!!我顶你一下下!!

TOP

兄弟们,文章是我写的,这是51Testing第三期测试沙龙时写的,网站也有下载。

http://www.51testing.com/html/60/189.html

文章转了一圈回到了51Testing,结果连名字都没有了,呵呵

TOP

晕,哈哈
silence_joy@hotmail.com
http://ilovejolly.cnblogs.com
欢迎讨论技术问题

TOP

好好学习一下,顶*~%!$

TOP

嘿嘿!
闭关修炼ing...!
我就是我,你再也找不到这样一个我!

TOP

好贴,找了很久,顶一顶!!

TOP

重点没讲出来,没什么实际指导意义
笑容太甜,淚水太咸!

TOP

问题,我安装上面的操作,执行了一边,脚本在执行的时候提示:ser=sqlconnect("local","sa","","192.168.0.99","sqlserver");
执行失败

TOP

我想问一下: 我现在要测得应用程序是   .net2.0 做得,而服务器得数据库是 MS-SQL,请问我在录制脚本之前应该选择什么协议呢? 是 socket 和 MS SQL 吗?

TOP

thanks,开始学习,都不懂

TOP

顶一下

TOP

头破血流也要顶

TOP

good one!
up!
As long as the world shall last there will be wrongs, and if no man rebelled, those wrongs would last forever .

TOP

谢谢~~

TOP

good! tks!
Welcome to my blog at:http://blog.51testing.com/?66584

TOP

学习

TOP

不知所云

TOP

sdlkfj5

TOP

 
当前时区 GMT+8, 现在时间是 2008-7-24 19:30Copyright(C)上海博为峰软件技术有限公司 2001-2007 电话:021-64471599-8017
当您在访问网站、论坛及博客过程中遇到问题时可发送email:webmaster@51testing.com或发送论坛短信至管理员风在吹