测试如果想要提高自己的地位,首先要提高自己的技能,不仅仅是在测试技术上,开发技术和对开发设计的理解也是需要提高的,这样才能获得和开发同等的交谈资格。

运用关联来解决Winsocket脚本中随机变化端口一例(转自:aks5201314 )

上一篇 / 下一篇  2012-08-14 17:30:03 / 个人分类:转载

最近做了一个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性能测试的朋友有所帮助,同时也欢迎广大的测试同行们多提意见,多多交流.

TAG:

 

评分:0

我来说两句

日历

« 2024-04-16  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 32030
  • 日志数: 21
  • 建立时间: 2010-12-13
  • 更新时间: 2012-09-28

RSS订阅

Open Toolbar