我的QQ:18324258 朋友们,如果需要交流,请直接联系我的QQ,并说明相互学习,不要留给我QQ号,我不会动不动就上来看的。希望多交流,谢谢!

使用winsocket+oracle(2-tier)测试遇到的一些问题

上一篇 / 下一篇  2007-04-06 11:22:39 / 个人分类:LR

问题一

  WINSOCKET协议录制脚本时,应用服务器动态端口问题。

 

现象:发现在访问应用服务器的公共端口后,服务器返回了一个动态端口,导致脚本再次运行时出现错误。

 

解决:关联。1、使用函数lrs_save_searched_string。将访问公用端口后应用服务器返回的动态端口进行关联。然后再下次连接时,将脚本中录制的固定的端口改为新建的参数即可。

 

          2、可以在树形脚本中,找到要关联的端口,点击右键,选择“create Parameter,指定参数名,使用参数的socket、要参数化的Buffer、左右边界即可。系统生成的函数为:lrs_save_searched_string( "socket0", LRS_LAST_RECEIVED, "Parameter1", "LB/BIN=PORT=", "RB/BIN=))", 1, 0, -1 );

 

   如果不指定左右边界,就会生成lrs_save_param函数

          

 3lrs_save_param也可以,不过端口必须指定长度,对于返回的端口长度确定的可以使用。

如:lrs_save_param("socket0", LRS_LAST_RECEIVED, "oracleport", 57, 4);     

 

问题二:使用lrs_save_param时,如何计算偏移量。

 

解决:1、在data.ws中,选择要计算偏移量的BUFFER,F7,会出现EBCDIC Translation表,每行第一个字符的偏移量是本行最前面显示的数字,后面的依次累加就可以得到。

 

     2、在树形脚本中,找到要计算偏移量的端口,右键,点击“go to offset”。

 

问题三:端口参数化后打印出来,不是对应的端口,而是作为字符打印出来了。

 

解决:使用lr_message_output函数,当时尝试了N次,都不成功,将参数打印出来,发现捕捉的不是端口号,最后才发现原来是参数的表示写错了。

 

查看:tools->general options->parameterization里使用的是< >,而我脚本中使用的是{ }。所以我打出来的是“{parameter},而不是我想要的“1878

 

问题四:协议选择问题

 

现象:开始初步确定系统是三层结构,使用WINSOCKET协议录制脚本。发现在访问数据库1251端口后,服务器返回了一个动态端口,导致脚本再次运行时出现错误。

 

分析:其实这里面有个错误,如果是标准的三层结构,录制的脚本是不会直接访问1251端口的,所以客户端应该有直接访问数据库的部分,此时不应该采取单个WINSOCKET协议,但由于没有经验,所以就努力地解决动态端口的问题。

 

后来解决了动态端口问题后,重新回放脚本,发现一些BUFFER发送了几百字节,但接收回来的为0,并且是很多连续的Mismatch,发送的和接收的相关很大。

 

如:vuser_init.c(84): lrs_receive(socket1, buf31)

vuser_init.c(84): Mismatch (expected 290 bytes, 0 bytes actually received)

 

查找附近的脚本,发现接收的buffer中很多都会出现:“ORA-01403:未找到数据”的错误。

 

最后结论:可以协议选择不正确。后面采取了winsocket+oracle(2-tier)协议解决。并且也没有了返回动态端口的问题。

 

问题五SOCKET关闭问题

 

现象:在录制并回放脚本时并没有错误,但在controller迭代多次回放时出现,报错:找不到socket.

 

分析:在脚本中create socket0是写在INIT脚本中,而close socket0是写在ACTION脚本中,而INIT脚本只执行一次,在第一次运行时ACTION中已经关闭了此socket,再次迭代时,就会报错了。

 

解决:将close socket0放在END脚本中,在整个迭代过程中此 socket一起保持,不关闭


TAG: LR

 

评分:0

我来说两句

Open Toolbar