51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5182|回复: 9
打印 上一主题 下一主题

[原创] 解决Winsocket脚本中随机变化端口一例

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-8-19 13:00:44 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
最近做了一个GIS系统的性能测试,由于系统涉及保密,系统的具内容我就不介绍了.系统采用C/S架构,用C#语言开发完成,后台的数据库是ORACLE9I.由于以前对C/S架构的系统测试的不多,在测试中遇到了随机端口这个难题.经过几天的研究,终于解决了这个问题.特写出来与大家共享一下,希望对做C/S测试的朋友们有所帮助.测试之前需要在客户端安装ORACLE9I客户端和GIS系统专用的客户端程序.
1.协议的选择
由于客户端和服务器端的通信均使用到ORACLE客户端和arcGIS客户端,所以我选择了ORACLE(2-TIER)和WINSOCKET协议.脚本录制能够顺利捕获到事件,但在脚本中出现了一些乱码,而且都是和ORACLE协议相关的代码.脚本回放失败.顺便说一下,客户端装ORACLE客户端,主要就是完成用户登陆的功能,这个GIS系统是区分用户权限的,所有用户存放在后台数据库中.由于本人对ORACLE数据库不熟悉,再加上脚本中有乱码,用户对地图的放大,缩小操作不涉及到ORACLE数据库.所以我又选择了WINSOCKET协议录制脚本.这次也顺利的录制到了脚本,但回放的时候,脚本依然报错.以下是录制的部分代码
lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=172.31.12.4:1521", LrsLastArg);
lrs_send("socket0", "buf0", LrsLastArg);
lrs_receive("socket0", "buf1", LrsLastArg);


lrs_close_socket("socket0");

lrs_create_socket("socket1", "TCP", "LocalHost=0", "RemoteHost=172.31.12.4:2468", LrsLastArg);
回放脚本报错就在最后一行.我又重新录制了一遍用户登录操作.发现两个脚本中创建socket1时,服务器的端口号不一样.原来脚本出错的原因就在这里,问题虽然找到了,但2468又是从那里来的呢?本人初步判断应该是与服务器第一次SOCKET连接后返回的.所以去data.ws中找找,看能否找到.以下是data.ws中的部分数据
recv  buf1 63
        "\x00"
        "?"
        "\x00\x00\x05\x00\x00\x00\x00"
        "5(ADDRESS=(PROTOCOL=tcp)(HOST=172.31.12.4)(PORT=2468))"
果然在data.ws中找到了2468这个值,接下来处理这个问题的思路就明朗了,即运用关联来处理.
2.关联处理
我查了一下LR的帮助手册,决定用lrs_save_searched_string()来捕获buf1中的端口号,然后再替换创建SOCKET1时服务器端的端口号.以下是具体的处理代码:
lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=172.31.12.4:1521", LrsLastArg);
lrs_send("socket0", "buf0", LrsLastArg);
lrs_receive("socket0", "buf1", LrsLastArg);

//在服务器返回的BUFFER中获取SOCKET1中连接的随机端口号并保存到一个变量中
lrs_save_searched_string ("socket0", NULL, "port", "LB=PORT=", NULL, 1, 0, 4);


//输出脚本运行时获取的随机端口号,验证是否捕获了服务器端返回的随机端口号
lr_output_message("Port number is %s",lr_eval_string("{port}"));  

//将获取的的端口号替换参数NewParam1
lr_save_string(lr_eval_string("{port}"),"NewParam1");  

lrs_close_socket("socket0");

lrs_create_socket("socket1", "TCP", "LocalHost=0", "RemoteHost=172.31.12.4:{NewParam1}", LrsLastArg);

关于lrs_save_searched_string()详细使用帮助大家可参考帮助手册,有什么地方不明白的大家一起讨论,自学帮助手册那可是学习LR的重中之重啊,希望大家不要忽略这一部分的学习.

经过调试,脚本回放通过.接下来的工作就比较轻松了,录制主要业务的脚本,在场景里运行脚本.顺利的完成了本次性能测试.由于数据库和arcGis服务端都装在同一台服务器上,再加上要求测试的用户量少(20个并发用户),数据库中的数据量也比较少,故本次测试只监控服务器系统的一些常用的记数器,没有监控ORACLE数据库.以上先写这么多,希望能对将来做C/S性能测试的朋友有所帮助,同时也欢迎广大的测试同行们多提意见,多多交流.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

10#
发表于 2009-6-4 10:13:55 | 只看该作者
ths!
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2008-12-30 01:03:23 | 只看该作者
hao tie
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2008-8-25 18:16:48 | 只看该作者
这样的问题,只有关联处理解决了。呵呵。
还有土方法,也可以解决不过不推荐,也就不提了。
我原来写过的一个FTP关联,也是这种的方式,处理的细节上还要更多一些。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2008-8-19 20:05:53 | 只看该作者
好帖!!!
受教了1
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2008-8-19 17:09:12 | 只看该作者
强烈的顶!!!!
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2008-8-19 16:05:47 | 只看该作者
好帖。。。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2008-8-19 14:19:55 | 只看该作者

DD

回复 支持 反对

使用道具 举报

  • TA的每日心情

    2016-12-30 10:59
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]测试排长

    3#
    发表于 2008-8-19 13:13:59 | 只看该作者
    好贴,顶一个
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2#
    发表于 2008-8-19 13:08:56 | 只看该作者

    回复 1# 的帖子

    楼主好人啊,我也遇到过这样的问题,就是一直解决不了,现在要按照楼主的高见来试试了,再谢。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-16 19:46 , Processed in 0.076472 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表