3

我正在测试一个 AJAX 应用程序,在该应用程序中我们需要处理与服务器的暂时断开连接或其他错误(例如在 Gmail 或 Google 日历中)。在测试中模拟这种情况的好方法是什么?

例如,是否有一个浏览器插件允许临时“关闭”一个选项卡的互联网连接?我在 Chrome 中进行所有调试,因此如果有人可以为该浏览器提供建议,那将特别有帮助。

我尝试过的其他选项是将虚拟机的网络连接切换到服务器,或者关闭服务器并重新启动它,这两种方法都不是非常轻量级或易于测试(后者也不会保留任何状态。)

澄清:我对如何在测试代码中测试断开连接处理不感兴趣。我想在运行我的应用程序时创建一个断开连接进行测试。理想情况下,它可以在我的浏览器的一个选项卡中轻松切换,而不涉及破坏我的整个互联网连接。

4

3 回答 3

0

我不知道任何现成的解决方案,但我知道如何实现这一目标。

如果您的服务器在 linux 上运行,您可以编写一个简单的脚本,该脚本将添加一条规则来iptables阻止 ip 或 tcp 级别的流量。然后只需运行脚本来阻止取消阻止流量。

我会在不同的端口上设置一个虚拟主机,在那里放置一些脚本来阻止所有流量,取消阻止流量,限制等,然后将这些脚本添加到书签中以快速运行它们。这些脚本只会使用不同的参数调用 iptables。

于 2013-05-14T15:49:00.997 回答
0

当我们过去不得不这样做时,我们通常会打开 nic 设置并禁用适配器。一些带笔记本电脑的人会在有线连接上运行,然后拔掉它。

你也可以使用 netsh:

netsh interface set interface <interface name> DISABLED/ENABLED 
于 2013-05-14T15:44:22.830 回答
0

在这个问题上,知道你正在使用哪个框架来测试将是一件非常好的事情。剩下的,如果 AJAX 的东西是由 XMLHttpRequest 对象处理的,那么您几乎无能为力,因为一旦请求被触发,您就无法再控制它了。如果您使用的是 jQuery 等框架,请考虑对事件进行处理。这涉及以合成方式触发事件。为了做到这一点,如果您的事件处理程序在范围内是公共的(如果您正在编写可维护的代码,它们应该是公共的),您应该能够触发它们。如果没有,请将它们公开。

如果做不到这一点,您可以通过以下方式在服务器端采取行动:

  1. 设置“测试模式”,您的服务器在特定时间断开连接
  2. 考虑通过可配置代理(nginx?)进行路由,以在不修改服务器的情况下有效实施步骤 1
  3. 综合触发您的断开处理程序而不是事件。您知道您的 XMLHttpRequest 失败的事件处理程序正在工作 - 这是由您的浏览器没有错误的保证。您需要测试的是您的功能是否有效。
于 2013-05-14T15:42:53.883 回答