本地测试中出现“dial tcp: getsockopt: connection refused”错误

7
我已经使用k6进行了几天的负载测试,针对不同环境下的API并解决了一些漏洞问题。一切都很顺利,但是突然在本地出现了错误。
所有请求都会返回以下错误信息:
错误请求:error="Get http://localhost:8000:dial tcp [::1]:8000:getsockopt:connection refused"
这只发生在k6中;我仍然可以通过浏览器、Postman和cURL成功地调用本地API。有办法从k6中获取更多信息并找出为什么无法再连接吗?
3个回答

4
错误消息说明localhost正在解析到一个IPv6地址(在 [::1]:8000 中的::1),因此,如果您的API仅侦听IPv4 127.0.0.1 但是您的localhost同时解析为IPv4和IPv6地址(k6支持双重解析),那么这就可以解释该错误。
如果您查看/etc/hosts文件,您可能会看到以下类似于localhost的条目:
127.0.0.1       localhost
::1             localhost
fe80::1%lo0     localhost

我不确定为什么您的localhost查找突然从IPv4更改为IPv6,但可能是因为您系统的地址选择算法中存在变量(例如,对于iOS / macOS,请参见[1],更一般地说,当Go的内部解析器不必经过系统的解析器时使用的是[2]),这些变量基于历史TCP RTT(在[1]中提到)等因素导致切换。

[1] https://www.ietf.org/mail-archive/web/v6ops/current/msg22455.html
[2] https://www.rfc-editor.org/rfc/rfc6724


2

使用127.0.0.1代替localhost将解决您的问题。


在我的K6上完美运行。 - devb

0
命令行开关--http-debug="full"将在运行脚本时将k6所做的完整请求和响应转储到屏幕上。请阅读this以获取更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接