kf11859 发表于 2009-5-14 09:08:59

关于使用LoadRunner做Socket协议的测试问题

1、未解决问题:
首先,我们的产品是TETRA,需要使用LoadRunner对中心控制单元、中心交换单元、调度单元等模块进行测试,这些单元之间的通信是靠发送PDU数据包来实现的,使用LoadRunner模拟PDU数据包对这些单元进行交互。现在出现的问题是,LoadRunner是靠模拟客户端向服务器端发送数据来实现协议包的交换的,这是一个硬伤,也就是说LoadRunner需要自己主动向服务器发送连接请求,才可以创建套接字。而我们的测试需求里肯定包括了模拟服务器端来测试客户端的功能,其实也不是什么服务端和客户端,可以理解为对等模块,我需要LoadRunner被动地先接收来自其它模块的请求,再返回响应数据。
2、目前使用的方案:
使用函数lrs_accept_connection()来侦听请求,但从未实现过,因为旧的套接字本身就是请求连接的套接字,就算创建新的套接字,这个套接字的属性将跟旧的是一模一样的,这不是我需要的。除此之外,曾经考虑过开发一套需要的函数,能够在LoadRunner里实现所需要的功能,但是觉得难度太大。
请高手大虾们赐教,在下感激不胜!

peaksoftchen 发表于 2009-5-14 10:01:50

你得先创建一个监听socket来接收连接。

然后让开发修改一下测试程序,主动与监听进行一下连接,这样就可以录制脚本了。

Fin 发表于 2009-5-14 10:28:26

我遇到过你的需求,我的实现方法是想服务器主动推空白报文包(或者发心跳包),然后把等待时间设置非常长。。当然这个办法非常笨。不过可行!
注:心跳包只是防止断开的。没有具体毛细。。。

[ 本帖最后由 Fin 于 2009-5-14 10:30 编辑 ]

kf11859 发表于 2009-5-14 11:54:32

目前为什么可以先发送数据再接收数据,就是因为我可以明确对方(服务器)的端口,而客户端的端口是可变的,且我的lrs_create_socket函数创建的端口也是可变的,每回放一次就会变一次,不信可以使用获取本地端口的函数获取看看。所以要先接收数据,除非是远端端口我很明确,创建好套接字后,就可以接收数据了,这一点我个人认为不容易实现。为了实现自动化,我不能回放一次就修改一次脚本,如果能够像PERL语言那样可以获取远端端口,那问题就很容易解决。

shifengboluo 发表于 2011-9-19 10:58:18

遇到同样的问题了,现在需要先主动收取服务端发来的一条socket,然后从里面取到一个id,再给服务端返回这个id,现在做关联根本抓不到这条消息,因为服务端有可能在任意时间发这条消息过来。
有大侠能解决这个问题吗~~

shifengboluo 发表于 2011-9-20 23:28:47

问题总算搞定了。。。哎,对于这个问题网上竟然没有一个正解。

sack 发表于 2014-5-24 15:12:38

回复 6# shifengboluo

解决的方法写出来,分享给大家都学习学习。
页: [1]
查看完整版本: 关于使用LoadRunner做Socket协议的测试问题