码迷,mamicode.com
首页 > 其他好文 > 详细

loadrunner生成随机数

时间:2015-06-08 19:22:15      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

loadrunner生成随机数

 
对网站注册进行压力测试时,需要对注册的用户名进行参数化,因为可以会用到大量的测试数据,所以选择通过生成随机数来进行参数化。最开始用loadrunner自带的参数随机功能,代码如下:
 
"Name=RegForm[name]", "Value={NewParam}", ENDITEM,
 
参数化选择为:random number 
技术分享
 
因系统对用户名的位数做了限制,同时为了方便统计,将代码修改为:
 
"Name=RegForm[name]", "Value=lr{NewParam}{NewParam1}{NewParam2}", ENDITEM,
 
注意参数化之后的值的最大位数不能超过系统限制,否则可能会提交错误的参数。参数化完成后加载场景运行测试,基本可以满足压力测试需求。
    测试过程中发现仍会有部分失败的事务,检查日志后发现因用户名重复导致注册失败,为减少这种情况,尝试了使用另外一种随机数方法。代码如下:
    int name_num,rand_num,i;
    char StrTable[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    char i_name[20]="";
    srand((unsigned)time(NULL));
    lr_log_message("srand is %d",srand((unsigned)time(NULL)));
    name_num=rand()% 20 ;
    lr_log_message("rand number is %d",name_num);
for (i=0;i<=name_num;i++)
{
rand_num=rand()% 62;
strncat(i_name,StrTable+rand_num,1);
}
    lr_log_message("the string is %s",i_name);  
    lr_save_string(i_name,"i_name_value");    //保存随机数
    ...
 
    "Name=RegForm[name]", "Value=lr{i_name_value}", ENDITEM,
 
     修改完脚本后,压力测试时发现有大量的失败,调试脚本后发现会出现生成同个参数多次的情况,考虑是否是因为种子每次没有初始化的缘故,将srand((unsigned)time(NULL));放在vuser_init()里后,循环时就不会出现重复情况。后来一想干脆就将这两种方法结合起来:  
 
     vuser_init()
{
srand((unsigned)time(NULL));
return 0;
}
 
Action()
{
int name_num,rand_num,i;
    char StrTable[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    char i_name[20]="";
    name_num=rand()% 20 ; 
    lr_log_message("rand number is %d",name_num);
for (i=0;i<=name_num;i++)
{
rand_num=rand()% 62;
strncat(i_name,StrTable+rand_num,1);
}
    lr_log_message("the string is %s",i_name);  
    lr_save_string(i_name,"i_name_value");    //保存随机数
    ......
 
"Name=RegForm[name]", "Value=lr{NewParam}{i_name_value}", ENDITEM,
 
     基本能满足测试需求了,有空的话希望能找到更好的方法。
 
 
 
 
 
 

随机函数的在Loadrunner中的一些的用法

 

    有时我在这脚本中需要随机的取下拉菜单或列表(list)中的值,那么我们就要用到随机数。下面就随机数的用法举例说明下.

实例一: 
str=rand(); //生成任意随机数  str=rand()%200 //生成最大值为200的随机数  str=rand()%100+200 //生成200-300之间的随机数 
举例:
int iRand; 
Action()  

{ srand(time(NULL));  //特别注意:加上这句,每次取不同的随机值

iRand = rand()%100; if( 30>=iRand ) { lr_output_message("The value of iRand is:%d,iRand < 30",iRand); }

else   { lr_output_message("The value of iRand is:%d,iRand > 30",iRand);   }

 return 0; }

实例二:

在关联中的一点应用:(确定一个关联中count的值)

web_reg_save_param("search_param", "LB=<p><A HREF=", "RB=>", "ORD=All"); ... search rand_selection = ( rand() % atoi(lr_eval_string("{search_param_count}")) + 1);

实例三:

产生一个新值(randselection)作为后缀去(随机)获得查找后的值

sprintf(my_new_parameter, "{search_param_%d}", rand_selection);
 
 
 
 
 
 
 
 
 

一个Loadrunner  生成随机字母的方法

char *randstring(int slen)
{
    int i,randid;
    char temp[100]="";
    char character_set[52] = {A‘, B‘, C‘, D‘, E‘, F‘, G‘, H‘, I‘, J‘, K‘, L‘, M‘, N‘,O‘, P‘,Q‘, R‘, S‘, T‘,U‘, V‘, W‘, X‘,Y‘, Z‘,a‘, b‘, c‘, d‘, e‘, f‘, g‘, h‘, i‘, j‘, k‘, l‘,m‘, n‘, o‘, p‘, q‘, r‘,s‘, t‘, u‘, v‘, w‘, x‘,y‘,z‘};
    for(i=1;i<=slen;i++)
     {
         randid=rand()%52;
         sprintf(temp,"%s%c",temp,character_set[randid]);
      }
        return(temp);
}
 

 

如何调用该函数:

lr_save_string(randstring(5),"searching");

//调用randstring函数,生成5位长度的随机字符串

很简单的一个方法,可以联合一个loadrunner的方法来用 生成唯一随机数。

如何想生成一个0到99的随机数,可以使用:

int which; which=rand()%100;

这样which的数字就是一个0到99的随机数了

例如: 联合lr_whoami 或者使用一个web_save_timestamp_param 获得当前的时间戳,这样就可以做出一个唯一的参数值。

尽量不要使用lr自带参数化随机取值,会大幅度降低负载发生器的性能。

 

 

 

 

 

lr如何获取当前系统时间戳

   一般使用time函数,获取当前unix时间戳

   lr程序如下:

   int t1;

   char a[20];

   t1=time();//获取当前系统时间

    //根据不同情况,将时间存储成不同的参数类型

   lr_save_int(t1,"time1");//将t1存成整形参数time1

   sprintf(a,"%d",t1);//将t1存进数组a

   lr_save_string(a,"time2");//将数组a存成字符串参数time2

   lr_output_message("当前时间是%s",lr_eval_string("{time1}"));

   lr_output_message("当前时间是%s",lr_eval_string("{time2}"));

   //后面的程序,可以将time1和time2代入不同的表单项中

 

 

 

LR中使用随机数的三种方法

 

  LR中获得随机数,大概有以下三种方法:
 
一、将变量参数化,使用LR自带的随机参数模式,随机匹配指定长度的数
 
 
二、定义变量,使用rand()函数
  比如,int Num;
       Num=rand();//这样就获取了一个随机数,但这个随机数每次都不一样
 
  //如果需要获取指定长度内的一个随机数,比如从X到Y之间的随机数,可以使用一下算法
       Num=rand()%(Y-X+1)+X //这样就能得到包含X到Y之家的任何数
 
三、定义变量,使用srand函数
  函数原型为:srand((unsighed) time(null))
  比如,int Num;
       Num=srand(time(null))
 

loadrunner生成随机数

标签:

原文地址:http://www.cnblogs.com/qmfsun/p/4561524.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!