51Testing软件测试论坛

标题: 问个关于多事务并发的问题!Athenst在不? [打印本页]

作者: haiyugg    时间: 2007-7-4 14:14
标题: 问个关于多事务并发的问题!Athenst在不?
Athenst在不?问个关于多场景并发的问题!
     看了你在http://bbs.51testing.com/thread-81297-1-1.html发的《LoadRunner中实现一个系统下多用户多业务同时并发的场景设计》,有些问题还是不清楚,我现在就需要做一个这样的场景操作。
     公司要做一个B/S的程序的性能测试,里面主要有登录,数据填报,数据审核,数据上报等功能,现在要测试这样一种情况,假设80个用户,其中20个用户做登录操作,20个用户做数据填报操作,20个做审核操作,20个做数据上报操作。
     现在要求以上的几种操作并发进行,也就是说这80个用户同时作自己的操作,这和你在上文中的例子基本相同,现在我想问一问以下几个问题:
    1:你在文中说把这几个事务用TrasactionA等表示,在实际情况中如何处理?是在每个事务的前边加代码还是直接用lr_start_transaction,lr_end_transaction(),如果不需要特殊标识的话,如何在以后判断的时候判断出几个事务的位置?另外这几个事务的位置如何确定,你在文中说设置好集合点,然后在集合点以后判断哪个用户去进行哪个操作,那这几个事务的位置是不是要都放在同一个集合点那,如果那样的话脚本录制的过程该如何处理(就像是说我有登录操作,有上报操作,这里登录操作一定是在脚本的最前边,后边经过一系列操作以后才能到达上报操作的位置,这种情况如何设置集合点?是要把几个事务强行的写在一起吗?还是有办法可以将几个地方分别设置集合点,然后让几个集合点的用户都到了以后才同时运行?)
    2:
然后通过判断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,&quotaramVUID_Nbr");
通过atoi函数进行字符串和数字之间的转换;
ParamVUID_INT = atoi( lr_eval_string("{ParamVUID_Nbr}"));

你在原文中说的这个我没看懂(刚接触lr,对脚本修改还不了解),这里的意思是在ParameterList中建立完参数以后,直接就可以在LR脚本中写下边的那些代码了吗?原封不动拷贝过来就可以吗?放到脚本的什么地方?
3:最后你在文中说的
然后改写脚本为
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;
}

这里面TransactionA等几块是实际的事务还是事务的代码或者标签之类的,在程序设计语言里面都有个标签,可以用goto语句直接转向的那种,你这里的TransactionA等是这个意思还是真的就是把实际事务放到这里面了?如果实际事务放过来的话,那事务之前的操作如何处理,例如我想上报数据,首先需要领导签字才能点上报,但是领导签字这个动作不需要并发操作,但是他是必须得操作,如果这样的话,该如何处理,按照上边的内容的话,就没有地方写这些前提内容了?这如何处理?
4:最后,不知道有没有响应的完整脚本例子?要是有希望能给发一份!
我的邮箱:haiyu@263.net,haiyugg@sohu.com均可
msn:liutong516@hotmail.com

其他各位老大如果有什么看法欢迎大家指点,小弟现在着急用,明天下午就要录制,后天就实际测试了,现在刚学lr不久,还什么都不会呢。急需解决阿。多谢各位了,sdlkfj3
作者: haiyugg    时间: 2007-7-4 14:54
怎么没人来看看啊,高手们快来啊!
作者: haiyugg    时间: 2007-7-4 15:46
又沉了,再顶一下,谁给说说啊!
作者: Athenst    时间: 2007-7-4 16:10
我收到你的短消息了,刚在线~~可以加我MSN,如下签名。
作者: Athenst    时间: 2007-7-4 16:22
申明一点哦:那天PPENT大侠说,集合点可以跨脚本,假如能这样做到的话,就不用象我这么麻烦了~

sdlkfj2

然后我回答一下你的问题:
1、
那些事务象平时一样去录制好了,前面有个lr_start_transaction后面有个lr_end_transaction;
如何判断事务的位置?这个根据你的业务而定啊。在脚本里面就体现为lr_start_transaction和lr_end_transaction之间的代码。假如两个事务之间有过渡代码的话,就删除吧。
2、
代码应该可以用的,你可以试试。
3、
这里面的TransactionA等几块是实际的事务。

4、我也是新手上路啊,这是我的土办法~~呵呵。
作者: haiyugg    时间: 2007-7-5 09:11
两个事务之间的过渡代码是从页面进入以后直到进行业务操作的代码!这种情况下可以删除吗?
如果删除了那不就是只有几个事务的代码了嘛!关键是我的几个事务之间相差很远,不是一个接着一个做的,例如登录系统是一个事务,然后再里面要进行一系列填报操作,然后把填报数据提交上,这个提交又是另外一个事务,最后都提交完了,要对刚提交的事务进行报表查看,这又是一个事务,如果把过渡代码去掉的话,那中间的那些操作不就都没有了嘛!这样改如何处理?

有没有办法向编程语言里面的标签那样?在每个事务的开始的地方加个标签,然后再if那里直接用goto之类的语句转到标签那?
或者是设置几个集合点,让这几个集合点都满足条件以后才同时释放。现在的集合点是每一个集合点自己的用户数够了就释放自己的用户,如何能做到几个集合点的用户都满足条件了再同时释放呢!
还有那个集合点跨脚本是什么意思?是说录制了几个脚本,然后在这几个脚本中都设置一个集合点,然后这几个集合点能同时动作吗?

还有,那段转换的代码要添加在什么地方?脚本的任意地方都可以吗?只要在那段if语句之前就行?
作者: suoyi    时间: 2007-7-5 10:01
关注这个问题,我只能说说楼上的最后一个问题。

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

char ParamVUID_Nbr[24];
int ParamVUID_INT;             //声明变量这两句必须放在Action{}中的开头,必须!

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}"));  //以上3句放在if之前。
作者: Athenst    时间: 2007-7-5 10:32
刚才我试了一下,发现集合点是可以跨脚本的。

在Cotroller中帮助文件中检索rendezvous,自己去看吧。

另外贴个图,你可以参考。
作者: haiyugg    时间: 2007-7-5 10:47
那这几个脚本里面的集合点是不是设置成同样名称就可以了那?试验一下去。在参考文档中没有找到多个脚本同时插入相同集合点的例子,还是自己动手试验吧。有结果了我会马上回来说一下的!

另外,不知道Athenst对关联方面有没有研究,我这还有个问题,发到http://bbs.51testing.com/thread-81805-1-1.html中了,帮忙看看啊。谢了!
作者: spartan    时间: 2007-7-5 11:45
1:你在文中说把这几个事务用TrasactionA等表示,在实际情况中如何处理?是在每个事务的前边加代码还是直接用lr_start_transaction,lr_end_transaction(),如果不需要特殊标识的话,如何在以后判断的时候判断出几个事务的位置?
答:关于transaction的问题,如果你不用lr_start/end_transaction()定义的话,LoadRunner将会默认一个Action为一个transaction。可以在Run-time SettingGenearlMiscellaneousautomation transaction下进行设置是否将每一个action作为一个transaction.
不作特殊标记,也不用lr_start/end_transaction()定义transaction, 每一个action就是一个transaction。


另外这几个事务的位置如何确定,你在文中说设置好集合点,然后在集合点以后判断哪个用户去进行哪个操作,那这几个事务的位置是不是要都放在同一个集合点那,如果那样的话脚本录制的过程该如何处理(就像是说我有登录操作,有上报操作,这里登录操作一定是在脚本的最前边,后边经过一系列操作以后才能到达上报操作的位置,这种情况如何设置集合点?是要把几个事务强行的写在一起吗?还是有办法可以将几个地方分别设置集合点,然后让几个集合点的用户都到了以后才同时运行?)
答:集合点设置的位置是某行代码的前面,不一定是某个transaction的前面。集合点可以分别设置在你需要LR并发操作的代码前面。设置的方法就是在这行代码前加上 lr_rendezvous("test")。关于集合点用户到了之后如何运行,请参考我以前回复的帖子:
。但有一点很肯定,LR不能等所有的几个集合点的用户到到达后才同时运行。每个集合点都是独立的,按照自己设置的规律进行释放运行。


2. 你在原文中说的这个我没看懂(刚接触lr,对脚本修改还不了解),这里的意思是在ParameterList中建立完参数以后,直接就可以在LR脚本中写下边的那些代码了吗?原封不动拷贝过来就可以吗?放到脚本的什么地方?
答:他的这段代码可以直接使用的。放在脚本的什么位置,要看你的实际需要了,这里说不清楚。

3. 如果实际事务放过来的话,那事务之前的操作如何处理,例如我想上报数据,首先需要领导签字才能点上报,但是领导签字这个动作不需要并发操作,但是他是必须得操作,如果这样的话,该如何处理,按照上边的内容的话,就没有地方写这些前提内容了?这如何处理?
答:事务之前的操作,我个人认为需要在正式测试运行之前,先去跑一些脚本造一些数据。免得后面正式测试的时候,导致前面业务动作没有产生足够的数据,而使得后面的业务动作失败。
作者: haiyugg    时间: 2007-7-5 11:47
测试成功了,确实是这样,只要在录制脚本的时候在每个脚本的集合点名字写一样了就ok了,然后在集合策略中就可以看到对应名字的集合点可以有好几个脚本的虚拟用户。这样就可以做多业务的并发了,只是需要对每个事务都录制一个新的脚本,没有试验过在同一个脚本里面录制多个同名集合点的问题,那样的话估计可能出错。没时间试验了,等以后再试验再发上来吧!

在此多谢Athenst以及给回复帮忙的朋友了,我的联系方式在顶楼的上边有,希望大家以后常联系,多交流。

刚看到spartan 的回复,呵呵,也感谢spartan 阿,问了好几个问题了,感觉你们都特热心,呵呵,在论坛上游荡了三天,受益匪浅啊,希望以后多交流多帮助阿!

[ 本帖最后由 haiyugg 于 2007-7-5 11:49 编辑 ]




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