Имитировать ошибки подключения

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

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

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

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


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

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

Ответ 1

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

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

Я работал над этим демо-проектом о том, как реализовать Protractor + CucumberJS + sugar-step. Сейчас он содержит очень простой Angular APP и 3 E2E Test.

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

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

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

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

Что можно проверить таким образом?

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

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

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

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

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

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

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

Ответ 2

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

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

Он работает, обертывая некоторые системные инструменты переносимым (иш) способом. На 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%.

Ответ 3

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

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

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

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

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

Ответ 4

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

Это позволяет вам контролировать полосы пропускания, задержки, потери пакетов и коэффициенты повреждения пакетов в вашей сети.

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

Вы можете найти общую информацию о ATC здесь. ATCs github repo здесь.