Robot压力测试实例
来源:百度文库 编辑:神马文学网 时间:2024/04/28 14:08:10
文章出处:转载 作者: 发布时间:2006-05-18
看到很多人在要这个,找到一篇,转过来给大家看看
文章的出处没有看到作者的名字,非常抱歉
脚本与被测程序有关,直接运行这个脚本是不能回放成功的(因为你没有脚本运行的环境)
文章如下
第一步:设置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
{
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小时,运行完成服务程序需要无资源泄漏、无报错、无异常退出以及其他不正常情况。
数据库并发测试
数据库并发测试的必要性:
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 setcounts=@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
{
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进行并发测试。
看到很多人在要这个,找到一篇,转过来给大家看看
文章的出处没有看到作者的名字,非常抱歉
脚本与被测程序有关,直接运行这个脚本是不能回放成功的(因为你没有脚本运行的环境)
文章如下
第一步:设置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
{
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小时,运行完成服务程序需要无资源泄漏、无报错、无异常退出以及其他不正常情况。
数据库并发测试
数据库并发测试的必要性:
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 setcounts=@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
{
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进行并发测试。
Robot压力测试实例
Robot测试实例(转贴
使用 Rational Robot 实现自动化测试
使用 Rational Robot 实现自动化测试
使用 Rational Robot 实现自动化测试
自动ftp实例测试
测试用例实例
职业压力测试
性格和压力测试
性格和压力测试
外行人谈压力测试
性格和压力测试
性能测试,压力测试,容量测试,负载测试
SQL SERVER 2000压力测试
银行业压力测试深藏玄机
MySQL压力测试工具mysqlslap
性能负载压力测试比较
使用 JMeter 完成常用的压力测试
MemCached 压力测试-eddie -JavaEye技术社区
使用 JMeter 完成常用的压力测试
使用 JMeter 完成常用的压力测试
测试 你最近承受多大压力
memcachedb压力测试及使用建议
十个免费的Web压力测试工具