51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 13368|回复: 33
打印 上一主题 下一主题

[原创] LoadRunner中实现一个系统下多用户多业务同时并发的场景设计

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-6-29 17:18:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不得不多说几句,
1、这个是土办法,但是可行的,下面有人说不可行,愿意的话就拿出证据来,咱们来辨一辨;
2、集合点是可以跨脚本的,后面已经这么确认过了。
另外可参考这个帖子http://bbs.51testing.com/viewthread.php?tid=81698


下面是本文原文:

LoadRunner中实现一个系统下多用户多业务同时并发的场景设计


场景要求如下:100个用户,其中10个用户执行A业务逻辑、20个用户执行B业务逻辑、30个用户执行C业务逻辑、40个用户执行D业务逻辑;要求这100个用户的操作是同时并发的。

由于多业务操作,那么首先会想到录制4个脚本+Group方式去执行这个场景,但是真的能做到吗?
每个单独的脚本中,都能控制同时执行A、或者B;但是怎么样控制ABCD同时执行呢?

所以我的办法是录制1个脚本,脚本中分别包含ABCD四个业务逻辑,分别用TrasactionA、TrasactionB、TrasactionC、TrasactionD表示。
首先确认以上操作是能够完成的,哪怕是录制4个脚本,然后手工将这四个脚本合并。

完成以上操作之后我们就有了这样的1个脚本,在这个脚本中是一个顺序执行的脚本,ABCD,如下:

Action

TransactionA;
TransactionB;
TransactionC;
TransactionD;


然后通过判断VUserID的方式来进行用户的分配,首先在ParameterList中新建一个VUserID类型的参数,定义为NewParam_VUserID;
那么在LoadRunner脚本中可以这样子引用到;

char ParamVUID_Nbr[24];
int ParamVUID_INT;
sprintf(ParamVUID_Nbr,"%s",lr_eval_string("{NewParam_VUserID}"));
lr_save_string(ParamVUID_Nbr,"ParamVUID_Nbr");
通过atoi函数进行字符串和数字之间的转换;
ParamVUID_INT = atoi( lr_eval_string("{ParamVUID_Nbr}"));

然后改写脚本为
Action
{
在这里加入集合点;
if (ParamVUID_INT<=10)
TransactionA;
if (((ParamVUID_INT>10)&&(ParamVUID_INT<=30))
TransactionB;
if (((ParamVUID_INT>30)&&(ParamVUID_INT<=60))
TransactionC;
if (ParamVUID_INT>60)
TransactionD;
}

OK,这下子应该可以顺利实现100个用户的按比例分发,并且让A、B、C、D并发执行了。

[ 本帖最后由 Athenst 于 2007-7-13 09:16 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-6-29 17:50:02 | 只看该作者
真的可以实现吗?学习了,试一下
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-6-29 22:11:36 | 只看该作者
我记得集合点好像可以跨脚本的吧。

[ 本帖最后由 ppent 于 2007-6-29 22:47 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2007-6-30 09:01:21 | 只看该作者
这样做的话,只能通过设置循环次数来增加负载。
不能通过增加 虚拟用户人数来增加负载。
因为你是通过判断人员数量 来选择执行脚本的。
不知道我说的是否正确。。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2007-6-30 09:53:41 | 只看该作者
原帖由 ppent 于 2007-6-29 22:11 发表
我记得集合点好像可以跨脚本的吧。


确认一下:集合点跨脚本,能做到么,能做到的话就不用我这么麻烦了。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2007-6-30 10:19:15 | 只看该作者
原帖由 bluemoon1999 于 2007-6-30 09:01 发表
这样做的话,只能通过设置循环次数来增加负载。
不能通过增加 虚拟用户人数来增加负载。
因为你是通过判断人员数量 来选择执行脚本的。
不知道我说的是否正确。。



嗯,脚本一旦写好并已经在运行后,通过后续增加用户来加压就只能加到其中的一个业务逻辑上了。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-7-4 16:45:07 | 只看该作者
你这样真的能够实现吗?
也可以这样去做:做4个action,然后各自添加到group去运行。
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2007-7-4 16:45:19 | 只看该作者
你这样真的能够实现吗?
也可以这样去做:做4个action,然后各自添加到group去运行。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2007-7-4 16:46:04 | 只看该作者
你这样真的能够实现吗?
也可以这样去做:做4个action,然后各自添加到group去运行。
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2007-7-4 17:05:47 | 只看该作者
原帖由 stevenhappy 于 2007-7-4 16:46 发表
你这样真的能够实现吗?
也可以这样去做:做4个action,然后各自添加到group去运行。


真的可以实现的,呵呵,就是办法比较土。
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2007-7-5 10:35:48 | 只看该作者
原帖由 ppent 于 2007-6-29 22:11 发表
我记得集合点好像可以跨脚本的吧。



^_^

真的可以,我刚才试了一下,sdlkfj5 ,抛出一块砖,引来一块玉啊。

sdlkfj1~~
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2007-7-8 16:05:26 | 只看该作者
原帖由 Athenst 于 2007-6-29 17:18 发表
Action
{
在这里加入集合点;       集合用户100
if (ParamVUID_INT<=10)
TransactionA;      1
if (((ParamVUID_INT>10)&&(ParamVUID_INT<=30))
TransactionB; 2
if (((ParamVUID_INT>30)&&(ParamVUID_INT<=60))
TransactionC;    3
if (ParamVUID_INT>60)
TransactionD;    4
}
...

1 2 3 4 这样可以实现并发操作吗?
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2007-7-12 14:33:50 | 只看该作者
obviously not
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2007-7-13 00:59:57 | 只看该作者
正好可以学习以下拉
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2007-7-13 09:41:36 | 只看该作者
原帖由 ppent 于 2007-6-29 22:11 发表
我记得集合点好像可以跨脚本的吧。



能够吗,没有看到相关的介绍啊。结合点不是在脚本里设的吗,怎么跨脚本啊。
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2007-7-13 10:20:44 | 只看该作者
学习到了,但是集合点真的可以跨脚本么
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2007-7-13 11:02:13 | 只看该作者
楼主你的脚本没有考虑清楚场景要求。
你说的场景在100人的情况下ABCD的执行比例。
但在你的脚本中体现一种思维定式。
应该考虑下,当有10个用户的时候,这10个用户可能是在做A这件事情,也有可能是B、C、D,或者混合。
应该讲,考虑的多点的话,混合的情况比较符合真实环境,就是取虚拟用户数为N,
N*10%------>A
N*20%------>B
N*30%------>C
N*40%------>D
需要从场景这样考虑脚本改写,就算用笨办法,也要用虚拟用户数的百分比的形式进行加压。
呵呵,还望指正。
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2007-7-13 11:06:46 | 只看该作者
从LR的执行机制上就不难理解只要在一个场景的GROUP中,集合点名称相同的那几个脚本就会在那个集合点满足那个集合点策略下进行集合或释放
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2007-7-13 11:09:13 | 只看该作者
Action
{
在这里加入集合点;
if (ParamVUID_INT<=10)
TransactionA;
if (((ParamVUID_INT>10)&&(ParamVUID_INT<=30))
TransactionB;
if (((ParamVUID_INT>30)&&(ParamVUID_INT<=60))
TransactionC;
if (ParamVUID_INT>60)
TransactionD;
}

这个IF语句是LZ故意写错还是怎么,这样显然在任何情况下就不可能满足ABCD都被执行。
只能执行ABCD中的一个。
回复 支持 反对

使用道具 举报

该用户从未签到

20#
发表于 2007-7-13 11:47:03 | 只看该作者
TransactionA;是否执行了50次??
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-6-1 18:35 , Processed in 0.090453 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表