IBM Performance Tester 7.0.2 无法录制 rubyscript2exe-0.5.3 生成的 Socket Client 应用的 Socket 通信
上周五作了一份 IBM Performance Tester 实践的工具导入培训,其中为了演示基于 Socket API 协议的应用测试过程,用 Ruby 写了一个 Socket Client 应用,Server 部分由于使用了一个之前用 C# 写的 Class lib,所以使用 C# 来编写。
require 'socket'
command = nil
socket = nil
puts "Expression evaluator client. Version 1.0"
while(1)
printf "expression>"
command = gets()
break if command.eql?("bye\n")
redo if command.eql?("\n")
begin
socket = TCPSocket::new("192.168.180.22", 99)
socket.send(command, 0)
puts "=>#{socket.recv(4096)}"
rescue Exception => err
puts err.message
ensure
if (socket)
socket.close
socket = nil
end
end
end
由于演示使用的机器没有安装 Ruby runtime,所以为了省事,使用 rubyscript2exe (0.5.3) 生成了一个 Native image 放了上去,在实践过程中发现了问题,通过 IBM Performance Tester (7.0.2) 就是无法捕捉 Socket 通信,录制的测试脚本都是空的。而通过 Loadrunner (9.0) 来录制脚本却一切正常。之后 google 到 IBM 的一个说明:“Cannot record socket traffic of Internet Explorer and other native clients ”,说是 7.0.2 和 7.0.2.1 版本 IBM Performance Tester 无法录制动态加载 ws2_32.dll 库的 Native 应用中的 Socket 通信。既然这样不行,为了验证,将 Ruby (1.8.7) runtime安装好,通过 IBM Performance Tester 启动 Ruby,以参数的方式传入 Socket client 应用的脚本,结果这样就正常录到了Socket 通信了。
难道是 rubyscript2exe 生成的 Native image 中 Load library 方式与 Ruby 不同?仅仅是 Socket?
另外,以上的问题是在 Windows 2003 上发现的,没有在 Linux 上验证,不知道是否也是这样。
// 2009.03.07 13:30 添加
作者:lzy.je
出处:http://lzy.iteye.com
本文版权归作者所有,只允许以摘要和完整全文两种形式转载,不允许对文字进行裁剪。未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。