-
winsocket压力测试
2007-02-05 10:27:57
昨天用loadrunner写的脚本做压力测试。
发现很多9017错误。连接超时。
我的并发用户数是50个,后台服务启动了50个accept进程。(我想应该很够了)
但是在后台用netstat监视,发现%50多的状态都是CLOSE_WAIT。
不知道是什么原因。
测试脚本如下:
lrs_create_socket("socket02", "TCP", "RemoteHost=192.168.101.244:12008", LrsLastArg);
lrs_send("socket02", "buf0", LrsLastArg);lrs_set_recv_timeout2(0,0);
pcTest3=lrs_get_received_buffer ("socket02", 0, -1, NULL);
lr_output_message("recv=[%s]\n",pcTest3);lrs_close_socket("socket02");
-
问题来了
2006-12-25 20:48:48
刚才的脚本如果执行一次是没问题的,可是当我执行2次的时候,就运行报错了。
错误日志如下:
Virtual User scrīpt started
Starting action vuser_init.
vuser_init.c(7): lrs_startup(257)
Ending action vuser_init.
Running Vuser...
Starting iteration 1.
Starting action Action.
Action.c(54): lrs_create_socket(sock00002, TCP, ...)
Action.c(68): lrs_set_send_buffer(sock00002, buf, 40)
Action.c(71): lrs_send(sock00002, buf0)
Action.c(73): lrs_set_recv_timeout2(0, 0)
Action.c(75): lrs_receive(sock00002, buf1)
Action.c(77): lrs_get_received_buffer(sock00002, buf_p, size_p)
Action.c(83): uc_key=[65040238]
Action.c(91): pinkey=[3635303430323338]
Action.c(115): encrypted pinblock=[??>>5006>=;9<?><]
Action.c(126): lrs_create_socket(sock00003, TCP, ...)
Action.c(131): lrs_set_send_buffer(sock00003, buf, 222)
Action.c(132): ret=[0]
Action.c(134): lrs_send(sock00003, buf0)
Action.c(136): lrs_set_recv_timeout2(0, 0)
Action.c(138): lrs_receive(sock00003, buf1)
Action.c(138): Mismatch (expected 26 bytes, 261 bytes actually received)
Action.c(139): lrs_get_received_buffer(sock00003, buf_p, size_p)
Action.c(144): balance=[0.00]
Action.c(145): lrs_free_buffer(buf_p)
Ending action Action.
Ending iteration 1.
Starting iteration 2.
Starting action Action.
Action.c(54): lrs_create_socket(sock00002, TCP, ...)
Action.c(68): lrs_set_send_buffer(sock00002, buf, 40)
Action.c(71): lrs_send(sock00002, buf0)
Action.c(73): lrs_set_recv_timeout2(0, 0)
Action.c(75): lrs_receive(sock00002, buf1)
Action.c(77): lrs_get_received_buffer(sock00002, buf_p, size_p)
Action.c(83): uc_key=[65479956]
Action.c(91): pinkey=[3635343739393536]
Action.c(115): encrypted pinblock=[732>1>1:=9;3300:]
Action.c(126): lrs_create_socket(sock00003, TCP, ...)
Action.c(131): lrs_set_send_buffer(sock00003, buf, 222)
Action.c(131): Error: C-interpreter run time error: Action.c (131): Error -- memory violation : Exception ACCESS_VIOLATION received.
Action.c(131): Notify: CCI trace: Action.c(131): LrsSetSendBuffer(0x00b70024 "sock00003", 0x00b7022e "ABCDEA1205INQ00003000030000000000000000O...", 222)
.
Action.c(131): Notify: CCI trace: Compiled_code(0): Action()
.
Ending Vuser...
Starting action vuser_end.
vuser_end.c(7): lrs_cleanup()
Ending action vuser_end.
为什么啊??
-
loadrunner winsocket脚本
2006-12-25 20:45:17
这几天一直在弄一个loadrunner的cs测试脚本,使用windows socket的cs脚本,弄了几天终于弄出点东东来。
偶的测试脚本如下:
unsigned char uc_key[9];
unsigned char pinkey[17];
unsigned char *mask = (unsigned char *) "19?2<8276:=0839;";
Action()
{
char acTest[512];
char acTest2[512];
char* pcTest3;
int i;
char pinblock[17];
char acct[26];
char acc1[17];
char balance[12];
char seq_str[6];
int i_seq=1;
char socket_desc[10];
int handler;
int ret;
lr_load_dll("mydll.dll");
i_seq++;
sprintf(seq_str,"%.5d",i_seq);
sprintf(socket_desc,"sock%.5d",i_seq);
//char *filename="1.out";
//long filestream;
//filestream=fopen(filename,"w");
lrs_create_socket(socket_desc, "TCP", "RemoteHost=192.168.101.79:7001", LrsLastArg);
//生成发送的串
sprintf(acTest,"ABCDEA");
strcat(acTest,"1205");
strcat(acTest,"RQK");
strcat(acTest,seq_str);
strcat(acTest,seq_str);
strcat(acTest,"0000000000000000O");
//指定发送的串
lrs_set_send_buffer (socket_desc, acTest, strlen(acTest));
//发送,由于之前运行了lrs_set_send_buffer,所以这里的"buf0"参数无效
lrs_send(socket_desc, "buf0", LrsLastArg);
lrs_set_recv_timeout2(0,0);
//接收返回的串
lrs_receive(socket_desc, "buf1", LrsLastArg);
//把返回的串放到变量中
pcTest3=lrs_get_received_buffer (socket_desc, 0, -1, NULL);
//fprintf(filestream,"recv=[%s]\n",pcTest3);
memcpy(uc_key,pcTest3+18,8);
unshuffle_key(uc_key);
//lr_output_message("recv=[%s]\n",pcTest3);
lr_output_message("uc_key=[%s]\n",uc_key);
memset(pinkey,0,sizeof(pinkey));
for (i = 0; i < strlen(uc_key);i++)
{
pinkey[2*i]='3';
pinkey[2*i+1]=uc_key[i];
}
lr_output_message("pinkey=[%s]\n",pinkey);
//对返回串中的数据操作
if( (strncmp(pcTest3,"ABP",3))==0 )
{
//modadd((unsigned char *)uc_key,(unsigned char *)"35827629",8);
//lr_output_message("next uc_key=[%s]\n",uc_key);
//String header = "ABCDEA" + terminalid + tranactioncode + seq + seq + "0124011200000002C";
//header 6+4+3+5+5+17
i_seq++;
sprintf(socket_desc,"sock%.5d",i_seq);
sprintf(seq_str,"%.5d",i_seq);
sprintf(acTest2,"ABCDEA");
strcat(acTest2,"1205");
strcat(acTest2,"INQ");
strcat(acTest2,seq_str);
strcat(acTest2,seq_str);
strcat(acTest2,"0000000000000000O");
//sprintf(acTest,"ABCDEA1205INQ09046090460000000000000000O");
//track3,track2 104+37
strcat(acTest2,"999551002600007435017=1561560000000000000003000000214000000001=000000000000=000000000000=0000000274060009551002600007435017=00002202740600000");
//pinblock
strcpy(pinblock,"1205000006111111");
encrypt_pinblock((unsigned char *)pinblock,pinkey);
lr_output_message("encrypted pinblock=[%s]\n",pinblock);
strcat(acTest2,pinblock);
//account
strcpy(acct,"9551002600000000115000000");
memcpy(acc1,acct+2,16);
shuffle((unsigned char *)acc1, (const unsigned char *)uc_key,(const unsigned char *)mask, 16);
strcpy(acct,"95");
memcpy(acct+2,acc1,16);
memcpy(acct+2+16,"5000000",7);
strcat(acTest2,acct);
lrs_create_socket(socket_desc, "TCP", "RemoteHost=192.168.101.79:7001", LrsLastArg);
// handler=lrs_get_socket_handler(socket_desc);
// lr_output_message("handler=[%d]\n",handler);
ret=lrs_set_send_buffer (socket_desc, acTest2, strlen(acTest2));
lr_output_message("ret=[%d]\n",ret);
lrs_send(socket_desc, "buf0", LrsLastArg);
lrs_set_recv_timeout2(0,0);
lrs_receive(socket_desc, "buf1", LrsLastArg);
pcTest3=lrs_get_received_buffer (socket_desc, 0, -1, NULL);
//lr_output_message("recv2=[%s]\n",pcTest3);
memset(balance,0,sizeof(balance));
memcpy(balance,pcTest3+59,11);
unshuffle((unsigned char *)balance, (const unsigned char *)uc_key, (const unsigned char *)mask, 11);
lr_output_message("balance=[%0.2f]\n",atof(balance));
lrs_free_buffer(pcTest3);
}
//fclose(filestream);
return 0;
}
说明:
其实就是一个取款机的客户端,用它来压我的前置系统的。