chronojly 发表于 2011-11-16 18:07:45

socket加压测试

action代码如下
#include "lrs.h"

Action()
{

                int i, j = 0;                        //循环计数
                char socket;                //变量socket
                char str;                        //保存转换成char型的i值
                char Cstr;
                char CCstr;
                char CCCstr;
                char SerialNo;
                char *UserBuffer, *UserBufferHex;

                //文件保存路径
                char *filename = "d:\\serialno.txt";
                int pSerialNo, read = 0;




                //是否需要设置集合点
      //lr_rendezvous("集合点");

                //循环生成socket通信
                for (i = 0; i < 10; i++) {

                        //*******************生成变量**********************//
                        //变量初始
                        strcpy(socket, "socket");

                        //合并生成程序需要的值
                        //itoa(int, string, 进制基数)数值型转换成字符型,并保存到变量中
                        //strcat字符串合并
                        strcat(socket, itoa(i, str, 10));

                        //*****************
                        //从txt中读取流水号,处理后,再保存
                       
                        /*打开文本*/
                        read = (int)fopen(filename, "r");
                        while (feof(read) == 0) {
                                fscanf(read, "%d", &pSerialNo);
                        }
                        fclose(read);

                        //数字转换成字符
                        itoa(pSerialNo, Cstr, 10);
                        pSerialNo = pSerialNo + 1;
                        itoa(pSerialNo, CCCstr, 10);

                        lr_output_message("流水号:%s", CCCstr);
                        /*写入文本*/
                        read = (int)fopen(filename, "w");
                        fprintf(read, "%s", CCCstr);
                        fclose(read);
                        //*****************


                        //必须初始serialno,否则无法合并字符串
                        strcpy(SerialNo, "");

                        //前置0
                        for (j = 0; j < 6 - strlen(Cstr); j++) {
                                strcat(SerialNo, "0");
                               
                        }

                        //合成流水号
                        strcat(SerialNo, itoa(pSerialNo, CCstr, 10));


/*
                        //将数值部分16进制,并返回
                        for (j = 0; j < strlen(Cstr); j++) {
                                strncpy(CCstr, Cstr + j, 1);
                                UserBufferHex = lrs_decimal_to_hex_string(socket, CCstr, 1);
                                strcat(SerialNo, UserBufferHex);
                        }
*/
                        //将流水号传给参数化,即data.ws里
                        lrs_save_param_ex(socket, "user", SerialNo, 0, strlen(SerialNo), NULL, "SerialNo");

            //*******************程序执行**********************//
                        //开始登录事务
                        lr_start_transaction("模拟消费");

                        //建立连接
                        //lrs_create_socket(socket, "TCP", "RemoteHost=<IP>",LrsLastArg);

                        //发送登录请求数据包
                        lrs_send(socket, "buf3", LrsLastArg);
      

                        //接收服务器返回的数据包
                        lrs_receive(socket, "buf1", LrsLastArg);

                        //从返回报文中截取某长度的数据保存到参数中
                        lrs_save_param_ex(socket, "received", "buf1", 224, 2, "ascii",
"param0");
                        lr_output_message("返回码: %s", lr_eval_string
("<param0>"));
       
                        //strcmp字符串比较
                        if (strcmp(lr_eval_string("<param0>"), "00") == 0)        {
                                lr_output_message("消费成功!");
                                lr_end_transaction("模拟消费", LR_PASS);
                        }
                        else        {
                                lr_output_message("消费失败!");
                                lr_end_transaction("模拟消费", LR_FAIL);
                        }       

                        //关闭连接
                        //lrs_close_socket(socket);

                }
                                               
                                       
/*
                lrs_get_last_received_buffer("socket0", &recvbuf, &recvlen);

                //检测返回字节数是否符合预期长度
      if(recvlen == 415)
                        lr_end_transaction("模拟登录", LR_PASS);
                else
                        lr_end_transaction("模拟登录", LR_FAIL);       
*/



      return 0;
}

vuser.ini和vuser.end里分别是建立SOCKET连接和关闭连接的代码,就不贴了
data.ws里的报文内容应该不会有错,所以不贴了
目的是实现同时有10个连接并发操作
上面代码在Vuser里运行正常,没有报错
但放到CONTROLLER里执行无法执行
controller里设置的是每10秒增加一个VUSER,一共增加10个
运行的时候,VUSER都显示RUNNING状态
SERVER端查看,只有SOCKET连接,数据没有接收到
求教是什么问题

chronojly 发表于 2011-11-17 09:35:18

..自己顶个

chronojly 发表于 2011-11-17 12:27:56

问题原因应该是 从文本里读取流水号出错
可是不明白,在VUSER里单步,迭代运行都可以
就是放到CONTROLLER里不发送报文
有没有高人 解答啊...
页: [1]
查看完整版本: socket加压测试