dddddddddd 发表于 2008-8-18 14:48:54

关于java vuser脚本init()方法执行次数

import lrapi.lr;
public class Actions
{
        public int init() {
                     /*完成初始化及与服务器建立连接*/
        return 0;
        }//end of init

        public int action() {
                     /*执行被测试的业务操作*/
        return 0;
        }//end of action

        public int end() {
        return 0;
        }//end of end
}
1.以上java vuser脚本分为init(),action(),end()三部分,我想请教这三部分与Loadrunner提供的Vuser_init,Actions,vuser_end有什么不同?为什么我将init()部分的初始化代码放到vuser_init中,代码无法得到执行呢
2.这个脚本如果我执行100用户并发的情况下,init()部分的建立连接是建立100个连接还是只是建立了1个连接,在action()部分完成了100个并发?如果我要将init()部分只做一次,action()部分做100次应该怎样处理?

谢谢各位。。。:handshake

dddddddddd 发表于 2008-8-18 16:43:38

希望能得到大家的帮助,谢谢!

dddddddddd 发表于 2008-8-19 09:46:36

期待答案

dddddddddd 发表于 2008-8-19 14:29:41

期待各位的解答。。。

★星の金币 发表于 2008-8-19 23:20:58

既然没人回答 我就先抛砖引玉吧,嘿嘿

1、init和end部分已经明确说明了不要在哪里写任何代码(写上也没用)

2、Java VuserClass中的init()、action()、end()三部分就相当于普通模式下的init、action、end三部分,举例来说:
如果一个用户执行的情况下,设置了runlogic为3,init()执行了一次、action()执行了三次、end()执行了一次,懂没?!
o(∩_∩)o...

import lrapi.lr;
public class Actions
{
      public int init() {
                     /*完成初始化及与服务器建立连接*/
      return 0;
      }//end of init

      public int action() {
                     /*执行被测试的业务操作*/
      return 0;
      }//end of action

      public int end() {
      return 0;
      }//end of end
}

dddddddddd 发表于 2008-8-20 20:42:48

十分感谢★星の金币给予的指导,谢谢。

这个问题也就是说,不管我并发多少用户,init()和end()方法都只做一次,并发的用户数只对action()方法生效。另外,我想问一下,如果我要让init()方法中的建立多个连接测试程序应该怎样写,或者在loadrunner哪个地方进行设置可以做到?谢谢

★星の金币 发表于 2008-8-21 11:20:33

不客气!
先纠正个错误
正确答案应该是:init()、end()执行的次数是和并发的用户数量是一致的(在场景中)


你的第二个问题 我不大懂啥意思,我就先具个例子给你看看吧,其实javaVuser用的一些函数脚本与默认的脚本超像,举例如下:


…………………………省略了
        public int init() throws lrapi.exceptions.HttpException {
          lr.error_message("我是init");
          web.url("打开订票系统",
                  "URL=http://127.0.0.1:1080/mercuryWebTours/",
                  new String[]{
                "Resource=0",
                "RecContentType=text/html",
                "Referer=",
                "Snapshot=t1.inf",
                "Mode=HTML",
                "LAST"
                        });

                return 0;
        }//end of init
……………………再次省略(*^__^*) 嘻嘻……

上面的init一共做了两个操作一个是 在Replay Log中打印“我是init”,另外也打开了Loadrunner自带的“Mecury Tours”的首页

你可以去查看一下LR的帮助 有关JavaVuser的说明,可以参考

&……&……&……&……

wangmeng814 发表于 2008-8-21 12:04:23

学一下~没用JAVA 写过LR

dddddddddd 发表于 2008-8-21 23:43:43

★星の金币你解答的太对了,我后来做了一个实验也得到了验证。init()与end()并发数是多少他就执行多少次,但是设置了迭代后,迭代过程是不做init()和end()部分的。十分感谢。

其实我开始是不清楚这个原理,现在清楚了我再请教另外一个问题,有什么办法能让init()部分不受并发数的影响,也就是说我100个并发也只执行init()1次吗?因为我现在这个测试的系统是长链接的方式,建立1次会话链接后再做其他操作也不需要再链接了,我现在的代码只能是达到测试并发链接数的目的。

有知道的朋友也给我指点一下思路,感谢。

dddddddddd 发表于 2008-8-23 19:31:14

上面的问题可能是我没有描述清楚,特将测试的网络结构图附上。见附件,希望继续得到各位的帮助。

测试目的分两部分:
1.测试综合前置系统能接入的外挂系统数,也就是能建立最大的通道数。目前的代码已经可以满足这种测试。
2.测试在外挂系统一个ejb通道上,综合前置系统能承受的最大交易并发数,目前由于现在的测试脚本中
init()方法主要是与外挂系统与综合前置建立ejb通道,测试脚本中使用了综合前置系统提供的连接器类,所以并发10个用户的情况下,loadrunner都根据并发用户数就建立了10个ejb链接,如果把建立ejb通道链接的代码单独出来,但是loadrunner加载脚本时还是没有地方只能让其执行一次,就算可以让只执行一次,action()部分的业务操作又没有办法共享ejb通道链接。

现在想知道如何才能做到在建立一个ejb链接的情况下完成多用户并发测试。

另外:
有一种测试的方法是,直接录制外挂系统的客户端画面形成测试脚本,但是这种方式测试的结果包括了外挂系统本身的系统与网络开销,所以还是希望能通过自己编写的脚本来测试。

dddddddddd 发表于 2008-8-24 15:01:37

以上问题可能是我没有描述清楚,特将测试的网络结构图附上。见附件,希望继续得到各位的帮助。

测试目的分两部分:
1.测试综合前置系统能接入的外挂系统数,也就是能建立最大的通道数。目前的代码已经可以满足这种测试。
2.测试在外挂系统一个ejb通道上,综合前置系统能承受的最大交易并发数,目前由于现在的测试脚本中
init()方法主要是与外挂系统与综合前置建立ejb通道,测试脚本中使用了综合前置系统提供的连接器类,所以并发10个用户的情况下,loadrunner都根据并发用户数就建立了10个ejb链接,如果把建立ejb通道链接的代码单独出来,但是loadrunner加载脚本时还是没有地方只能让其执行一次,就算可以让只执行一次,action()部分的业务操作又没有办法共享ejb通道链接。

现在想知道如何才能做到在建立一个ejb链接的情况下完成多用户并发测试。

另外:
有一种测试的方法是,直接录制外挂系统的客户端画面形成测试脚本,但是这种方式测试的结果包括了外挂系统本身的系统与网络开销,所以还是希望能通过自己编写的脚本来测试。

dddddddddd 发表于 2008-8-25 19:41:11

有朋友遇到过这种情况吗,有什么好办法不妨说来听听呀
页: [1]
查看完整版本: 关于java vuser脚本init()方法执行次数