我们知道Winsocket脚本与Web(HTML)脚本不一样,WEB(HTML)脚本主要采用HTML协议进行模拟,根据开发人员提供的接口编写脚本,而Winsocket协议主要根据服务器与客户端采用的内部通讯协议(内部通讯协议,我们在这里讲的是自定义的通讯协议)编写脚本,所以我们需要用到的工具有网络抓包工具Wireshark以及了解内部通讯协议的内容与作用,我们还可以通过服务器与客户端通讯的日志查看(linux下我们可以通过tail -f /var/log/tomcat...查看日志)。好了,我们开始行动吧!
第一步当然是新建winsocket协议:
在编写脚本之前我要补充几个知识点:
1、网络字节序和主机字节序http://blog.csdn.net/houwei544/article/details/8592996
转换方式:
2、8个字节的16进制(以x头):消息类型4个字节+消息体内容长度4个字节,进制类型和长度一般由开发人员定义
3、C语言中的转义字符“\”用来输入特殊字符,如\“
第二步编写脚本,参考文献http://www.ltesting.net/ceshi/ceshijishu/rjcsgj/mercury/loadrunner/2013/0106/205871.html
四部曲:
首先我们要创建socket,如lrs_create_socket("socket1", "TCP", "LocalHost=172.16.0.2:1202","RemoteHost=172.16.255.254:6002",LrsLastArg);
然后我们可以发送数据和接受数据,如 lrs_send("socket1", "buf1001", LrsLastArg); lrs_receive("socket1", "buf2001", LrsLastArg);
其次我们根据抓包的数据或者服务器与客户端通讯日志(可由开发人员提供内部通讯协议说明书)编写data数据文件:
;WSRData 2 1
send buf1001 79"\xe9\x03\x00\x00\x47\x00\x00\x00"//8个字节的16进制:消息类型1001+消息体内容长度71个字节"B0-51-8E-08-74-93;172.16.0.2;empty;0;0;A5F5BE704C7447E68E7F8D5F810C0C31"//消息体内容,长度为71个字节 recv buf2001 17"\xd1\x07\x00\x00\x09\x00\x00\x00""SUCCESS;1"-1
抓包结果:
我们知道十进制1001协议类型转换为16进制等于3e9,消息体内容长度为71转换为16进制等于47
然后我们把3e9转换为网络字节序是e9030000,把47转换为网络字节序是47000000(补0),所以通过抓包可以看到上面的结果。
服务器与客户端通讯日志:
最后我们关闭socket,如lrs_close_socket("socket1");