模拟连接错误

Simulate connection errors

我们使用 protractor 进行端到端测试已有一段时间了。

现在我们正在尝试涵盖几个极端情况,其中涉及修改来自 API 端点请求的响应 - 为此我们使用 protractor-http-mock,它提供了一种易于使用的方式来用预定义的模拟替换 HTTP 响应。

但是,如果我们想测试 突然失去连接 的情况怎么办?在这种情况下我们有什么选择?

换句话说,我们想要实现一种情况,当对特定端点的请求会产生网络连接错误时,看看我们的应用程序会如何反应。


我愿意接受任何建议,我目前正在考虑以下策略:

这也取决于我们要怎么做?应该以编程方式进行吗?

如果是这样,最好的解决方案是依赖代理,并且可以与所有 selenium/webdriver 工具一起使用的最好的工具是 browserMobProxy,

如果您想从外部执行此操作,我建议您也使用任何外部流量 shapers/proxies。例如:http://vaurien.readthedocs.org/en/1.8/

vaurien --protocol http --proxy nonexistingproxy.com:8000 --backend website.com:80

为什么不应该使用 9n0browser 的功能?首先,您需要重新加载页面才能看到它们的运行情况,其次是您不会使用它们重新定义量角器中的代理设置。 至于插件,以编程方式与它们交互并不容易,我看不到任何好处,而您应该为不同的浏览器附加很多。

我希望这可以帮助您定义实现模拟的最佳方式。

该项目解释了总体思路,readme.md 存在语义和翻译问题,我会尽快处理,请耐心等待。请忘记我的 English/misspelling 让我知道任何更正

我正在研究这个 Demo project of how to implement Protractor + CucumberJS + sugar-step。现在它包含一个非常非常简单的 Angular APP 和 3 个 E2E 测试。

该演示正在运行,但未完成,仍然需要一些我认为对 E2E 测试有用的功能。

  • 第一个测试根据默认服务检查服务(Dev 环境模拟)
  • 第二次测试检查服务请求returns出错 状态代码 404
  • 第三个测试检查服务请求returns错误,状态代码为 500

如何为每个场景设置不同的模拟响应?

  • 利用Cucumber的Around Feature,可用于在任何特征或场景之前注入一个angular.module('mock-Service-response-x',fn...),并在特征或场景运行后将其移除

这样可以测试什么?

  • 任何类型的场景,具有极端延迟的响应,响应任何状态代码,响应用于测试非常特殊场景的特殊数据,否则将 impossible/hard 从正常的后端服务获取,如数据不一致在后端

为什么要在 AngularJS 中而不使用代理来实现 UI-Mocks?

  • UI控制,(当然要看你的特殊需要)用Angular 您可以执行以下操作:完全禁用 ngAnimationsjQuery 动画,模拟您的本地浏览器 Date,以自动模拟取决于日期的行为。

  • 成本(取决于您的项目) 为所有 Web 服务实施本地代理的成本在每个开发环境上都可能很昂贵(硬件或工作量或实施时间)。

  • Dependency,如果您的开发团队并行工作,则更有可能相互依赖,如果 UI 团队正在研究依赖于 X Web 服务的功能,了解实施规范 UI 团队可以创建简单的模拟以继续他的工作,从而更有可能按时交付洞项目

所有这些争论都取决于你在哪个项目上工作,并不意味着这是最好的解决方案,但我更赞成让项目层彼此独立,并且能够在一层中发布一个新功能,而不管其他层是否延迟了自己的新功能。

任何阅读本文的人,任何评论、更正或建议都将非常受欢迎

似乎 Comcast 工具可以提供您需要的大部分功能:

Comcast is a tool designed to simulate common network problems like latency, bandwidth restrictions, and dropped/reordered/corrupted packets.

It works by wrapping up some system tools in a portable(ish) way. On BSD-derived systems such as OSX, we use tools like ipfw and pfctl to inject failure. On Linux, we use iptables and tc. Comcast is merely a thin wrapper around these controls.

https://github.com/tylertreat/Comcast

Linux 上的示例:

comcast --device=eth0 --latency=250 --target-bw=1000 --default-bw=1000000 --packet-loss=10% --target-addr=8.8.8.8,10.0.0.0/24 --target-proto=tcp,udp,icmp --target-port=80,22,1000:2000

您可以即时更改设置,并根据需要将丢包率设置为 100%。

Facebook 有一个名为 ATC(模拟网络状况的工具)的工具。

它允许您控制网络中的带宽、延迟、数据包丢失和数据包损坏率。

由于它是开源的,我认为您可以扩展功能以使用不同的 "error" 配置文件,或设置与 Webdriver 的集成。

您可以找到有关 ATC 的一般信息 here. ATCs github repo is here