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