最近的一年在做个即时通讯产品的性能测试,需要提前预知一下系统文本消息发送的性能和系统能够支持的最大支持用户数,那第一步就是要开发脚本了。要求是产生1-80kb字符的不定长度的字符来摸拟用户的实际情况,开发这段脚本可是把我给整死了。因为哥的专长不是做性能测试,对c++也不熟,只好凭着点功底,硬着头皮来了。
到c++开发那问了点思路,就自己回去查api了,你问开发lr的c脚本怎么写,他肯定不知道。但是思路可以共享。只能自己弄个大概齐,实在搞不通的地方,再找开发帮忙调下。
最后花了一天的时间,终于把脚本调通,实现需求了。以下都有详细的注释。
思路:
1.产生随机长度数
2.分配随机长度内存块
3.用随机数填充内存块
char* genVarContent();
int i;
Action()
{
//局部变量声明
//添加Http头
//web_add_header(“HTTP”, “1.1″);
//web_add_header(“Connection”, “Keep-Alive”);
//集合点,事务
//lr_rendezvous(“Send_Msg_Together”);
//开始不断的post消息
char *pBuf;
//产生可变长度数据
pBuf=genVarContent();
//该函数主要是将程序中的常量或变量保存为lr中的参数
lr_save_string(pBuf,”pBuf”);
lr_start_transaction(“SendMsg”);
//发送请求,返回标志位
web_reg_save_param(“im_response”,”LB=
“, “RB=
“, LAST);
//发消息
web_custom_request(“IM_Send_Msg”,
“URL=http://192.168.5.12:803/api/GTPIM”,
“Method=POST”,
“TargetFrame=”,
“Resource=1″,
“Referer=”,
“Body={pBuf}”,
LAST);
//检查服务器Response
if (strcmp(lr_eval_string(“{im_response}”),”OK”))
{
lr_set_transaction_status(LR_FAIL);
lr_output_message(“检测到服务器未返回成功的消息,因此判定失败!”);
lr_end_transaction(“SendMsg”,LR_FAIL);
}
else
{
lr_set_transaction_status(LR_PASS);
lr_output_message(“检测到服务器返回成功的消息,因此判定成功!”);
lr_end_transaction(“SendMsg”, LR_PASS);
}
free(pBuf);
lr_think_time(10);
return 0;
}
char* genVarContent()
{
int nTmpLen=0;
char * pBuf=NULL;
int nTmpRand=0;
do
{
//产生不定长度的数据
srand(time(NULL)); //更换种子
nTmpLen = rand()%80;
} while ( nTmpLen==0 );
lr_output_message(“nlen值是:%d”,nTmpLen);
//以上代码用于产生随机长度数
//nTmpLen=nTmpLen*sizeof(char)+1;
nTmpLen=1*1024*sizeof(char)+1;
//分配内存块
pBuf=(char *)malloc(nTmpLen);
//lr_output_message(“分配的数据长度是:%d Bytes”,nTmpLen);
//lr_output_message(“分配到的内存首地址为:%.8x”,buf);
//lr_output_message(“填充前的数据内容是:%s”,buf);
//更换种子
//srand(time(NULL));
nTmpRand = ‘A’+rand()%26;
lr_output_message(“填充数的Accsii码是:%d”,nTmpRand);
//itoa(iRand,sRand,10);
//以上代码用于产生随机字符,用来填充内存。
//先用零填充初始化一下
memset(pBuf,0,nTmpLen);
//再用A-z之间的字符填充一下
memset(pBuf,nTmpRand,nTmpLen-1);
return pBuf;
}