在 javascript 执行期间测试 Internet 连接丢失

Posted

技术标签:

【中文标题】在 javascript 执行期间测试 Internet 连接丢失【英文标题】:Testing loss of internet connection during javascript execution 【发布时间】:2017-04-25 16:54:14 【问题描述】:

我的问题

我希望测试脚本在执行过程中如何处理丢失互联网连接的情况。在较低级别,我只需要在脚本中的某个点之后导致一些网络请求失败。

我试图在不模拟任何 javascript 单元的情况下尽可能地保持这个测试是端到端的。

我对如何实现这一目标的想法

Chrome 在其开发工具的“网络”选项卡下有一个有用的切换开关,可以模拟互联网连接中断。我想从我正在执行的脚本中切换它(以类似于debugger 在源选项卡下触发断点的方式)。

我怀疑这并不容易,因为如果网页可以触发它,它会造成严重的安全漏洞。但是,如果有任何方法可以将 Chrome 破解为可能的状态,可能会使用扩展程序或 Chromium,我会全力以赴。

有没有办法从 javascript 切换 Chrome 的“离线”开发工具?

如果不这样做,还有其他方法可以模拟连接丢失/导致网络请求从 javascript 失败吗? (顺便说一句,我没有嫁给 Chrome)

【问题讨论】:

【参考方案1】:

您可以使用 debugger 权限创建自定义 chrome 扩展,然后将 attach 设置为选项卡。然后在该选项卡上调用 Network.enable,然后启动 emulating network conditions(例如下线)

您可以使用onMessageExternal 与您的自定义扩展程序进行通信(例如,告诉它在特定时间下线)。

【讨论】:

【参考方案2】:

也许也试试这个?

setInterval("stop()", 100);

根据docs,window.stop() 停止加载当前加载的资源,例如按下“停止”按钮。在循环中重复执行此操作会模拟网络丢失。

如果您想以编程方式断开连接并恢复连接,可能类似于

var interval = setInterval("stop()", 100);
// To restore connectivity
clearInterval(interval);

【讨论】:

【参考方案3】:

更简单的方法是在Sources选项卡的关键点设置断点,然后在Network选项卡中手动下线。

【讨论】:

以上是关于在 javascript 执行期间测试 Internet 连接丢失的主要内容,如果未能解决你的问题,请参考以下文章

进程间通信 IPC(Inter-Process Communication)

操作系统之三Linux下进程间通信-IPC(Inter-Process Communication)

WWW中的页面间通信?

JavaScript。在循环执行期间没有更新带有 innerHTML 的循环

IPC机制1

iOS UI 自动化:在测试执行期间从测试中切换网络设置