Тестирование сетевых прерываний в программном обеспечении

У меня есть сетевая программа на С++ в Windows, которую я хотел бы протестировать для сетевых отключений в разное время. Каковы мои варианты?

В настоящее время я:

  • Фактически отключить сетевой провод с задней панели компьютера.
  • с помощью ipconfig/release
  • Используя программу cports, чтобы полностью закрыть сокет.

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

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

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

Ответ 1

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

Ответ 2

Ближайший, о котором я могу думать, делает что-то подобное с VEDekstop из Shunra..

Моделирование высокой задержки и низкой пропускной способности при тестировании приложений баз данных

Shunra VE Desktop Standard - это клиентское программное обеспечение на базе Windows, которое имитирует широкополосную сетевую связь, чтобы вы могли тестировать приложения в различных текущих и потенциальных сетевых условиях - прямо с вашего рабочего стола.

Ответ 3

Вы можете подклассифицировать любой класс библиотеки, который вы используете для управления сокетами (предположительно CAsyncSocket или CSocket, если вы используете MFC), переопределить методы, сбой которых вы хотите протестировать, и вставить соответствующий тестовый код в свои переопределения.

Ответ 4

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