在测试AJAX应用程序时如何测试断开连接

How to test a disconnection when testing an AJAX application?

本文关键字:测试 连接 断开 AJAX 应用程序 何测试      更新时间:2023-09-26

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

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

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

澄清:我对如何在测试代码中测试断开处理不感兴趣。理想情况下,它可以很容易地在我的浏览器的一个选项卡中切换,而不涉及到我的整个互联网连接。

在这个问题上,知道使用哪个框架进行测试将是一件非常好的事情。对于其余部分,如果AJAX内容是由XMLHttpRequest对象处理的,那么您可以做的事情就很少,因为一旦请求被触发,您就无法再控制它了。如果您正在使用jQuery之类的框架,请考虑juking事件。这涉及到以合成方式触发事件。为了做到这一点,如果您的事件处理程序在范围内是公共的(如果您正在编写可维护的代码,它们应该是公共的),您应该能够解雇它们。如果没有,则将其公开。

如果失败,您可以在服务器端执行以下操作:

  1. 设置服务器在特定时间断开连接的"测试模式"
  2. 考虑通过一个可配置的代理路由(nginx?)来有效地实现步骤1,而无需修改服务器
  3. 自动触发断开连接处理程序,而不是触发事件。您知道XMLHttpRequest失败的事件处理程序正在工作—这可以通过您的浏览器没有错误来保证。你需要测试的是你的功能是否有效。

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

你也可以使用netsh:

netsh interface set interface <interface name> DISABLED/ENABLED 

我不知道任何现成的解决方案,但我有一个想法如何实现。

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

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