HTTP-сервер для модульных тестов в Delphi

Мне нужно протестировать некоторые HTTP-компоненты в моем приложении Delphi. Я использую DUnit и хочу добавить автоматизацию в тестирование.

Итак, мой тестовый код должен запустить локальный HTTP-сервер, настроить его (например, подготовиться к разрыву соединения через 3 секунды или имитировать низкую пропускную способность, или запросить логин / пароль и т. Д.), Запустить мои модульные тесты и закрыть HTTP. сервер.

Доступны ли некоторые HTTP-серверы именно для Delphi / DUnit?

Я знаю, что у команды Mozilla есть такой сервер, но интегрировать его в DUnit не так-то просто.


person Andrew    schedule 27.02.2012    source источник


Ответы (4)


Я использую Indy TIdHttpServer, чтобы обслуживать вещи в том же процессе.

Такой подход позволяет мне проверять правильность входящих запросов, а также проверять поведение со стороны клиента.

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

person Nat    schedule 27.02.2012

Хотя ответ @Nat работоспособен, код настройки для заглушки запросов и связанных с ними ответов с использованием Indy может быть довольно тяжелым. Кроме того, работая таким образом, я обнаружил, что тестовый код отнимает много времени как при написании, так и при отладке. Поэтому я создал структуру Delphi WebMocks для DUnitX (извините, не DUnit), чтобы делать именно это с синтаксис, который должен быть прямым с использованием терминологии HTTP.

Например, код настройки очень прост:

WebMock.StubRequest('GET', '/')
  .ToRespond
  .WithHeader('Content-Type', 'application/json')
  .WithBody('{ "value": 123 }');

Вы также можете проверить действительно сделанные запросы, например:

WebMock.Assert
  .Post('/')
  .WithHeader('Content-Type', 'application/json')
  .WithBody('{ "value": 123 }')
  .WasRequested;

Если утверждение терпит неудачу, оно не пройдет тест DUnitX.

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

person R. Hatherall    schedule 18.10.2020

Вы можете использовать unit test / DUnit для создания автоматических интеграционных тестов. Скажем, вы, как HTTP-клиент, HTTP-компоненты, выполняете вызовы веб-службы. Вы можете создать свой собственный имитационный веб-сервис или просто использовать любой общедоступный веб-сервис, например, от Google или Amazon. Таким образом, вам просто нужно создать учетную запись разработчика Google или Amazon и использовать некоторые базовые сервисные функции для тестирования.

person ZZZ    schedule 27.02.2012

Если вы тестируете сервисы SOAP, используйте SoapUI, чтобы создать «имитацию» сервиса, основанного на вашем WSDL. Вы можете сделать так, чтобы он возвращал множество ответов (либо последовательно, либо с помощью простого сценария для сопоставления ответов с содержимым запроса). Я сделал это, сопоставив «идентификатор запроса» (просто GUID) в моем запросе, отправленном из DUnit test на ответ в SoapUI. Чтобы сопоставить их, это простой запрос xpath.

Вы можете сделать так, чтобы он возвращал «стандартные» ошибки / исключения, и, конечно же, когда он не работает, у вас будет тестовый пример «никто не дома».

person Chris Thornton    schedule 27.02.2012