Loadrunner 脚本开发-利用loadrunner开发Windows Sockets协议脚本
脚本开发-利用loadrunner开发Windows Sockets协议脚本
by:授客 QQ:1033553122
欢迎加入软件性能测试交流QQ群:7156436
实践举例
Socket服务端简单实现

新建Windows Sockets协议脚本:新建脚本时,协议选择“Windows Sockets”
代码组织结构:




注:
strlen
函数功能:返回字符串的字节大小
函数原型:size_t strlen( const char
*string );

运行结果:

用lrs_receive_ex函数


用lrs_receive函数

函数介绍
lrs_startup
函数功能:初始化WinSock DLL
函数原型:
int lrs_startup( int version );
参数说明:
version:Windows Socket的版本
返回值:函数执行成功则返回0,否则返回错误码
lrs_create_socket
函数功能:打开并初始化一个socket
函数原型:
int lrs_create_socket( char *s_desc, char *type, [ char*
LocalHost,] [char* peer,] [char *backlog,] LrsLastArg );
参数说明:
s_desc:还未绑定的socket的描述符,即socket名称
type: socket类型,TCP、UDP
LocalHost:可选参数,用于socket绑定的本地主机和端口,即客户端主机和端口,参数值格式:"LocalHost=
host_name/port_number",host_name可以是主机名称,也可以是ip地址。通常该参数在多网卡的情况下使用。
peer:对等的远程主机和端口号,即服务器主机和端口,参数值格式:"RemoteHost=host_name/port_number"
backlog:可选参数,等待连接队列最大长度,参数值格式:Backlog=number
LrsLastArg:标识参数列表结束的标记
返回值:函数执行成功则返回0,否则返回错误码
注:
确立一条TCP连接的过程,需要经过以下步骤:
|
操作(Operation) |
WinSock |
函数(VuGen function |
Client/Server |
|
Open socket |
socket |
lrs_create_socket |
client and server |
|
Name socket |
bind |
lrs_create_socket |
client (optional) and |
|
Prepare to associate with another |
listen |
lrs_create_socket |
server |
|
Initiate association |
connect |
lrs_create_socket |
client |
|
Complete association |
accept |
lrs_accept_connection |
server |
|
Receive/Send |
recv/send |
lrs_receive/ lrs_send |
client and server |
确立一条UDP连接的过程,需要经过以下步骤:
|
Operation |
WinSock |
VuGen function |
Client/Server |
|
Open socket |
socket |
lrs_create_socket |
client and server |
|
Name socket |
bind |
lrs_create_socket |
client and server |
|
Associate Sockets: |
recvfrom /sendto |
lrs_receive/ lrs_send |
client and server |
lrs_send
函数功能:发送数据
函数原型:
int lrs_send( char *s_desc, char *buf_desc, [char *target],
[char *flags,] LrsLastArg );
参数说明:
s_desc:已连接socket的描述符,即socket名称
buf_desc:发送缓冲区描述符号,即缓冲区名称
target:可选参数,目标主机即服务器主机名称、ip地址,参数值格式:
"TargetSocket=host:port"
flags:可选参数,接收和发送标识,指定调用方式,参数值格式:"Flags=flags"
LrsLastArg:标识参数列表结束的标记
返回值:函数执行成功则返回0,否则返回错误码
注意:
1)
如果函数没能成功发送缓冲区buffer中的所有数据,会继续尝试发送,直到超时时间,如果函数发送期间找不到可写入数据的socket,也会继续查找,直到超时。函数发送超时默认10秒,可通过lrs_set_send_timeout设置发送超时时间。
2)lrs_send发送数据成功,并不代表服务器接收成功。
lrs_set_send_timeout
函数功能:设置数据发送超时时间
函数原型:
void lrs_set_send_timeout( long sec, long u_sec
);
参数说明:
sec:以秒(second)为单位的超时时间
u_sec:以微秒(microsecond)为单位的超时时间
注意:总超时时间为 sec + u_sec
lrs_receive
函数功能:接收、读取数据
函数原型:
int lrs_receive( char
*s_desc, char *bufindex, [char *flags], LrsLastArg
);
参数说明:
s_desc:已连接socket的描述符,即socket名称
bufindex:接收缓冲区描述符号,即缓冲区名称
flags:可选参数,接收和发送标识,指定调用方式,参数值格式:"Flags=flags"
LrsLastArg:标识参数列表结束的标记
返回值:
函数执行成功则返回0,否则返回错误码。
注意:
函数执行成功并不代表接收完所有数据。如果远程服务器关闭了socket,函数执行完成不返回任何数据。
注意:
如果data.ws中设置的接收(recv)缓冲区和实际收到的数据大小不匹配,在读取未超时的情况下,函数会一直读取由socket“搬运”过来的数据,直到已读取换缓冲区大小的数据,如果读取超时则提前结束读取操作。默认的超时时间为10秒,可用lrs_set_recv_timeout
或lrs_set_recv_timeout2函数进行设置。所以data.ws中的recv需要认真设置,或者用lrs_receive_ex替代。
如果接收的数据和设置的缓冲区大小不一致,会报类似如下日志,并继续运行
Action.c(10): Mismatch in buffer's length (expected 11
bytes, 10 bytes actually received, difference in 1
bytes)
lrs_receive_ex
函数功能:lrs_receive的扩展,接收指定长度的数据
函数原型:
int lrs_receive_ex( char
*s_desc, char *bufindex, [char *flags,] [char
*size,] [char *terminator,] [char *mismatch,]
[char *RecordingSize,] LrsLastArg);
参数说明
s_desc:已连接socket的描述符,即socket名称
bufindex:发送缓冲区描述符号,即缓冲区名称
flags:可选参数,接收和发送标识,指定调用方式,参数值格式:"Flags=flags"
size:指定接收的字节数,参数值格式:"NumberOfBytesToRecv=xx",仅用于TCP socket
terminator:标记待接收数据块的结束字符(串),参数值格式:StringTerminator= value" or
"BinaryStringTerminator= value",仅用于TCP socket
mismatch:大小、内容不匹配的判断标准,参数值格式:"Mismatch= value"。参数可选值:MISMATCH_SIZE (默认)
或 MISMATCH_CONTENT
RecordingSize:录制期间接收的缓冲区大小,参数值格式:"RecordingSize"。仅用于TCP socket。
LrsLastArg:标识参数列表结束的标记
lrs_set_recv_timeout
函数功能:设置接收数据超时时间。
函数原型:
void lrs_set_recv_timeout( long sec, long u_sec
);
参数说明:
sec:以秒(second)为单位的超时时间,默认10s
u_sec:以微秒(microsecond)为单位的超时时间
lrs_disable_socket
函数功能:禁用socket的某个操作,注意不是网上说的,断开socket
函数原型:
int lrs_disable_socket( char *s_desc, int operation
);
参数说明:
s_desc A descriptor
identifying a socket.
operation:需要禁用的操作:SEND, RECEIVE,
SEND-RECEIVE。比如,如果需要禁用发送数据传递
DISABLE_SEND,需要禁用所有活动(接收和发送),传递
DISABLE_SEND_RECV
lrs_close_socket
函数功能:关闭socket
函数原型:
int lrs_close_socket( char *s_desc );
参数描述:
s_desc:已连接socket的描述符,即socket名称
返回值:函数执行成功则返回0,否则返回错误码
注意:
对于TCP socket,lrs_close_socket函数会刷新所有还没发送的数据。
cleanup
函数功能:
终止WinSock DLL的使用。通常用于在脚本vuser_end action。
函数原型:
int lrs_cleanup( );
注意:不是所有WinSocket应用都会调用该函数
Loadrunner 脚本开发-利用loadrunner开发Windows Sockets协议脚本的更多相关文章
- Loadrunner 脚本开发-利用Loadrunner生成Web service测试脚本
脚本开发-利用Loadrunner生成Web service测试脚本 1.选择协议--Web Service,如下图 2.导入服务 入口1:点击Manage Services ->弹出窗中选择“ ...
- 使用LR编写windows sockets协议xml报文格式脚本实战
以下是测试脚本Demo: #include "lrs.h" Action() { char * resultCode;//结果代码 char * time; //系统时间 char ...
- C# Windows Sockets (Winsock) 接口 (转)
在.Net中,System.Net.Sockets 命名空间为需要严密控制网络访问的开发人员提供了 Windows Sockets (Winsock) 接口的托管实现.System.Net 命名空间中 ...
- 性能测试总结工作总结-基于WebService协议脚本 内置函数手动编写
LoadRunner基于WebService协议脚本 WebService协议脚本有三种生成方式,一种是直接通过LoadRunner导入URL自动解析生成:一种是使用LoadRunner内置函数手动编 ...
- Loadrunner 脚本开发-利用web_submit_data函数实现POST请求
脚本开发-利用web_submit_data函数实现POST请求 by:授客 QQ:1033553122 概述 web_link()和web_url()函数都是页面访问型函数,实现HTTP请求中的 ...
- Loadrunner 脚本开发-利用web_custom_request函数进行接口测试
脚本开发-利用web_custom_request函数进行接口测试 by:授客 QQ:1033553122 一.POST + JSON格式参数 例: web_custom_request(" ...
- 老李分享:Eclipse中开发性能测试loadrunner脚本
老李分享:Eclipse中开发性能测试loadrunner脚本 前篇我分享了如何用loadrunner搭建javauser的性能测试脚本环境,本次我来告诉大家如何在eclipse开发loadrunne ...
- 品味性能之道<九>:利用Loadrunner编写socket性能测试脚本简述
一.概述 Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作. 二.socket概述 ...
- 利用loadrunner代理方式,录制手机APP脚本
利用loadrunner代理方式录制手机(iPhone.android)应用程序HTTP脚本 工具/原料 loadrunner 智能手机 方法/步骤 利用笔记本网卡或者类似360随身wifi,在安 ...
随机推荐
- 网页的异步请求(Ajax)
JS原生Ajax操作(XMLHttpRequest) GET请求 var xmld=new XMLHttpRequest(); xmld.open("GET","wan. ...
- [干货,阅后进BAT不是梦]面试心得与总结---阿里、小米、腾讯
之前实习的时候就想着写一篇面经,后来忙就给忘了,现在找完工作了,也是该静下心总结一下走过的路程了,我全盘托出,奉上这篇诚意之作,希望能给未来找工作的人一点指引和总结, 也希望能使大家少走点弯路 , 如 ...
- Pulsar-Producer实现简介
“Pulsar is a distributed pub-sub messaging platform with a very flexible messaging model and an intu ...
- Python爬虫、自动化常用库&帮助文档URL
一.Python下载地址 Windows终端Cmder.exe下载--->http://cmder.net/ Python下载(Windows) ---> https://w ...
- JavaEE 要懂的小事:一、图解Http协议
Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter ...
- jvm详情——2、Java对象在jvm中的大小
Java对象的大小 基本数据的类型的大小是固定的,这里就不多说了.对于非基本类型的Java对象,其大小就值得商榷.在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任 ...
- 插槽slot
主要是让组件的可扩展性更强.1.匿名slot使用 //定义组件my-component <div class="myComponent"> <slot>&l ...
- Java——String对象
前言 实际上任何语言都没有提供字符串这个概念,而是使用字符数组来描述字符串.Java里面严格来说也是没有字符串的,在所有的开发里面字符串的应用有很多,于是Java为了应对便创建了String类这个字符 ...
- MyEclipse 皮肤、主题、背景色
第一步:打开myeclipse--->help--->install from site--->Add将路径粘贴在这里.等待安装颜色主题.https://raw.github.com ...
- Jenkins入门之任务基本操作
首先先简单讲一下Jenkins构建任务各种图标的含义 我的主界面有以下构建任务,这里前两列都是图标,第一列为构建的状态,前面已经讲过蓝色代表成功,红色代表失败.当然那是针对一次构建,一个构建任务可能有 ...