Javascript 模拟连接错误
我们使用Javascript 模拟连接错误,javascript,angularjs,testing,selenium,protractor,Javascript,Angularjs,Testing,Selenium,Protractor,我们使用量角器进行端到端测试已经有一段时间了 现在,我们试图讨论几个关键案例,其中涉及修改来自API端点请求的响应——为此,我们使用它提供了一种易于使用的方法,用预定义的mock替换HTTP响应 但是,如果我们想测试突然发生连接中断时的情况,该怎么办?在这种情况下,我们有什么选择 换句话说,我们希望实现一种情况,即对特定端点的请求将产生网络连接错误,并查看应用程序将如何反应 我愿意接受任何建议,我目前正在考虑以下策略: 查看是否有类似于量角器http mock 模拟$httpangularj
量角器进行端到端测试已经有一段时间了
现在,我们试图讨论几个关键案例,其中涉及修改来自API端点请求的响应——为此,我们使用它提供了一种易于使用的方法,用预定义的mock替换HTTP响应
但是,如果我们想测试突然发生连接中断时的情况,该怎么办?在这种情况下,我们有什么选择
换句话说,我们希望实现一种情况,即对特定端点的请求将产生网络连接错误,并查看应用程序将如何反应
我愿意接受任何建议,我目前正在考虑以下策略:
- 查看是否有类似于
量角器http mock
- 模拟
$http
angularjs服务
- 启动一个代理并在测试期间以某种方式控制它(看起来相当成熟,尽管我不确定是否可以在不同的规范之间动态更改代理的行为)
- 在浏览器级别控制它-例如,使用网络节流google chrome功能(尽管我很确定这是
selenium
无法控制的功能),(浏览器插件/扩展?)
这也取决于我们将如何做到这一点?它应该是编程的吗
如果是这样的话,最好的解决方案取决于代理,所有selenium/webdriver工具都可以使用的最好工具是browserMobProxy
如果您想从外部执行此操作,我建议您也使用任何外部流量整形器/代理。如:
及
为什么不应该使用9N0浏览器功能?首先,您需要重新加载页面才能看到它们的作用,其次,您不会使用它们在量角器中重新定义代理设置。
至于插件,以编程方式与它们交互并不容易,我看不到任何好处,而您应该为不同的浏览器添加大量的插件。我希望这有助于您定义实现模拟的最佳方式
该项目解释了总体思路,
readme.md
存在语义和翻译问题,我很快就会解决,请耐心等待。请忘记我的英语/拼写错误,请告诉我任何更正
我正在研究如何实现++。现在它包含一个非常简单的Angular应用程序和3 E2E测试
演示正在运行,但尚未完成,仍然需要一些我认为对E2E测试有用的功能
- 第一个测试是对照默认服务(Dev)检查服务
环境模拟)
- 第二个测试检查服务请求是否返回错误
状态代码为404
- 第三个测试检查服务请求是否返回状态代码为500的错误
如何为每个场景设置不同的模拟响应?
- 使用Cucumber的Around功能,该功能可用于在任何功能或场景之前注入
angular.module('mock-Service-response-x',fn…
,并在功能或场景运行后将其删除
用这种方法可以测试什么?
- 任何类型的场景、具有极端延迟的响应、响应任何状态代码、用于测试的响应特殊数据非常特殊的场景,否则将无法/难以从正常后端服务获得,如后端的数据不一致
为什么要在AngularJS中实现UI模拟,而不是使用代理?
- UI控件,(当然取决于您的特殊需要)使用Angular,您可以执行以下操作:完全禁用
nAnimations
或jQuery
动画,模拟本地浏览器Date
,以自动模拟依赖于日期的行为
- 成本,(取决于您的项目)在每个开发环境中为所有web服务实现本地代理的成本可能很高(在硬件、工作量或实现时间上)
- 依赖关系,如果您的开发团队并行工作,则更可能是相互依赖,如果UI团队在依赖X Web服务的功能中工作,了解实现规范后,UI团队可以创建简单的模拟来继续他的工作,从而使项目更可能按时交付
所有这些论点都取决于你在做哪个项目,这并不意味着这是最好的解决方案,但我更倾向于保持项目层彼此独立,并且能够在一个层中发布一个新功能,无论另一层在其自己的新功能中延迟
对任何阅读本文的人来说,任何评论、更正或建议都是非常受欢迎的似乎Comcast工具将提供您所需的大部分功能:
Comcast是一种用于模拟常见网络问题的工具,如
延迟、带宽限制和丢弃/重新排序/损坏
包
它通过以可移植(ish)的方式包装一些系统工具来工作。在…上
BSD衍生系统,如OSX,我们使用ipfw和pfctl等工具
注入失败。在Linux上,我们使用iptables和tc。康卡斯特只是一个
这些控件的薄包装器
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的工具(模拟网络条件的工具)
它允许您控制网络中的带宽、延迟、数据包丢失和数据包损坏率
由于它是开源的,我认为您可以扩展该功能,以便使用不同的“错误”配置文件,或者设置与Webdriver的集成
您可以找到有关ATC的一般信息。ATCs github回购是。单元测试i
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