发布新日志

  • LOADRUNNER11如何调用Jar包进行压力测试

    2017-02-28 15:46:45

    LOADRUNNER11如何调用Jar包进行压力测试

    自己根据其他网友的帖子,结合自己的项目,实践后写的攻略,分享给大家。
  • LOADRUNNER11如何调用Jar包进行压力测试

    2017-02-28 15:43:22

    LOADRUNNER11如何调用Jar包进行压力测试

    1. 删除电脑原有的JDK的其他版本,只安装JDK1.6 u30, 配置path如下:

      右键我的电脑àpropertiesàadvanced system settingsàenvironment variables, 加入

      如:C:\Program Files (x86)\Java\jdk1.6.0_30\bin

    2. LoadRunner11选择Java Vuser协议,如下图

    3. 打开LoadRunner 11run time setting界面, F4即可打开此界面。

      1)设置ClassPath

      点红色框的按钮,添加红色的三个JAR包,其中第三个jar包即被测试(调用)的JAR

      点兰色框的按钮,添加蓝色的一个路径

       

     

     

     

     

     

    2)设置Java VM

           查看(3504) 评论(0) 收藏 分享 管理

  • 动态数组定义

    2007-08-12 13:35:15

    我们将一个字符串"abcdefghi"的值每两位截取后,放入动态数组中str1,截取到最后若只剩余一个字符,也将其放入数组str1中。

    如:"ab" 放入str1[0]; "cd"放入str1[1];"ef"放入str1[2]......到了最后剩余一个"i",也放入数组str1[4]中。 

    具体的代码如下:

       int i,j,len_rest;           //len_rest定义要被截取的字符串在每次截取后的剩余长度
       char temp[30],*str1[30],str1_temp[30];

       strcpy(temp,"abcdefghi");

        //动态定义数组str1之前分配空间
     for (i=0; i<10; i++)
     str1[i]=(char *)malloc(sizeof(char)*100);
     
        len_rest=strlen(temp);
        for (i=0;i<7;i++) {
           if (len_rest<1)     //若被截取的字符串的剩余长度小于1,就推出循环;
       i=100;
           else{
        j=2*i;
           strncpy(str1[i],&temp[2*i],2); //将截取的两位字符串动态赋值给数组str1;
           lr_output_message("在数组str1中的元素是:%s",str1[i]);
           len_rest=strlen(temp)-2*(i+1); //每成功放入两个字符之后,将len_rest的值减去2;
        }
        }

  • 回答网友提问:参数化编程

    2007-08-12 10:35:12

    问题:
    我需要做参数化输入
    假设有2个字段: customid和planid,一个customid下有多个planid,
    我需要对customid和planid都做参数化输入,即顺序取一个customid,再随机在这个customid里取一个planid
    但是planid要跟着customid变化
    这是否是关联的问题?
    怎么解决? 思路即可.

    解决的代码:
    Action()
    {
       int i,j,k,rnum;
       char costomid[30];
       char combin_planid[30],planid_temp[30],planid[30];


       //先从costomid_single中顺序取一个costomid;
       strcpy(costomid,lr_eval_string("{costomid_single}"));
       lr_output_message("costomid=%s",&costomid);

       //在combinid.dat中寻找相同costomid的个数;
       j=0;
       strcpy(combin_planid,"#");
       for (i=1;i<10;i++) {
             if (strcmp("end",lr_eval_string("{costomid}"))==0)
               i=1000;
             else
          if (strcmp(costomid,lr_eval_string("{costomid}"))==0){
                     j=j+1;
             strcat(combin_planid,lr_eval_string("{planid}"));
             strcat(combin_planid,"#");
               }
         lr_advance_param("costomid");
       }
       lr_output_message("和%s相同的costomid的个数是=%d",&costomid,j);

       //处理字符串,找出随机的那个planid
       rnum = rand() % j;
       lr_output_message("随机数是:%d",rnum);
       k=0;
       strcpy(planid_temp,"");
       strcpy(planid,"");
       for (i=0;i<50;i++) {
         strncpy(planid_temp, &combin_planid, 1);
             if (strcmp("#",planid_temp)==0)
                k=k+1;
             if (k-rnum-1==0)
                    strcat(planid,planid_temp);
       }
       strncpy(planid,&planid[1],10);

       lr_output_message("你要用的参数costomid=%s,planid=%s",costomid,&planid);


            return 0;
    }
  • [论坛] 参数表中select next row和update value on的设置

    2007-08-06 17:43:46

    LR的参数的取值,和select next row和update value on的设置都有密不可分的关系。 下表给出了select next row和update value on不同的设置,对于LR的参数取值的结果将不同,给出了详细的描述。

    Select next row Update Value on 实际运行结果
    sequential each iteration 在某次循环中所有用户取值相同。
    所有用户第一次循环取第一行值,第二次循环取第二行值
      each occurrence 在某次循环中或者脚本中使用参数的地方,所有用户取值相同。
    脚本中出现要使用参数的话,参数值就更新一次,循环一次值再更新一次。
      once 在所有的循环中所有用户取值相同。
    所有的用户所有的循环中,只用一个值(即参数中的第一行值)
         
    random each iteration 不同的用户,在不同的循环次数中,随机取值
      each occurrence 不同的用户,脚本中出现要使用参数的话,随机取值一次,循环一次再随机取值一次
      once 不同的用户,不管循环多少次,只随机取值一次。
         
    unique each iteration 若选择手工自配参数,那LR按照每用户几个参数先分配参数,然后进行循环。
    若选择自动分配参数:
    Controller中edit schedule中run until comletion:按照循环次数先分配第一个VU(例如设置的循环次数为3,那分配给第一个VU 3个参数值),然后接下来的3个参数值分配给第二个VU,依次类推…...
    Controller中edit schedule中run for:若选择自动分配,LR将按照用户数均分参数,剩余的参数不使用。
      each occurrence 只能手工分配用户,给每个用户分配好X个参数后,在脚本中有参数的地方,就使用已经分配好的X个参数。
      once 按照用户数分配给每个用户分配一个参数而已。以后的循环这个用户就使用这一个参数

  • 参数表中when out of values的意义

    2007-08-06 17:41:26

    WHEN OUT OF VALUES是指在每个用户分配到一定数量的参数后,在LR循环运行的时候, 当某个用户的参数不够的时候,LR将按照设置的WHEN OUT OF VALUES的值进行处理。


    举个例子:
    现有一参数,名为:emp_no, 有四个值: E01,E02,E03,E04
    现有一场景,三个虚拟用户,分别为:U1,U2,U3
    LR参数列表设置:unique + each iteration+ allocate 2 values for each vuser

    在场景运行的时候,
    1. LR会先做一件事情-参数分配,假设参数分配的方式是手工分配,allocate 2 values for each vuser.
        分配的结果是: U1-E01,E02;     U2-E03,E04;     U3-无参数;

    [备注:若选择了自动分配参数。那将遵循以下的原则:
    Controller中edit schedule中选择了run until comletion:按照循环次数先分配第一个VU(例如设置的循环次数为3,那分配给第一个VU 3个参数值),然后接下来的3个参数值分配给第二个VU,依次类推…...
    Controller中edit schedule中选择了run for:若选择自动分配,LR将按照用户数均分参数,剩余的参数不使用。]

    2. 在运行开始后,U3将会FAILED. 因为没有参数分配给他。其他的两个虚拟用户正常运行,但是其他的两个用户,每个用户只有两个参数,只能保证他们循环两次而已。
    当他们运行到第三个循环的时候,他们已经没有参数可以用了。 怎么办呢? 这个时候,LR将按照设置的WHEN OUT OF VALUES的值进行处理。我们拿虚拟用户U1来举例说明。

    如果when out of values=abort vuser, U1在第三次循环的时候将会退出执行。

    循环次数  虚拟用户   使用参数值 运行状态
    1 U1 E01  正常运行
    2 U1 E01  正常运行
    3 U1 / 退出运行


    如果when out of values=continue in a cyclic manner, U1在第三次循环的时候将会开始循环利用他的参数值E01, 第四次循环使用E02…….

    循环次数  虚拟用户   使用参数值 运行状态
    1 U1 E01  正常运行
    2 U1 E02 正常运行
    3 U1 E01  正常运行
    4 U1 E02 正常运行
    5 U1 ….. …..


    如果when out of values=continue with last value, U1在第三次循环的时候使用最后的一个参数即E02, 第四次继续使用E02…….

    循环次数  虚拟用户   使用参数值 运行状态
    1 U1 E01  正常运行
    2 U1 E02 正常运行
    3 U1 E02 正常运行
    4 U1 E02 正常运行
    5 U1 ….. …..

  • 利用数组处理字符串

    2007-08-04 09:12:24

    直接用LR的函数+数组的方式完成字符串中某几位的截取。
    现有一个字符串:"ABCDEFG", 现要从第三位开始,连续取两位字符,即"DE"! 取值代码如下
      char array1[20];
      char array2[20];

      strcpy(array1,"ABCDEFG");
      strncpy(array2,&array1[3],2);      //&array1[3]表示的值是:"CDEFG"
      lr_output_message("Value is:%s", array2);
  • 利用指针处理字符串

    2007-08-04 09:07:57

    我将字符型变量赋值给指针,数组赋值给指针,同样数据类型的指针相互赋值,常量字符串赋值给指针都罗列了一下。

    point_01()
    {
              int k;
                     char *point1, *point2;
                     char str1;
                     char  array1[300];
                     char  result1[300],result2[300],result3[300],result4[300];

    /* 相同类型的指针之间的赋值,将指针point1已经有的值赋给指针point2; */
                       point1="ABCDEFGH";
                       point2=point1;
                       for (k=1;k<3;k++)
                              {
                              point2++;
                              }
                     strncpy(result1,point2,3);
                     lr_output_message( "指针相互赋值的结果result1=%s",result1);
                   
                   
    /*变量的值赋给相同数据类型的指针*/
                 str1='S';//注意:使用char型变量,只能定义一个字符。
                      point2=&str1;
                       for (k=1;k<1;k++)
                              {
                              point2++;
                              }
                     strncpy(result2,point2,3);
                     lr_output_message( "变量赋值给指针的结果result2=%s",result2);

    /* 把数组的值赋予指向数组的指针变量,array1 为数组,将其值赋予指针point1; */
            strcpy(array1,"helloloadrunner");
                    point1=array1;
                     for (k=1;k<3;k++)
                      {
                      point1++;
                      }
                    strncpy(result3,point1,3);
                    lr_output_message( "数组赋值给指针的结果result3=%s",result3);

    /*把字符串赋予指向字符类型的指针变量, 将字符串"youareboy"赋值给指针point1;*/
                       point1="youareboy";
                       for (k=1;k<3;k++)
                              {
                              point1++;
                              }
                     strncpy(result4,point1,3);
                     lr_output_message( "字符串赋值给指针的结果result4=%s",result4);

            return 0;
    }
  • 参数设置unique+each iteration中自动分配、手工分配block的区别

    2007-08-03 21:55:54

     

    第一种方法:

      假如你有两个用户分别为用户A,用户B。假如你的参数为emp_name有20行数据("1","2',"3","4".........."20")
    那么按照这种设置以后,在Loadrunner的controller运行的时候,LR会分配给用户A,用户B如下的参数。
    用户A:emp_name参数列表中的第一行:即例子中的"1";
    用户B:emp_name参数列表中的第二行;即例子中的"2"

    不管controller中运行多少个iteration,或者持续运行多长时间。 用户A始终使用参数"1",用户B始终使用参数"2".


    第二种方法:

      假如你有两个用户分别为用户A,用户B。假如你的参数为emp_name有20行数据("1","2',"3","4".........."20")
    那么按照这种设置以后,你设置了给每个用户分配2个参数值。那么在Loadrunner的controller运行的时候,LR会分配给用
    户A,用户B如下的参数。
    用户A:emp_name参数列表中的第一,二行:即例子中的"1",“2”。
    用户B:emp_name参数列表中的第三,四行;即例子中的"3",“4”。
    不管controller中运行多少个iteration,或者持续运行多长时间。 用户A始终使用参数"1""2", 用户B始终使用参数"3""4"。 

    当然,假如你有5个虚拟用户的话,每个用户分配的参数如下:
    用户A:"1","2"
    用户B:"3","4"
    用户C:"5","6"
    用户D:"7","8"
    用户E:"9,"10"

  • 参数列表update value on=each occurrence/each iteration/once的区别

    2007-08-03 21:42:56

    假如你的代码是这样的:
       
              web_submit_form("reservations.pl",
                    "Name=depart", "Value=
    {depart_city}", ENDITEM,
                    "Name=departDate", "Value=06/20/2007", ENDITEM,
                    LAST);

            web_submit_form("reservations.pl_2",
                   
          "Name=depart", "Value={depart_city}", ENDITEM,
                    "Name=reserveFlights.x", "Value=81", ENDITEM,
                    LAST);
    再假设参数列表中这个参数depart_city的值是:上海
                                                                   
    北京
                                                                   
    重庆
                          西安
                          合肥

    这段代码中两个地方都用到了{depart_city}, 关于这个参数的调用是如何的呢?关键取决于你自己在参数列表中对于这个参数的设置。
    假如你的设置是:
      A. update value ōn=each occurrence
          
    在第一个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="上海"
              第二段代码web_submit_form("reservations.pl_2".....depart_city="北京"

          
    在第二个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="重庆"
              第二段代码web_submit_form("reservations.pl_2".....depart_city="西安"
         
          
    在第三个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="合肥"
          ........................................................................
          
    如果参数不够用的时候,怎么办呢?那就看你参数列表中另外一个设置when out of value怎么设置呢? 这里先不谈。

      B. update value ōn=each iteration
          
    在第一个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="上海"
              第二段代码web_submit_form("reservations.pl_2".....depart_city="上海"

          
    在第二个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="北京"
              第二段代码web_submit_form("reservations.pl_2".....depart_city="北京"
         
          
    在第三个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="重庆"
          ..............................................................................

      C. update value ōn=once
          
    在第一个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="上海"
              第二段代码web_submit_form("reservations.pl_2".....depart_city="上海"

          
    在第二个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="上海"
              第二段代码web_submit_form("reservations.pl_2".....depart_city="上海"
         
          
    在第三个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="上海"
          ..............................................................................

  • 三种常用的文本检查web_reg_find的方法

    2007-08-03 21:38:50

    1.       将脚本切换到树结构,在page view页面上找到你要check的文本内容, 并执行鼠标邮件,选择copy selection.

    2.       将脚本切换回代码界面, 在光标闪烁的上行,添加如下的代码:

    备注:光标闪烁的上行: 若光标闪烁行为第10行,那光标闪烁的上行为第9行。

    添加的代码根据你检查的方式不同而不同, 你可以选择其中之一即可。

    代码一:

    web_reg_find("Text=Payment Details",LAST); 

    代码思路:

    1.“Payment Details” 为你要检查的文本;

    2. 脚本执行到此处,若在页面上找到了这几个字符串,那脚本继续执行下去;若没有找到,脚本将在此报错并且结束。

     

    代码二:

     web_reg_find("Text=Payment Details", "SaveCount=para_count", LAST); //check 的函数

    web_submit_form("reservations.pl_2",           //check的页面的录制时的代码

               "Snapshot=t22.inf",

               ITEMDATA,

               "Name=outboundFlight", "Value=003;0;06/23/2007", ENDITEM,

               "Name=reserveFlights.x", "Value=61", ENDITEM,

               "Name=reserveFlights.y", "Value=2", ENDITEM,

               LAST);

    if (atoi(lr_eval_string("{para_count}"))>0)        //验证是否找到了页面上的要检查的字符串

        lr_output_message("we find the string!");

     else

    lr_output_message("sorry,don't find the string!");

       代码思路:

    1.“Payment Details” 为你要检查的文本;

    2. 脚本执行到此处,不管页面上是否存在你要检查的字符串,脚本都不会报错,而是执行下去。

    3. 此段代码将找到的你要检查的字符串的个数,存为一个参数。 然后在页面代码的后面,通过检查这个参数的值是否大于0,来判断是否找到了你所要检查的字符串。

     

    代码三:

           A. web_reg_find("Text=Payment Detdils", "Fail=NotFound",LAST);或者

       B. web_reg_find("Text=Payment Detdils", "Fail=Found",LAST);

       代码思路:

    1.“Payment Details” 为你要检查的文本;

    2. 若是A代码:脚本执行到此处,若没有找到check的字符串,脚本将FAIL 并且停止执行下去。反之,则一直执行下去。

    3. 若是B代码:脚本执行到此处,若找到check的字符串,脚本将FAIL 并且停止执行下去。反之,则一直执行下去。

Open Toolbar