zoukankan      html  css  js  c++  java
  • Loadrunner 脚本开发-利用loadrunner开发Windows Sockets协议脚本

    脚本开发-利用loadrunner开发Windows Sockets协议脚本

    by:授客 QQ1033553122

    欢迎加入软件性能测试交流QQ群:7156436

     

    实践举例

    Socket服务端简单实现

    新建Windows Sockets协议脚本:新建脚本时,协议选择“Windows Sockets

    代码组织结构:

     

    Loadrunner <wbr>脚本开发-利用loadrunner开发Windows <wbr>Sockets协议脚本

    注:

    strlen

    函数功能:返回字符串的字节大小

     

    函数原型:size_t strlen( const char *string );

     

     

    运行结果:

    lrs_receive_ex函数

    Loadrunner <wbr>脚本开发-利用loadrunner开发Windows <wbr>Sockets协议脚本

     

    lrs_receive函数

    Loadrunner <wbr>脚本开发-利用loadrunner开发Windows <wbr>Sockets协议脚本

    函数介绍

    lrs_startup

    函数功能:初始化WinSock DLL

     

    函数原型:

    int lrs_startup( int version );

     

    参数说明:

    versionWindows 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类型,TCPUDP

    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 server

    Prepare to associate with another socket

    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: Receive/Send

    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设置发送超时时间。

    2lrs_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 socketlrs_close_socket函数会刷新所有还没发送的数据。

     

    cleanup

    函数功能:

    终止WinSock DLL的使用。通常用于在脚本vuser_end action

     

    函数原型:

    int lrs_cleanup( );

     

    注意:不是所有WinSocket应用都会调用该函数

  • 相关阅读:
    Linux系统类别
    ST-GCN基于skeleton的动作识别
    (gcc/g++)/clang/cl编译器
    羽毛球经典教材范例
    opencv批量读取图片
    十六、mysql 变量
    十五、mysql 存储过程
    十四、mysql 视图
    十三、mysql TCL语言
    十二、mysql 标识列
  • 原文地址:https://www.cnblogs.com/shouke/p/10157667.html
Copyright © 2011-2022 走看看