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);

    更详细的可以参看:

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

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

方法四:

由于今天测试的一个项目,账号是已经生成--是手机号,但是密码是手机的后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);
}

loadrunner生成随机数的更多相关文章

  1. loadrunner 生成随机参数 Radom相关

    我也是刚开始进入测试行业,不过比较幸运的我之前做过开发,所以对代码比较熟悉,对loadrunner没有进行过系统的学习,也是通过自己的摸索慢慢的积累知识. 今天遇到项目中要我做一个压力测试,其中一些参 ...

  2. .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数

    .Net中我们通常使用Random类生成随机数,在一些场景下,我却发现Random生成的随机数并不可靠,在下面的例子中我们通过循环随机生成10个随机数: ; i < ; i++) { Rando ...

  3. DotNet生成随机数的一些方法

    在项目开发中,一般都会使用到“随机数”,但是在DotNet中的随机数并非真正的随机数,可在一些情况下生成重复的数字,现在总结一下在项目中生成随机数的方法. 1.随机布尔值: /// <summa ...

  4. Oracle中生成随机数的函数(转载)

    在Oracle中的DBMS_RANDOM程序包中封装了一些生成随机数和随机字符串的函数,其中常用的有以下两个: DBMS_RANDOM.VALUE函数 该函数用来产生一个随机数,有两种用法: 1. 产 ...

  5. JAVA生成随机数

    java中一般有两种随机数,一个是Math中random()方法,一个是Random类. 一.Math.random() 随即生成0<x<1的小数. 实例:如何写,生成随机生成出0~100 ...

  6. iOS开发-生成随机数

    有时候我们需要在程序中生成随机数,但是在Objective-c中并没有提供相应的函数,好在C中提供了rand().srand().random().arc4random()几个函数.那么怎么使用呢?下 ...

  7. exce生成随机数

    有时候数据库没有数据,造数据专用. 来源于:http://jingyan.baidu.com/article/93f9803feba1f5e0e46f55f2.html 首先介绍一下如何用RAND() ...

  8. 【gsl】生成随机数

    来自:http://hsxqwanting.blog.163.com/blog/static/16945437201301042830815/ 使用GSL生成随机数时的三个步骤:    (1)gsl_ ...

  9. php生成随机数的三种方法

    php生成随机数的三种方法 如何用php生成1-10之间的不重复随机数? 例1,使用shuffle函数生成随机数. <?php$arr=range(1,10);shuffle($arr);for ...

随机推荐

  1. JS 循环练习

    规律   大范围套小范围   循环   分支语句   switch case 嵌套  死循环 while(true)  打破循环   break    continue    while(true) ...

  2. 为Kindeditor控件添加图片自动上传功能

    Kindeditor是一款功能强大的开源在线HTML编辑器,支持所见即所得的编辑效果.它使用JavaScript编写,可以无缝地与多个不同的语言环境进行集成,如.NET.PHP.ASP.Java等.官 ...

  3. LayoutInflater的inflate函数用法详解

    LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: LayoutInflater inflater=(Layo ...

  4. lazyload

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  5. Hibernate单向一对多对象关系模型映射

    1 hibernate 的对象关系映射 Orm: 类-----表 属性------字段 对象------记录 表:在数据库中存在主外键的关系,反向工厂类是由表生成,在由表生成类的时候,类和类之间存在者 ...

  6. QtCreator 添加第三方头文件库文件路径

    打开工程名.pro文件 添加 INCLUDEPATH += $$PWD/../../Obelisk/thirdparty/prebuilt/include/LeapSDKOrion LIBS += - ...

  7. HTML标记语法之图片Img元素

    语法:<img src=”xxx.jpg”alt=”xxx”title=”xxx”> 属性可取值如下: 属性名称 属性值 说明 src URL 图片路径 alt 文本 图片无法显示时的文本 ...

  8. September 7th 2016 Week 37th Wednesday

    Patience is bitter, but its fruit is sweet. 忍耐是痛苦的,但它的果实却是甜蜜的. However, many may give up before they ...

  9. August 18th 2016 Week 34th Thursday

    Comedy is acting out optimism. 喜剧就是将乐观演绎出来. Being optimistic or pessimistic, that is all about your ...

  10. 多线程编程3 - GCD

    一.简介 在iOS所有实现多线程的方案中,GCD应该是最有魅力的,因为GCD本身是苹果公司为多核的并行运算提出的解决方案.GCD在工作时会自动利用更多的处理器核心,以充分利用更强大的机器.GCD是Gr ...