51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 7429|回复: 11
打印 上一主题 下一主题

[原创] 使用LoadRunner遇到无法维持长连接的问题,谢谢大牛了!!!

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2006-11-11 18:01:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用的是LoadRunner8.0+web service pack.
我在RunTime Setting 中的preferences中已经设定了Keep-alive HTTP connection为Yes.
使用Wsdl方式录制web service (soap)脚本后,在Action中指定了发送请求的操作。
实际运行指定循环1000次,用ethereal抓包发现,每次的http连接都被断掉。
检查抓到的包体:
在Post请求的头域中, 给出
请求消息为SendSMS HTTP1.1
连接头域为Connection: Keep-Alive

在服务器的回应中,没有给出connection头域,
使用的编码方式为Transfer-Encoding: chunked.

但是在LR收到该请求后,它发出了FIN-ACK包拆除了已有的连接。
重新建立一个新的连接再次发送请求。
但是我希望它以长连接的方式在已经建立的端口发送,从而提高效率。

项目紧急,请大大们不吝赐教,十分感谢!!!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2006-11-11 18:47:18 | 只看该作者

你是否在runtime setting中选上了"simulate a new user each iteration"

这样的话,每次迭代,会断开重连.去掉此选项.

用ethereal抓包分析.表扬一下!
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2006-11-12 13:38:00 | 只看该作者
多谢楼上的指点,不过我翻遍了Controller和User Generator中关于runtime setting的所有设置,并没有发现你所说的选项啊,请解释详细一点,谢谢!!
我用的是LR8.0+web service pack 1
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2006-11-12 13:45:08 | 只看该作者
晕,在帮助中都查到了相应的条文,目前暂时还没有发现对应的设定sdlkfj1
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2006-11-12 18:15:43 | 只看该作者
呵呵,最后没有办法,在脚本中手动写入循环,总算实现了所谓的长连接。
然后在设定中选取每REQUEST单位统计。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2006-11-13 00:32:05 | 只看该作者
你脚本怎么写的。二楼说的在:runtime setting->browser emulation里。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2006-11-13 10:31:53 | 只看该作者
二楼说的设置是在HTML协议录制时才有的,用WEB SERVICE是没这个东西的,与你说的没有关系。
我以前没注意过这方面的问题。但我建议你先看一下软件在实际使用中是否也是要断开的,如果也需要断开,那我建议你不要改脚本,让脚本反映真实情况是最好的做法。
如果确实需要想办法解决这个问题,就需要检查脚本执行过程中什么时候断开连接,我估计有几个可能:
1。循环1次断1次连接,那肯定是header的问题,它修改了头文件导致需要重新连接,语句肯定是一开始的web_add_auto_header,修改脚本中的相关内容,或者(也许是并且,没把握)调整录制属性中的header,content,修改脚本的方式是将这些内容放在脚本初始化部分;
2。每调用SOAP1次就断1次,那估计有可能是header问题,也可能是soap_request代码的问题。检查方法是试着把web_add_header内容合并到web_add_auto_header里去。如果是soap_request导致必须先断开才能再调用,那我估计这个问题没法解决。
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2006-11-13 10:38:12 | 只看该作者
二楼说的设置是在HTML协议录制时才有的,用WEB SERVICE是没这个东西的,与你说的没有关系。
我以前没注意过这方面的问题。但我建议你先看一下软件在实际使用中是否也是要断开的,如果也需要断开,那我建议你不要改脚本,让脚本反映真实情况是最好的做法。
如果确实需要想办法解决这个问题,就需要检查脚本执行过程中什么时候断开连接,我估计有几个可能:
1。循环1次断1次连接,那肯定是header的问题,它修改了头文件导致需要重新连接,语句肯定是一开始的web_add_auto_header,修改脚本中的相关内容,或者(也许是并且,没把握)调整录制属性中的header,content,修改脚本的方式是将这些内容放在脚本初始化部分;
2。每调用SOAP1次就断1次,那估计有可能是header问题,也可能是soap_request代码的问题。检查方法是试着把web_add_header内容合并到web_add_auto_header里去。如果是soap_request导致必须先断开才能再调用,那我估计这个问题没法解决。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2006-11-14 09:37:10 | 只看该作者

呵呵!

原帖由 jackloo 于 2006-11-13 10:38 发表
二楼说的设置是在HTML协议录制时才有的,用WEB SERVICE是没这个东西的,与你说的没有关系。

确实的,在LR8.0版本中,关于webservice的已经命名为“web service”协议了,在runtimesetting中没有browser选项了
但是在7.51版本之前的webservice测试,使用的协议名称为“SOAP”,runtimesetting中有browser emulation选项的。特此更正。
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2006-11-30 12:06:15 | 只看该作者
sdlkfj3
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2006-12-18 21:31:09 | 只看该作者
我直接在脚本中写入循环,就用简单的for循环。
在Run-time Setting ->Miscellaneous->Automatic Transactions中define each step as a transaction.
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2006-12-18 21:39:07 | 只看该作者
to jackloo
在http1.1中实现了所谓的长连接,根据我的测试,在使用长连接的情况下,最大北向吞吐量(tomcat+axis)是700左右, (tomcat+xfire)是1600左右。如果使用短连接,最大北向吞吐量(tomcat+axis)是450左右, (tomcat+xfire)是1200左右。同时,CPU的占用率降低了20%左右。(4*3G CPU, 2G MEM, JRE1.4.2)
可见,长连接在降低系统开销方面还是有优势的。

基于此,所以我们希望使用长连接来进行测试。
在脚本中写入循环后,runtime setting中的iteration次数可以写成1,循环次数在脚本中给定。

LoadRunner的确功能强大,不过很多地方还是需要动手去调整阿~~
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-22 05:51 , Processed in 0.081758 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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