转自:https://www.cnblogs.com/cheerjude/p/10092377.html
百度了一下,答案千篇一律,基本解决办法都是:
“在Runtime-setting中的preferences-->options-->http-request connect timeout(sec)的值设为999。”
然并卵.....设置后依然报错,无法解决报错问题。
问题根源
报错显示是因为请求连接超时。
普通情况下的处理,先设置"Runtime-setting中的preferences-->options-->http-request connect timeout(sec)的值设为999",确保不要请求超时,但如果依旧报错,请看下文。
默认情况下,当录制http请求后回放脚本,Runtime-setting-Preferences中“winlnet replay instead of sockets(windows only)”选项是不勾选的,即通过LR sockets模拟发出请求。
但是!
LR sockets默认SSL的版本为SSL2和SSL3。当录制https时,如果SSL版本不一致,就会使sockets端口连接失败,被服务器拒绝连接,因此为使回放成功,很多人会勾选“winlnet replay instead of sockets(windows only)”。而这个勾选,也就是造成后面报错的罪魁祸首。
勾选“winlnet replay instead of sockets(windows only)”后,LR通过windows系统的WinInet来对外发送请求。但是微软的WinInet对流量的统计并不准确,而且当发送的请求超时20秒后,就会自动报错“请求已超时“。这一个超时,也就是造成开头报错的原因;即便在LR中设置preferences-->options-->http-request connect timeout(sec)的值设为999,也没用,因为发送的请求没不经过LR socket,LR统计不到。
解决办法
1)取消勾选”winlnet replay instead of sockets(windows only)“选项
2)在脚本中添加https请求前,添加函数 web_set_sockets_option("SSL_VERSION","TLS")。
综上,
当单独回放脚本时,请求数少,网站响应快,自家网速也够,所以请求超时就基本不会出现,当几百个用户一起并发,小网站性能不行,或者自家网络已经卡了,那么要发送的请求就会等待,当超过20秒后,就报了上述错误,因此录制https时,建议不要勾选winlnet replay instead of sockets选项,使用lr函数来解决即可。