Имитировать ошибки подключения
Мы использовали 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 здесь.