51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2171|回复: 4
打印 上一主题 下一主题

[原创] Loadrunner8.1多线程时自编脚本参数相同

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-3-11 11:15:39 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
大家好:
    我使用的LoadRunner8.1,测试基于Jboss的应用接口时在Loadrunner脚本中写了一段代码,用以实现每次调用时取30-50个1-2万随机数队列。我希望每个线程每次调用时都能生成新的随机数组,以下是我的脚本
#include "web_api.h"
#define STR_LEN 3500
srand ();
int m,l;
char str[STR_LEN];
int array[51];
Action()
{
       m = rand()%30+21;
//m控制随机数队列长度,每次取Note_ids总个数为30-50之间随机数
for (i = 0; i < m; i++)
{
       l =rand()%30000 + 1;
//l为30000以内随机数
//将随机数存入数组
       array [ i ] = l;
}
       str[0]='\0';
//将数组拼入str
for (i = 0; i < m ; i++)
{
if (i==0)
        sprintf(str,"%d",array);
else
        sprintf(str,"%s,%d",str,array);
}
lr_save_string( str, "UserID");
//结果存入参数UserID中
web_url("replies_summary_multi",
  "URL=http://10.8.8.35:27000/notes/replies_summary_multi?note_ids={UserID}&viewer_id={ViewID}",
  "Resource=1",
  "RecContentType=application/json",
  "Referer=",
  LAST);
return 0;
}
其中{UserId}定义为User Group形式的参数。
在controller中采用3并发执行脚本后发现server端后台日志:
2010-03-11 10:27:28:180 DEBUG http-0.0.0.0-27000-9 com.i139.deba.api.logger.InvokeLogger - REQ 10.8.16.50 /notes/replies_summary_multi {note_ids=24354,3549,1680,13685,1240,882,7464,2816,15042,viewer_id=419185}
2010-03-11 10:27:28:180 DEBUG http-0.0.0.0-27000-33 com.i139.deba.api.logger.InvokeLogger - REQ 10.8.16.50 /notes/replies_summary_multi {note_ids=24354,3549,1680,13685,1240,882,7464,2816,15042, viewer_id=133083}
2010-03-11 10:27:28:213 DEBUG http-0.0.0.0-27000-19 com.i139.deba.api.logger.InvokeLogger - REQ 10.8.16.50 /notes/replies_summary_multi {note_ids=24354,3549,1680,13685,1240,882,7464,2816,15042,, viewer_id=239840}
出现的问题:3个线程调用的note_ids都是相同的。
如何修改脚本才能使每个并发线程每次调用生成的Note_ids都各不相同?

[ 本帖最后由 daile2087 于 2010-3-11 11:21 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2010-3-17 17:06:47 | 只看该作者
#include "web_api.h"
#define STR_LEN 3500
char str[STR_LEN];
int array[51];
Action()
{
    int i,m,l;
    srand( (unsigned)time( NULL ) );
    m = rand()%30+21;
for (i = 0; i < m; i++)
{
    l =(rand()%450 + 1)*(rand()%449 + 1);
    array[ i ] = l;
}
       str[0]='\0';
for (i = 0; i < m ; i++)
{
if (i==0)
        sprintf(str,"%d",array);
else
        sprintf(str,"%s,%d",str,array);
}
lr_save_string( str, "UserID");

        web_url("replies_summary_multi",
  "URL=http://10.8.8.34:27000/notes/replies_summary_multi?note_ids={UserID}&viewer_id={ViewID}",
  "Resource=1",
  "RecContentType=application/json",
  "Referer=",
  LAST);
return 0;


按照您的建议采用srand( (unsigned)time( NULL ) )方式后问题依旧,参数UserID为Group Name,上面是action所有代码。在controller中设置4并发执行一次后后台日志如下:
2010-03-17 16:56:29:765 DEBUG http-0.0.0.0-27000-20 InvokeLogger - REQ 10.8.16.50 /notes/replies_summary_multi {note_ids=38220,18060,16880,12644,43230,48006,51604,143856,67860,99008,58940,87780,19084,39676,64605,2385,20020,21440,4905,7245,57616,37323,21996,79200,108703,24929,10450,37014,26226,9048,68105,25472,11144,105244,12994,69344,65600,135228,35156,24070,4394,20470,25130, viewer_id=18321}
2010-03-17 16:56:29:766 DEBUG http-0.0.0.0-27000-17 InvokeLogger - REQ 10.8.16.50 /notes/replies_summary_multi {note_ids=38220,18060,16880,12644,43230,48006,51604,143856,67860,99008,58940,87780,19084,39676,64605,2385,20020,21440,4905,7245,57616,37323,21996,79200,108703,24929,10450,37014,26226,9048,68105,25472,11144,105244,12994,69344,65600,135228,35156,24070,4394,20470,25130, viewer_id=227344}
2010-03-17 16:56:29:766 DEBUG http-0.0.0.0-27000-33 InvokeLogger - REQ 10.8.16.50 /notes/replies_summary_multi {note_ids=38220,18060,16880,12644,43230,48006,51604,143856,67860,99008,58940,87780,19084,39676,64605,2385,20020,21440,4905,7245,57616,37323,21996,79200,108703,24929,10450,37014,26226,9048,68105,25472,11144,105244,12994,69344,65600,135228,35156,24070,4394,20470,25130, viewer_id=292735}
2010-03-17 16:56:29:768 DEBUG http-0.0.0.0-27000-26 InvokeLogger - REQ 10.8.16.50 /notes/replies_summary_multi {note_ids=38220,18060,16880,12644,43230,48006,51604,143856,67860,99008,58940,87780,19084,39676,64605,2385,20020,21440,4905,7245,57616,37323,21996,79200,108703,24929,10450,37014,26226,9048,68105,25472,11144,105244,12994,69344,65600,135228,35156,24070,4394,20470,25130, viewer_id=332978}
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2010-3-16 16:57:38 | 只看该作者
请加入时间种子试一下!

Action()
{
    int i,k;
    srand( (unsigned)time( NULL ) ); //用系统时间当种子,对随机函数进行初始化
    for( i = 0; i < 10;i++ )
    {
       k=rand()%100; //产生各个随机数
       printf("k=%d\n", k );
       lr_output_message("%d",k);
     }
        return 0;
}
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2010-3-11 13:03:34 | 只看该作者
我们目前就是通过LoadRunner自带的随机数多次拼接实现的,但这只是权宜之计,因为此时随机数的总个数是固定,与我们设计用例初衷有偏差。还是希望各位高手能通过代码方式实现每次每个并发线程获取的随机数个数和取值都不相同,这种结果是我们追求的。
回复 支持 反对

使用道具 举报

该用户从未签到

2#
发表于 2010-3-11 11:45:01 | 只看该作者
LR有自带的随机数 参数,多拼接几个就可以了,虽然也有可能一样,但比你这样肯定会好很多。可以考虑随机数中再拼接唯一数
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-11 20:34 , Processed in 0.073231 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表