loadrunner使用socket协议来实现客户端对服务器产生压力实例。(通过发送心跳包,达到连接多个客户端的目的)
#include "lrs.h"
vuser_init()
{
char *ip;
int handler;
//编写获取LR分配的Vuser IP函数,将IP保存在ip变量中。
ip=lr_get_vuser_ip();
if(ip)
lr_vuser_status_message("the ip address is %s:",ip);
else
lr_vuser_status_message("IP spooler disabled");
//输出获取到lr分配的ip值。
lr_output_message("the current assign ip is :%s",ip);
//将ip变量保存到一个参数中,并输出该参数的值。
lr_save_string(ip,"VirtualIP");
lr_output_message( lr_eval_string("{VirtualIP}"));
//在lrs_create_socket函数中localhost使用<>:<>形式来参数化
lrs_create_socket("socket0","TCP","LocalHost=<VirtualIP>:<RandomPort>","RemoteHost=5.5.5.5:8888",LrsLastArg);
//输出socket句柄号
handler=lrs_get_socket_handler("socket0");
lr_message("The current handler of sokcet0 is: %d",handler);
lrs_startup(257);
return 0;
}
########################################################################
#include "lrs.h"
Action()
{
char *ReturnValue_Remote;
char *ReturnPort_Remote;
char *ReturnValue_Local;
char *ReturnPort_Local;
char *AcutalBuffer_Send;
int BufferSize_Send;
char *AcutalBuffer_Revc;
int BufferSize_Revc;
int flag_send;
int flag_revc;
//int match_length;
//###########获取远程主机及本地主机IP及端口号################
ReturnValue_Remote=lrs_get_socket_attrib("socket0",REMOTE_ADDRESS);
ReturnPort_Remote=lrs_get_socket_attrib("socket0",REMOTE_PORT);
ReturnValue_Local=lrs_get_socket_attrib("socket0", LOCAL_ADDRESS);
ReturnPort_Local=lrs_get_socket_attrib("socket0",LOCAL_PORT);
lr_start_transaction("获取远程主机地址及端口");
lr_output_message("this RemoteHost address is %s :", ReturnValue_Remote);
lr_output_message("this RemoteHost Port is %s : ",ReturnPort_Remote);
lr_end_transaction("获取远程主机地址及端口", LR_AUTO);
lr_start_transaction("获取本机地址及端口");
lr_output_message("this LocalHost address is %s :", ReturnValue_Local);
lr_output_message("this LocalHost Port is %s : ",ReturnPort_Local);
lr_end_transaction("获取本机地址及端口", LR_AUTO);
//##############发送心跳包##########################
lr_think_time(3);
lr_start_transaction("发送数据包");
lrs_set_send_timeout(3,0);
flag_send=lrs_send("socket0","buf0",LrsLastArg);
lr_end_transaction("发送数据包", LR_AUTO);
if (flag_send==0)
{
lr_output_message("buf0缓冲数据发送成功!");
}
else
lr_output_message("buf0缓冲数据发送超时!");
//##############获取发送BUFF数据及大小###################
lr_start_transaction("获取BUFF数据大小及内容");
lrs_get_buffer_by_name("buf0",&AcutalBuffer_Send,&BufferSize_Send);
lr_output_message("buf0 size is %d :",BufferSize_Send);
lrs_save_param_ex("socket0","user",AcutalBuffer_Send,0,BufferSize_Send,"ascii","param_send");
lr_output_message("the contect buf0 is %s :",lr_eval_string("<param_send>"));
lr_end_transaction("获取BUFF数据大小及内容", LR_AUTO);
lrs_free_buffer("AcutalBuffer_Send");
//#####################接收数据包###########################
// lrs_set_recv_timeout(15,0);
lr_start_transaction("接收数据包");
lrs_set_recv_timeout2(15,0);
flag_revc=lrs_receive("socket0","buf1",LrsLastArg);
lr_end_transaction("接收数据包", LR_AUTO);
if (flag_revc==0)
{
lr_output_message("接收数据成功!");
}
else
lr_output_message("接收数据失败!");
//#################获取接收BUFF大小及内容#######################
lr_start_transaction("获取接收数据大小及内容");
lrs_get_last_received_buffer("socket0",&AcutalBuffer_Revc,&BufferSize_Revc);
lr_output_message("the size of last buffer is %d :",BufferSize_Revc);
lrs_save_param_ex("socket0","user",AcutalBuffer_Revc,0,BufferSize_Revc,"ascii","param_revc");
lr_output_message("the contect of last received buffer is %s :",lr_eval_string("<param_revc>"));
lr_end_transaction("获取接收数据大小及内容", LR_AUTO);
if (BufferSize_Revc==11) {
lr_output_message("接收到的数据长度为心跳包长度11个字节!");
}
else
lr_output_message("心跳包长度不相等");
//lrs_free_buffer("AcutalBuffer_Revc");
if (BufferSize_Revc>1024) {
lr_message("接收过来数据过大,不为心跳包数据,故关闭SOCKET");
lrs_free_buffer("AcutalBuffer_Revc");
//lrs_close_socket("socket0");
}
lr_output_message("当前第%s次迭代已结束",lr_eval_string("<lteration>"));
lr_message("当前第%s迭代已结束,系统输出时间为:%s",lr_eval_string("<lteration>"),lr_eval_string("<localtime_now>"));
return 0;
}
##############################################
#include "lrs.h"
vuser_end()
{
lrs_disable_socket("socket0",DISABLE_SEND);
lrs_close_socket("socket0");
lrs_cleanup();
return 0;
}
##################################################
;WSRData 2 1
send buf0 11
"\x41\x45\x48\x50\x0B\x00\x00\x00\x01\xFF\xFF"
recv buf1 11
-1
loadrunner使用socket协议来实现客户端对服务器产生压力实例。(通过发送心跳包,达到连接多个客户端的目的)的更多相关文章
- 自行控制loadrunner的socket协议性能测试 (转)
一前言 二任务的提出 三实现方案讨论 四技术要点讲解 如何开始录制一个最简单的收发数据包脚本 写日志文件 一行一行读数据包文件 字符串转换为十六进制数据包 发送自己定义的数据包 接收数据包到自定义缓冲 ...
- Loadrunner 中socket协议RecvBuffer接收到数据长度为空
socket通讯,有两种方式,一种是建立长连接(TCP),建立后,不停的发送,接收.另外一种是建立短连接(UDP),建立连接,发送报文,接收响应,关闭连接.两种方式 server的开销不同. 今天出现 ...
- LoadRunner编写Socket协议脚本方法
本文主要介绍使用LoadRunner手工编写Windows Socket协议测试脚本的方法. 通过LoadRunner编写Windows Socket协议测试脚本,总体说来,比较简单.就像把大象放进冰 ...
- Loadrunner中socket协议中的三个关联函数
这3个函数其实都可以动态获取运行中收到的数据包中的数据,只要跟在要获取的收取数据包脚本后面即可.其中:lrs_save_searched_string和lrs_save_param如果buf_desc ...
- 模拟客户端向服务器发起请求(从Fiddler抓包到Jmeter接口测试)
一.安装Fiddler 二.配置 在菜单栏Tools->Fiddler Options->Connections,勾选Allow remote computers to connect,默 ...
- loadrunner socket协议问题归纳(3)
摘要:通过实例讲解loadrunner中的socket协议性能测试的一种测试方法,如何不依赖loadrunner既定规则,自行控制收发数据包 关键词:Loadrunner,socket,自行控制,收发 ...
- [转] Socket心跳包异常检测的C语言实现,服务器与客户端代码案例
转载自:zxh2075的专栏 在Socket心跳机制中,心跳包可以由服务器发送给客户端,也可以由客户端发送给服务器,不过比较起来,前者开销可能较大.本文实现的是由客户端给服务器发送心跳包,服务器不必返 ...
- Socket心跳包异常检测的C语言实现,服务器与客户端代码案例
在Socket心跳机制中,心跳包可以由服务器发送给客户端,也可以由客户端发送给服务器,不过比较起来,前者开销可能较大.本文实现的是由客户端给服务器发送心跳包,服务器不必返回应答包,而是通过判断客户在线 ...
- java Socket 长连接 心跳包 客户端 信息收发 demo
今天写了个socket的测试小程序,代码如下 import java.io.IOException; import java.io.InputStream; import java.io.Output ...
随机推荐
- xampp版本和具体的php,mysql版本的对应
在国外网上查找到具体的xampp版本与php,mysql版本的对应关系,特此记录.以便需要的人使用.原文链接如下: http://code.stephenmorley.org/articles/xam ...
- Gdiplus 贴图(助记) -------------------拖动整个对话框
最简单的两种方法: 一.使WM_NCHITTEST始终返回HTCAPTION,也就是欺骗系统让他以为这是菜单栏. LRESULT CDemoDlg::OnNcHitTest(CPoint point) ...
- java设计模式(三)
单例模式在一个jvm中有且仅有一个对象(1)内部静态类实现 class Singleton{ /*构造方法私有 防止实例化*/ private Singleton(){}; public static ...
- 第一章 flume架构介绍
1.flume概念介绍 1.1 常见的分布式日志收集系统 Scribe是facebook开源的日志收集系统,在facebook内部已经得到大量的 ...
- 第一百一十三节,JavaScript文档对象,DOM基础
JavaScript文档对象,DOM基础 学习要点: 1.DOM介绍 2.查找元素 3.DOM节点 4.节点操作 DOM(Document Object Model)即文档对象模型,针对HTML和XM ...
- js--面向对象继承
Object.create()方法可以传入一个原型对象,并创建一个基于该原型的新对象,但是新对象什么属性都没有. // 原型对象: var Student = { name: 'Robot', hei ...
- 说说SACC2016第八届架构师大会
每年这方面的会议很多,不知不觉已经连续举办八年了.一届比一届办的有质量,规模越大.今年也如约而至.2016-10-27在北京万达索菲特酒店.4000多人规模,云集各领域顶尖架构师,运维,云计算,技术专 ...
- jQuery第九章
第九章 jQuery Mobile 一.HTML5.0简介 谈到Web设计,我们经常把Web分为三个层: (1)结构层:(2)表现层:(3)行为层. 对应的技术分别是: (1)HTML:(2)CSS: ...
- swift 学习线路
//从(GCD,动画,通知,KVO..) 到闭包 到单子 再到 promise ,再到 reactive //从可选类型 到可选绑定 ,隐私可选解包 ,动态绑定,nil 聚合运算符 再到可选链 再到S ...
- navicat 连接远程mysql
01putty中session---远程地址(程序访问的域名) ,端口22--load加载进来 02SSH--Auth-Tunnels(隧道)-- putty端口映射SSH--Auth-Tunnels ...