logo资料库

LoadRunner Winsocket协议知识总结.pdf

第1页 / 共58页
第2页 / 共58页
第3页 / 共58页
第4页 / 共58页
第5页 / 共58页
第6页 / 共58页
第7页 / 共58页
第8页 / 共58页
资料共58页,剩余部分请下载后查看
LoadRunner Winsocket 协议知识总结                  tian.yuanwen@dcfs.digitalchina.com                    LoadRunner Winsocket 协议知识总结                                测试中心    田渊文    2007 年 11 月 9 日                1   
LoadRunner Winsocket 协议知识总结                  tian.yuanwen@dcfs.digitalchina.com    目    录    序 ...................................................................................................................................................... 1  修正版说明 ....................................................................................................................................... 2  一、函数........................................................................................................................................... 3  1.基本函数 ............................................................................................................................. 3  lrs_accept_connection  接受侦听套接字连接 ................................................................ 3  lrs_close_socket  关闭打开的套接字 .............................................................................. 3  lrs_create_socket  初始化套接字..................................................................................... 4  lrs_disable_socket  禁用套接字操作 ............................................................................... 4  lrs_exclude_socket  重播期间排除套接字 ...................................................................... 5  lrs_get_socket_attrib  获取套接字属性 ........................................................................... 6  lrs_get_socket_handler  获取指定套接字的套接字句柄 ............................................... 6  lrs_length_receive  接收来自指定长度的缓冲区的数据 ............................................... 7  lrs_length_send  向流套接字发送指定长度的缓冲区数据 ........................................... 7  lrs_receive  接收来自套接字的数据 ............................................................................... 7  lrs_receive_ex  接收指定长度的数据报或流套接字 ...................................................... 8  lrs_send  将数据发送到数据报上或流套接字中 ........................................................... 9  lrs_set_receive_option  设置套接字接收选项 .............................................................. 10  lrs_set_socket_handler  为指定的套接字设置处理句柄 ............................................. 11  lrs_set_socket_options  设置套接字选项 ...................................................................... 12  2.缓冲区函数 ....................................................................................................................... 13  lrs_free_buffer  释放分配给缓冲区的内存 ................................................................... 13  lrs_get_buffer_by_name  从数据文件中获取缓冲区及其大小 ................................... 13  lrs_get_last_received_buffer  获取套接字上最后接收到的缓冲区数据及其大小 ..... 14  lrs_get_last_received_buffer_size  获取套接字上接收到的最后一个缓冲区的大小 . 16  lrs_get_received_buffer  获取指定长度的最后接收到的缓冲区数据 ......................... 16  lrs_get_static_buffer  获取静态缓冲区或其一部分...................................................... 17  lrs_get_user_buffer  获取套接字的用户数据的内容 ................................................... 18  lrs_get_user_buffer_size  获取套接字的用户缓冲区的长度 ....................................... 19  lrs_set_send_buffer  指定要在套接字上发送的缓冲区 ............................................... 19  3.环境函数 ........................................................................................................................... 20  lrs_cleanup  终止  Windows  套接字  DLL  的使用 ....................................................... 20  lrs_startup  初始化  Windows  套接字  DLL .................................................................. 20  4.关联语句函数 ................................................................................................................... 21  lrs_save_param  将静态或接收到的缓冲区(或缓冲区部分)保存到参数中 .......... 21    2 
LoadRunner Winsocket 协议知识总结                  tian.yuanwen@dcfs.digitalchina.com    lrs_save_param_ex  将用户、静态或接收到的缓冲区(或缓冲区部分)保存到参数 中 ..................................................................................................................................... 22  lrs_save_searched_string  在静态或接收到的缓冲区中搜索出现的字符串,将出现字 符串的缓冲区部分保存到参数中 ................................................................................. 23  5.转换函数 ........................................................................................................................... 25  lrs_ascii_to_ebcdic  将缓冲区数据从  ASCII  格式转换成  EBCDIC  格式 .................... 25  lrs_decimal_to_hex_string  将十进制整数转换为十六进制字符串 ............................ 26  lrs_ebcdic_to_ascii  将缓冲区数据从 EBCDIC  格式转换成 ASCII  格式 ...................... 26  lrs_hex_string_to_int  将十六进制字符串转换为整数 ................................................. 27  6.超时函数 ........................................................................................................................... 28  lrs_set_accept_timeout  为接受套接字设置超时 ......................................................... 28  lrs_set_connect_timeout  为连接到套接字设置超时 .................................................. 28  lrs_set_recv_timeout  为接收套接字上的初始预期数据设置超时 ............................. 29  lrs_set_recv_timeout2  为建立连接后接收套接字上的预期数据设置超时 ............... 29  lrs_set_send_timeout  为发送套接字数据设置超时 .................................................... 30  7.Receive and Send Flags ..................................................................................................... 31  二、LRS 错误码 .............................................................................................................................. 31  三、常见问题 ................................................................................................................................. 39  1.一个完整的 VuGen 脚本(Winsocket TCP) .................................................................. 39  2.VuGen 脚本格式说明 ....................................................................................................... 46  3.  脚本的参数化 .................................................................................................................... 47  3.data.ws 中的 send 和 recv ................................................................................................ 47  4.Mismatch 的问题 .............................................................................................................. 47  5.lrs_receive 等待时间太长的问题 .................................................................................... 48  6.一个对上传数据处理的例子 ........................................................................................... 48  7.从文件中读取数据到用户缓冲区 ................................................................................... 49  8.10053 错误说明................................................................................................................ 51  9.编码方式 ........................................................................................................................... 51  四、本文档遗留问题 ..................................................................................................................... 51  五、知识链接 ................................................................................................................................. 52  1.带外数据(out‐of‐band,OOB) .......................................................................................... 52  2.阻塞和非阻塞(blocking 和 non‐blocking) .................................................................. 52  3.TCP_NODELAY 和 TCP_CORK ............................................................................................ 53  4.什么是句柄 ....................................................................................................................... 54  六、结束语 ..................................................................................................................................... 55    3 
LoadRunner Winsocket 协议知识总结                  tian.yuanwen@dcfs.digitalchina.com      序  初次接触 LoadRunner  Windows  Sockets 协议是在做 Tuxedo 客户端软加密性能测试的时 候,由于从来没有接触过 socket 协议,因此当时碰到了很多的问题,不过过程虽然有点曲 折,但在大家的帮助下还是问题都得到了很好的解决。当时就想对一些问题总结一下,不过 想想自己了解到的东西还是太少了,等再多了解一些再说吧,免得班门弄斧,贻笑大方。幸 运的是因项目需要,很快就又有机会接触到 LR 的 Socket 协议。在后来的测试过程中,确实 对 socket 协议的脚本编写有了更深的了解,接触到了更多的函数,当然也遇到了一些新问 题,而解决问题的过程本身又是一个深入学习的过程。  最近也有一些时间来学习一些自己想学的东西,便想着能整理一下 LR  Socket 的相关内 容,一是为自己理清一下思路以备忘(本人记性很不好,呵呵),二是在整理过程中也得到 了大家的认可。因此最后决定将原本随便整理一下的想法修正一下,就是希望能系统一点, 把所有的函数和曾经遇到过的问题都写出来,在共享的基础上能够共同探讨。但是由于本人 在技术上本就是一只菜鸟,再加上 English 也不怎么样,因此花了比预期更多的时间,甚感 惭愧。  其实这些内容只能算是铺个底吧,很多细节性的问题还需要大家一块探讨,在实践中进 行验证。由于本人水平有限,文中纰漏甚至错误之处在所难免,还望大家不吝指正。  在此向所有在工作中帮助过我的同事们表示衷心的感谢!                                  1 
LoadRunner Winsocket 协议知识总结                  tian.yuanwen@dcfs.digitalchina.com        修正版说明  由于时间关系,1.0 版中存在很多不足,很多地方解释的不够清楚,本次修正及补充的 内容主要包括以下几个方面:      1、对文档中的一些错字、别字进行了校正;  2、对文档中的绝大多数函数进行了较为详细的补充说明及用法;  3、对文档中涉及到的所有脚本实例进行了调试(LoadRunner8.0 下)并全部通过;  4、“常见问题”中增加了一个从文件中读取数据的方法介绍;  5、增加了“知识链接”部分,旨在加深对相关函数的理解。  由于本人水平有限,编写这个文档花了较多的时间,到现在总算可以正式发布了。虽然 是修正版,但文档中也难免一些纰漏或错误,特别是对 lrs_length_receive 和 lrs_length_send 两个函数还是没有彻底搞清楚,这也是我最为遗憾之处,对于文档的完整性也是一个缺憾, 真诚地希望这方面的高手能给予指点。    其实我编写此文档的初衷是很简单的,就是希望在整理、总结的过程中能够加深对这方 面知识的理解和掌握,后来此想法得到了项目组同事们的大力支持,于是就希望能写得完整 一点,在此也对他们再次表示衷心地感谢!现在这个文档可以说是基本完成了,如果说要给 自己定位的话,我觉得更多的程度上自己只是一个资源整合者,因为很多知识点前辈们都已 经总结得很好了,只是没有人去整合、去归纳(也可能是我们没有找到而已),而本文档的 编写就是完成了这样一个任务,只是在其中融入了我自己的实践而已。                2 
LoadRunner Winsocket 协议知识总结                  tian.yuanwen@dcfs.digitalchina.com    一、函数  1.基本函数  lrs_accept_connection  接受侦听套接字连接    格式:    int lrs_accept_connection ( char *old_socket, char *new_socket );  参数说明:      old_socket:  被侦听的套接字标识符,如 socket0。  new_socket:  侦听到请求时建立的新套接字标识符,如 socket1。  返回值:    成功返回 0。  用法:    lrs_accept_connection(“socket0”,”socket1”);  函数说明:    函数从 old_socket 上的挂起连接队列中取出第一个连接,使用相同属性创建新的套接 字。原来的套接字对于其他连接仍然可用。    实际的侦听机制是:当 accept 函数监视的 old_socket 收到连接请求时,old_socket 执行 体将建立一个新的 socket 连接(标识符为 new_socket),收到服务请求的初始 socket(即 old_socket)仍可以继续在以前的  socket 上监听,同时可以在新的 socket 描述符上进行数据 传输操作。    lrs_close_socket  关闭打开的套接字    格式:    int lrs_close_socket ( char *s_desc );  参数说明:    s_desc:  已打开的套接字标识符。  返回值:    成功返回 0,否则返回失败错误码。  用法:  lrs_close_socket(“socket0”);        3 
LoadRunner Winsocket 协议知识总结                  tian.yuanwen@dcfs.digitalchina.com  lrs_create_socket  初始化套接字      格式:  int  lrs_create_socket  (  char  *s_desc,  char  *type,  [  char*  LocalHost,]  [char*  peer,]  [char  *backlog,] LrsLastArg );  参数说明:        S_desc:  要初始化的套接字标识符,如 socket0。  type:  套接字类型,有 TCP 和 UDP 两种。  LocalHost:  绑定套接字的本地地址、端口,如 LocalHost=4002,也可以在端口前面加上 本机名称或 IP 地址,如 LocalHost=overn:4002,或 LocalHost=168.3.4.127:4002。可选。        peer:  处理套接字请求的远程机端口,如 RemoteHost=168.3.1.230:6666。可选。  backlog:  请求连接队列的最大长度,如 backlog=20,可选。  LrsLastArg:  参数结束标志  返回值:    初始化成功返回 0;如果是 VuG 错误则返回 VuG 错误码,如果是套接字错误则返回 Windows 套接字错误码。错误码详见第三部分。  用法:      lrs_create_socket("socket0", "UDP", "LocalHost=4002",    LrsLastArg);  lrs_create_socket("socket0", "TCP", "RemoteHost=168.3.1.230:6666",    LrsLastArg);  函数说明:    lrs_create_socket 函数用来初始化一个套接字。该函数通过执行 socket 命令来打开一个 新的套接字连接。如果提供 LocalHost 参数它将执行 bind 命令来绑定该套接字;如果指定 peer 参数它将执行 connect 命令和远端主机建立一个连接;如果提供 backlog 参数将会执行 listen 命令来侦听该套接字。Backlog 对队列中等待服务的请求的数目进行了限制,大多数系统缺 省值为 20。如果一个服务请求到来时,请求队列已满,该 socket 将拒绝连接请求,客户端 将会收到一个出错信息  指定 LocalHost 时可以在端口前加上主机名(如"LocalHost=overn:80"),如果主机的 IP 地 址是绑定的也可以指定为它的 IP 地址,如"LocalHost=168.3.4.127:6666"。  该函数在客户端或服务器端的 Windows  Socket 会话期间都会被自动记录,如果是客户 端会话则 peer 和 port 两个参数会被记录,如果是服务器端则会记录 port 和 backlog。    lrs_disable_socket  禁用套接字操作    格式:    4 
LoadRunner Winsocket 协议知识总结                  tian.yuanwen@dcfs.digitalchina.com      int lrs_disable_socket ( char *s_desc, int operation );  参数说明:      s_desc:  要禁用的套接字标识符。  operation:  禁用的操作类型,有 SEND,RECEIVE,SEND‐RECEIVE 三种。  返回值:    成功返回 0,否则返回失败错误码。  用法:  lrs_diable_socket(“socket0”,DISABLE_SEND);      lrs_exclude_socket  重播期间排除套接字    格式:    int lrs_exclude_socket ( char *s_desc );  参数说明:    s_desc:  要排除的套接字标识符  返回值:  用法:  lrs_exclude_socket("socket1");  lrs_create_socket("socket0", "TCP", "RemoteHost=168.3.1.230:6666",    LrsLastArg);  lrs_set_recv_timeout2(1,0);    lrs_receive("socket0", "buf0", LrsLastArg);  lrs_send("socket0", "buf1", LrsLastArg);  lrs_receive("socket0", "buf2", LrsLastArg);  /****以下所有 socket1 的操作都将被忽略****/  lrs_create_socket("socket1", "TCP", "RemoteHost=168.3.1.230:6666",    LrsLastArg);  lrs_set_recv_timeout2(1,0);  lrs_receive("socket1", "buf49", LrsLastArg);  lrs_send("socket1", "buf50", LrsLastArg);  lrs_receive("socket1", "buf51", LrsLastArg);  lrs_send("socket1", "buf52", LrsLastArg);  lrs_receive("socket1", "buf53", LrsLastArg);  /****下面 socket2 的操作将正常执行****/  lrs_create_socket("socket2", "TCP", "RemoteHost=168.3.1.230:6666",    LrsLastArg);  lrs_set_recv_timeout2(1,0);    5 
分享到:
收藏