loadrunner生成随机数

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,

基本能满足测试需求了,有空的话希望能找到更好的方法。

 

 

方法二:

int itera_num,rand_num,i;
char StrTable[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
char i_name[24]="";
char i_data[50]="";
char i_data2[24]="";

itera_num=rand()%24;
for (i=0;i<=itera_num;i++){
rand_num=rand()%62;
strncat(i_name,StrTable+rand_num,1);}
itera_num=rand()%50;
for(i=0;i<=itera_num;i++){
rand_num=rand()%62;
strncat(i_data,StrTable+rand_num,1);}
i=rand()%strlen(i_data)+1;
strncat(i_data2,i_data,i);
lr_save_string(i_name,"i_name_value");
lr_save_string(i_data,"i_data_value");
lr_save_string(i_data2,"i_data2_value");

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Loadrunner随机生成15位数字串

今天看到一个网友的问题,是想生成一个15位的数字串来进行参数化输入,要求如下:
1、前4位均是0436
2、其余的是11位的随机数
原帖地址:http://bbs.51testing.com/viewthread.php?tid=89018&page=1&extra=page%3D1

拿到问题,我思考了一下,前4位使用固定值很好办,唯一的问题就是生成随机数了;
生成随机数而且用lr实现,目前我知道2种方法:
1、使用c语言的rand()函数
2、使用lr的参数类型中的random number来生成

因为要生成固定的位数,所以我决定使用lr的random number方法;另外也是我想到rand()函数实现起来非常麻烦,~解决问题为主。

我的回复如下:
##############
1、在参数表(Parameter List)中新建一个参数(Parameter),命名为"num"
2、选择参数类型(Parameter type)为随机数(Random Number),
3、选择参数范围(Parameter range)为最小为1,最大为99999999
4、在随机数格式(Number format)里选择“%08lu”
然后引用类似为:
web_sumbit_data(
……
……
"card_id=0436000{num}";
LAST);
说明:随机数按照位数在c语言里不好实现,所以我选择了lr的参数化来生成。但是lr的参数化里最多只能生成8位数字(这个我还不知道能不能改),所以你要求有11位数字的时候,我就把你要求的固定的"0436"变成了"0436000",这样参数化以后就可以生成类似"043600012345678"的15位数字了。
##############

回复完毕,又仔细想想发现自己很傻,既然lr支持字符串和参数在一起被引用,那么为什么只用一个参数才解决呢?而且解决的也不彻底,还有3位数是固定值。。发现自己还真的很笨~~~~

更好的实现方法是创建2个或者多个随机数类型的参数(Random Number Parameter),这样,就能把随机数的参数化位数增加到11位甚至更多;~想参数多少位就多少位,嘿嘿

还是以15位的这个问题来说吧:
如图再增加一个随机数.

然后引用方法类似:
web_sumbit_data(
……
……
"card_id=0436{num1}{num}";
LAST);

搞定!!

 

再增加随机数

  •  

    loadrunner 生成随机数的函数

    使用C代码生成随机英文+数字

    int itera_num,rand_num,i;
    char StrTable[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    char i_name[24]="";
    char i_data[50]="";
    char i_data2[24]="";
    itera_num=rand()%24;
    for (i=0;i<=itera_num;i++){
    rand_num=rand()%62;
    strncat(i_name,StrTable+rand_num,1);}
    itera_num=rand()%50;
    for(i=0;i<=itera_num;i++){
    rand_num=rand()%62;
    strncat(i_data,StrTable+rand_num,1);}
    i=rand()%strlen(i_data)+1;
    strncat(i_data2,i_data,i);
    lr_save_string(i_name,"i_name_value");
    lr_save_string(i_data,"i_data_value");
    lr_save_string(i_data2,"i_data2_value");

    参看:http://boyqqq.spaces.live.com/blog/cns!D6AA33352019FC3E!149.entry?wa=wsignin1.0&sa=314044507

    使用loadrunner自带的函数random number生成随机数字

    1、在参数表(Parameter List)中新建一个参数(Parameter),命名为"num"
    2、选择参数类型(Parameter type)为随机数(Random Number),
    3、选择参数范围(Parameter range)为最小为1,最大为99999999
    4、在随机数格式(Number format)里选择“%08lu”
    然后引用类似为:
    web_sumbit_data(
    ……
    ……
    "card_id=0436000{num}";
    LAST);

    当然也可以多个随机参数一并合成一个

    这时候使用就变成了

    web_sumbit_data(
    ……
    ……
    "card_id=0436{num1}{num}";
    LAST);

    image

    更详细的可以参看:

    http://www.51testing.com/?uid-6343-action-viewspace-itemid-19789

    选择不同的 Update value on 对应的执行效果:

    image

 

 

 

 

 

 

 

方法四:

由于今天测试的一个项目,账号是已经生成--是手机号,但是密码是手机的后6位,因为这是游客登录,而且这些手机号数据库又没有,所以密码不能在数据库修改,只能自己从生成的手机号中取后六位了。

在网上找了找也没找到现成的函数,于是决定自己写一个来处理,一下就是我写的代码:

Action()
{
  char *phonenum;
  int k=1;
  phonenum=lr_eval_string("{Phone}");//参数化获取的手机号码
  for (k=1;k<6;k++){//k=1标示从phonenum的指针第一位开始 k<6表示phonenum的坐标移到第6位
  phonenum++;                  
 lr_save_string(phonenum,"Passwd");//将移位后的phonenum保存到新的参数中作为密码来使用
 lr_output_message("手机号的后6位是:%s",lr_eval_string("{Passwd}"));//验证保存的参数是否正确


return 0;
}

 

其实这些都是由以前参考过的guid函数启发所想:

void guid(char * messageId)
{
 int itera_num,rand_num,i,j,k=k+1;  
 char StrTable[]="abcdefghijklmnopqrstuvwxyz1234567890";
 char string1[24]="";
 char string2[24]="";
 char string3[24]="";
 char string4[24]="";
 char string5[24]="";
 char string5_temp[24]="";
 char messageId[126]="";
 char * conn = "-";

    for (i=0;i<=7;i++){

               rand_num=rand()%36;

               strncat(string1,StrTable+rand_num,1);} //前8位的获取

     for (i=0;i<=3;i++){
               rand_num=rand()%36;
               strncat(string2,StrTable+rand_num,1);} //中间4位的获取


       for (i=0;i<=3;i++){
               rand_num=rand()%36;
               strncat(string3,StrTable+rand_num,1);}


      for (i=0;i<=3;i++){
               rand_num=rand()%36;
               strncat(string4,StrTable+rand_num,1);}


      for (i=0;i<=11;i++){
               rand_num=rand()%36;
               strncat(string5,StrTable+rand_num,1);}

       strcpy(messageId, string1);
       strcat(messageId, conn);
       strcat(messageId, string2);
       strcat(messageId, conn);
       strcat(messageId, string3);
       strcat(messageId, conn);
       strcat(messageId, string4);
       strcat(messageId, conn);
       strcat(messageId, string5);
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值