51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1848|回复: 2
打印 上一主题 下一主题

[原创] socket加压测试

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2011-11-16 18:07:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
action代码如下
#include "lrs.h"

Action()
{

                int i, j = 0;                        //循环计数
                char socket[10];                //变量socket
                char str[1];                        //保存转换成char型的i值
                char Cstr[6];
                char CCstr[6];
                char CCCstr[6];
                char SerialNo[40];
                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连接,数据没有接收到
求教是什么问题
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2011-11-17 09:35:18 | 只看该作者
..自己顶个
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2011-11-17 12:27:56 | 只看该作者
问题原因应该是 从文本里读取流水号出错
可是不明白,在VUSER里单步,迭代运行都可以
就是放到CONTROLLER里不发送报文
有没有高人 解答啊...
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-15 22:15 , Processed in 0.070662 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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