51Testing软件测试论坛

标题: Robot压力测试实例 [打印本页]

作者: ilovejolly    时间: 2006-5-17 09:21
标题: 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 编辑 ]
作者: ilovejolly    时间: 2006-5-17 09:27
数据库并发测试

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

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进行并发测试。
作者: nekkst    时间: 2006-5-17 16:13
好贴。受益非浅!!我顶你一下下!!
作者: 海龙    时间: 2006-6-7 09:25
兄弟们,文章是我写的,这是51Testing第三期测试沙龙时写的,网站也有下载。

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

文章转了一圈回到了51Testing,结果连名字都没有了,呵呵
作者: ilovejolly    时间: 2006-6-7 11:41
晕,哈哈
作者: jinrk    时间: 2006-6-9 16:10
好好学习一下,顶*~%!$
作者: Lero    时间: 2006-6-22 16:15
嘿嘿!
作者: 小背    时间: 2006-6-27 13:11
好贴,找了很久,顶一顶!!
作者: yangfengwait    时间: 2006-6-28 16:51
重点没讲出来,没什么实际指导意义
作者: nekkst    时间: 2006-9-6 10:59
问题,我安装上面的操作,执行了一边,脚本在执行的时候提示:ser=sqlconnect("local","sa","","192.168.0.99","sqlserver");
执行失败
作者: sniperzhao    时间: 2006-9-12 16:37
我想问一下: 我现在要测得应用程序是   .net2.0 做得,而服务器得数据库是 MS-SQL,请问我在录制脚本之前应该选择什么协议呢? 是 socket 和 MS SQL 吗?
作者: cathyk    时间: 2006-11-1 15:23
thanks,开始学习,都不懂
作者: colume    时间: 2006-11-8 19:26
顶一下
作者: yaoayao111    时间: 2006-11-28 12:02
头破血流也要顶
作者: lana.li    时间: 2006-12-2 11:22
good one!
up!
作者: 恋恋冬季    时间: 2007-3-19 17:20
谢谢~~
作者: xuanyan    时间: 2007-3-30 17:42
good! tks!
作者: memo1124    时间: 2007-5-25 17:29
学习
作者: csdxxhy    时间: 2007-6-2 22:47
不知所云
作者: zj801025    时间: 2007-6-8 15:34
sdlkfj5
作者: chenlifen358    时间: 2007-7-6 10:00
标题: 回复 #2 ilovejolly 的帖子
确实好帖啊,一直使用robot做测试,都是自己个人在摸索着使用,现在有同伴了.
作者: leoomo    时间: 2007-7-9 17:59
顶起来啊!
作者: joanna0212    时间: 2007-7-25 22:14
楼主写的很好,支持,顶!!
作者: yyandrea    时间: 2007-8-1 21:09
具体的应该怎么下载呀?下不了呀
作者: ajie25    时间: 2007-8-2 10:26
值得学习
作者: yuandjing    时间: 2007-8-8 16:24
向海龙老师学习
作者: bzcy    时间: 2007-8-29 17:52
额,最近公司说是用例管理用TestManager,不知道上头怎么想的,TestLink用的好好的。。
不怎么了解这些,硬着头皮干活了
作者: kql    时间: 2007-8-31 23:06
我现正在做压力测试受益匪浅。我收了。顶!
作者: kql    时间: 2007-8-31 23:09
等我做完这个项目有时间也给这个大家庭做下贡献。将我在项目中的一点收益奉献出来与在家分享。
作者: kql    时间: 2007-8-31 23:13
51testing培训在深圳有没有培训班啊,我很想系统的培训一下,提升一下自己的能力。
作者: haiyanfei    时间: 2007-9-12 11:27
sdlkfj2 bucuo!
作者: 星空    时间: 2007-9-21 09:26
谢LZ,学习!
作者: jinhouzi    时间: 2007-9-21 15:23
晕说错话了  非常感谢楼主
作者: james.zhong    时间: 2007-10-29 12:19
正在学习ROBOT中。。。。。谢谢
作者: Lola1123    时间: 2007-11-28 14:58
标题: 收藏
以后研究
作者: tjsundway    时间: 2007-12-27 21:18
好贴,找了很久,顶一顶!!
作者: yjr2008    时间: 2008-1-9 18:20
感觉好难
作者: renheyou    时间: 2008-3-24 10:18
good
作者: renheyou    时间: 2008-4-22 16:11
good one!
up!
作者: goodgoodsutdy    时间: 2008-7-25 15:35
有点看不懂,还是顶一下
作者: dx0122    时间: 2008-7-28 21:08
都是些十分浅显的了,有深入的没有啊。这种已经很多了,深入点比较好,老在基础的东西上面,是找不到重点的,也分析不出来需要的信息的。
作者: wwyfriend    时间: 2008-10-31 15:25
海龙 该 打击下 盗版了。
作者: ying_fighting    时间: 2009-1-17 21:48
好好学习一下,顶*~%!$
作者: sincor    时间: 2009-2-6 13:12
看来 IBM的 东西是强大很多
作者: duanyi    时间: 2009-6-16 13:25
标题: 回复 2# 的帖子
测试示例程序的目的是,存储过程test每执行一次,表testtable中的counts字段增加一;
====================
我试了一下,并没有改变,不知道 ,哪里设置错了
作者: duanyi    时间: 2009-6-16 13:28
标题: 回复 2# 的帖子
ser=sqlconnect("server","sa","888","192.168.0.99","sqlserver")

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

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

sqlexec ["sql_1000"] "testdb..test"
=============================================
以上都改了
ser=sqlconnect("server","sa","888","127.0.0.1","sqlserver")
sqlexec ["sql_1000"] "master..test"
作者: neusoft_testing    时间: 2009-7-16 17:57
标题: 回复 1# 的帖子
讲一下Rational Quality Manager嘛
作者: mentgmery    时间: 2009-11-6 14:12
good man
作者: jiabailie2011    时间: 2011-3-30 16:43
学习
作者: yueshuzhen    时间: 2011-4-18 15:15
学习中……
作者: 小鱼儿乖乖    时间: 2011-4-18 15:40
数据库太差了,没看懂嘛意思,具体如何执行。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2