我在我们的软件中有一个错误,当我收到连接超时时发生。这些错误是非常罕见的(通常是当我的连接被我们的内部网络丢弃时)。我怎样才能人为地产生这种效果来测试我们的软件呢?
如果重要,应用程序是用c++ /MFC编写的,使用CAsyncSocket类。
编辑:
我尝试使用一个不存在的主机,我得到套接字错误:
无效的参数
我的下一个尝试是使用Alexander的建议,连接到不同的端口,例如81(在我自己的服务器上)。这很有效。与断开连接完全相同(等待60秒,然后出错)。谢谢你!
我在我们的软件中有一个错误,当我收到连接超时时发生。这些错误是非常罕见的(通常是当我的连接被我们的内部网络丢弃时)。我怎样才能人为地产生这种效果来测试我们的软件呢?
如果重要,应用程序是用c++ /MFC编写的,使用CAsyncSocket类。
编辑:
我尝试使用一个不存在的主机,我得到套接字错误:
无效的参数
我的下一个尝试是使用Alexander的建议,连接到不同的端口,例如81(在我自己的服务器上)。这很有效。与断开连接完全相同(等待60秒,然后出错)。谢谢你!
当前回答
我想提醒大家注意mitmproxy。
通过配置(取自他们的示例)200:b@100:dr,您将获得一个随机断开的连接。
其他回答
把你的网线插到没有其他连接/电缆的交换机上。恕我直言,这应该有用。
最简单的方法是使用CurrPorts删除连接。
然而,为了单元测试你的异常处理代码,也许你应该考虑抽象你的网络连接代码,并编写一个存根、mock或decorator来按需抛出异常。然后,您将能够测试应用程序错误处理逻辑,而不必实际使用网络。
连接到一个现有的主机,但是连接到一个被防火墙阻塞的端口,防火墙只是丢弃TCP SYN包。例如:www.google.com:81。
有一些可用的服务允许您通过调用API(在其中指定服务器响应所需的时间)来人为地创建原始超时。macgyver上的Server Timeout就是这样一个服务的例子。
例如,如果您想测试一个需要15秒响应的请求,您只需向macgyver API发送一个post请求。
JSON载荷:
{
"timeout_length": 15000
}
API响应(15秒后):
{
"response": "ok"
}
macgyver上的服务器超时程序 https://askmacgyver.com/explore/program/server-timeout/3U4s6g6u
您可以安装Microsoft Loopback驱动程序,它将为您创建一个单独的接口。然后,您可以在它上连接到您的某些服务(您自己的主机)。然后在网络连接中,你可以禁用/启用这样的接口…