我在我们的软件中有一个错误,当我收到连接超时时发生。这些错误是非常罕见的(通常是当我的连接被我们的内部网络丢弃时)。我怎样才能人为地产生这种效果来测试我们的软件呢?
如果重要,应用程序是用c++ /MFC编写的,使用CAsyncSocket类。
编辑:
我尝试使用一个不存在的主机,我得到套接字错误:
无效的参数
我的下一个尝试是使用Alexander的建议,连接到不同的端口,例如81(在我自己的服务器上)。这很有效。与断开连接完全相同(等待60秒,然后出错)。谢谢你!
我在我们的软件中有一个错误,当我收到连接超时时发生。这些错误是非常罕见的(通常是当我的连接被我们的内部网络丢弃时)。我怎样才能人为地产生这种效果来测试我们的软件呢?
如果重要,应用程序是用c++ /MFC编写的,使用CAsyncSocket类。
编辑:
我尝试使用一个不存在的主机,我得到套接字错误:
无效的参数
我的下一个尝试是使用Alexander的建议,连接到不同的端口,例如81(在我自己的服务器上)。这很有效。与断开连接完全相同(等待60秒,然后出错)。谢谢你!
当前回答
10.0.0.0 10.255.255.255 172.16.0.0 172.31.255.255 192.168.0.0到 192.168.255.255
所有这些都是不可路由的。
其他回答
尽管还不完全清楚OP想要测试哪一个:尝试连接到不存在的主机/端口和超时已经建立的连接之间是有区别的。我会和罗布一起去,等连接好了再拉电缆。或者——为了方便起见——让虚拟机作为测试服务器(使用桥接网络),一旦建立连接,就取消激活虚拟网络接口。
如果你在unix机器上,你可以使用netcat启动一个端口监听:
nc -l 8099
然后,修改您的服务调用它通常对该端口做的任何事情,例如http://localhost:8099/some/sort/of/endpoint
然后,您的服务将打开连接并写入数据,但永远不会得到响应,因此将给您一个“读取超时”(而不是“拒绝连接”)。
最简单的方法是使用CurrPorts删除连接。
然而,为了单元测试你的异常处理代码,也许你应该考虑抽象你的网络连接代码,并编写一个存根、mock或decorator来按需抛出异常。然后,您将能够测试应用程序错误处理逻辑,而不必实际使用网络。
我想提醒大家注意mitmproxy。
通过配置(取自他们的示例)200:b@100:dr,您将获得一个随机断开的连接。
下面的URL总是给出一个超时,并结合了@Alexander和@Emu上面最好的答案:
http://example.com:81
使用example.com:81是对Alexander的答案的改进,因为example.com是由DNS标准保留的,因此它将始终不可访问,不像google.com:81,如果谷歌感觉像它,它可能会改变。此外,由于example.com被定义为不可访问,因此不会使谷歌的服务器超载。
我想说这比@emu的答案有进步,因为它更容易记住。