Имитация ошибок соединения

мы использовали protractor для сквозного тестирования на время.

теперь мы пытаемся охватить несколько угловых случаев, которые включают изменение ответа от запросов конечной точки API - для этого мы используем protractor-http-mock который обеспечивает простой в использовании способ замены HTTP-ответов на заранее определенные насмешки.

но, что если мы хотим проверить ситуации, когда внезапная потеря связи происходит? Каковы наши варианты в этом кейс?

другими словами, мы хотим достичь случая, когда запросы к определенным конечным точкам будут вызывать ошибку сетевого подключения и видеть, как наше приложение будет реагировать.


Я открыт для любых предложений, в настоящее время я думаю о следующих стратегиях:

  • посмотрите, есть ли сторонние библиотеки nodejs, подобные protractor-http-mock
  • mock $http служба angularjs
  • запустите прокси-сервер и как-то контролируйте его во время испытаний (grunt-connect-proxy выглядит довольно зрелым, хотя я не уверен, если это возможно динамически изменять поведение прокси-сервера от spec до spec)
  • управляйте им на уровне браузера-например, с помощью функции сетевого дросселирования google chrome (хотя я уверен, что это то, что selenium не может контролировать, дросселирование сети с помощью chrome и selenium) (браузер аддон/расширение?)

4 ответов


Я надеюсь, что это поможет вам определить ваш лучший способ реализации насмешек.

проект объясняет общую идею, есть проблемы семантики и перевода с readme.md, Я буду работать над этим в ближайшее время, пожалуйста, будьте терпеливы. Пожалуйста, забудьте мой английский / орфография дайте мне знать о любой коррекции

я работал над этим демо-проект как реализовать транспортира + CucumberJS + сахар-шаг . Прямо сейчас он содержит очень простое Угловое приложение и 3 теста E2E.

демо работает, но долгострой тем не менее, все еще нужны некоторые функции, которые, я думаю, полезны для тестирования E2E.

  • первая тестовая проверка службы по умолчанию (Dev среды макет)
  • второй тест проверяет, что запрос на обслуживание возвращает ошибку с кодом состояния 404
  • третье испытание проверить, что запрос сервис возвращает ошибку с кодом состояния 500

как я могу установить разные макетные ответы для каждого сценария?

  • использование огурца вокруг функции, которая может быть использована для инъекции angular.module('mock-Service-response-x',fn...) перед любым компонентом или сценарием и удалите его после запуска компонента или сценария

что можно проверить таким способом?

  • любые сценарии, ответы с экстремальные задержки, ответ любой код состояния, ответ специальные данные для тестирования очень конкретных сценариев, которые в противном случае будет невозможно/трудно получить от нормальной фоновой службы, как несоответствие данных на фоновом

почему реализовать ваш UI-Mocks в AngularJS, а не с прокси?

  • UI Control, (конечно, в зависимости от ваших конкретных потребностей) используя Angular вы можете делать такие вещи, как: отключить ngAnimations или jQuery анимации полностью, издеваться над локальным браузером Date, для эмуляции поведения, которое зависит от даты в автоматическом режиме.

  • стоимостью, (в зависимости от вашего проекта) стоимость реализации локального прокси для всех веб-служб в каждой среде разработки может быть дорогостоящей (в аппаратном обеспечении или усилиях или часах реализации).

  • зависимость, если ваши команды разработчиков работают параллельно это, скорее всего, будет зависеть друг от друга, если команда пользовательского интерфейса работает в функции, которая зависит от веб-службы X, зная спецификации реализации, команда пользовательского интерфейса может создавать простые насмешки, чтобы продолжить свою работу, делая более вероятной доставку вовремя проекта отверстия

все эти аргументы зависят от того, над каким проектом вы работаете, и вовсе не означает, что это лучшее решение, но я больше за сохранение слоев проекта независимо друг от друга, и иметь возможность выпустить новый объект в одном слое независимо от того, задерживается ли другой слой в своих новых объектах.

для тех, кто читает это, любой комментарий, исправление или предложение будет более чем приветствуется


Кажется Comcast обеспечит большинство функций, которые вам нужны:

Comcast-это инструмент, предназначенный для имитации общих сетевых проблем, таких как задержка, ограничения полосы пропускания и сброшенные / переупорядоченные / поврежденные пакетированный.

он работает, обернув некоторые системные инструменты портативным (ish) способом. На BSD-производные системы, такие как OSX, мы используем такие инструменты, как ipfw и pfctl для укол отказал. В Linux мы используем iptables и tc. Comcast-это просто тонкая обертка вокруг этих элементов управления.

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% по мере необходимости.


Это также зависит от того, как собираетесь это делать? Должно ли это быть программно?

Если это так, лучшее решение зависит от прокси, и лучший инструмент может быть использован со всеми инструментами selenium / webdriver-browserMobProxy,

Если вы хотите сделать это извне, я бы рекомендовал также использовать любые внешние формирователи/прокси-серверы трафика. Например: http://vaurien.readthedocs.org/en/1.8/ и

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

почему бы вам не использовать 9n0browser возможности? Во-первых, вам нужно будет перезагрузить страницу, чтобы увидеть их в действии, во-вторых, вы не будете переопределять настройки прокси в транспортире с ними. Что касается плагинов, с ними не так легко взаимодействовать программно, и я не вижу никаких преимуществ, в то время как вы должны добавить много для разных браузеров.


есть инструмент от Facebook, который называется ATC (инструмент для имитации сетевых условий).

Это позволяет контролировать bandwith, латентность, потерю пакетов и скорость повреждения пакетов в вашей сети.

поскольку это открытый исходный код, я думаю, вы можете расширить функциональность, чтобы использовать разные профили "ошибок" или настроить интеграцию с Webdriver.

вы можете найти общую информацию о ATC здесь. РЕПО ATCs github здесь.