Автоматизировать тестирование связи веб-сервисов

У меня есть приложение, которое отправляет сообщения внешней веб-службе. Я создаю и развертываю это приложение с помощью MSBuild и Cruisecontrol.NET. По мере сборки и развертывания приложения CCNET также запускает набор тестов с использованием NUnit. Теперь я хотел бы также протестировать связь веб-службы.

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

Существуют ли какие-либо существующие утилиты, которые легко имитируют веб-службу на основе WSDL? Кто-нибудь делал что-то подобное с помощью MSBuild?

Есть ли другие способы проверить этот сценарий?


person Riri    schedule 29.08.2008    source источник


Ответы (5)


Я только начал изучать http://www.soapui.org/, и мне кажется, что это будет хорошо работать для тестирования веб-сервисов.

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

person Joshua Turner    schedule 29.08.2008
comment
Я использовал soapui как для функционального тестирования, так и для тестирования производительности наших веб-сервисов, и он отлично работает :) - person Patrick Cuff; 07.10.2008

В общем, очень хороший способ проверить такие вещи - использовать имитацию объектов.

На работе мы используем продукт TypeMock для тестирования таких вещей, как взаимодействие веб-служб и другие внешние зависимости. Это стоит денег, поэтому может не подходить для ваших нужд, но я считаю, что это фантастический продукт. По личному опыту могу сказать, что он очень хорошо интегрируется с NUnit и CCNet.

У него очень простой синтаксис, в котором вы в основном говорите «когда вызывается этот метод / свойство, я хочу, чтобы вы вместо этого вернули это значение». Он отлично подходит для тестирования таких вещей, как сбои сети, отсутствие файлов и, конечно же, веб-сервисы.

person Josh Kodroff    schedule 06.10.2008

Взгляните на NMock2. Это имитирующий продукт с открытым исходным кодом, который позволяет создавать «виртуальные» реализации интерфейсов, поддерживающих полноценное и глубокое взаимодействие.

Например, если ваш интерфейс WS называется IService и имеет метод Data GetData(), вы можете создать макет, который требует, чтобы метод был вызван один раз, и возвращает новый объект Data:

var testService = mockery.NewMock<IService>();
Expect
    .Once
    .On(testService)
    .Method("GetService")
    .WithNoArguments()
    .Will(
        Return.Value(new Data());

В конце теста вызовите mockery.VerifyAllExpectationsHaveBeenMet(), чтобы убедиться, что метод GetData действительно был вызван.

P.S .: не путайте проект "NMock2" с "NMock RC2", который также называется "nmock2" на sourceforge. NMock2-the-project, похоже, заменил NMock.

person David Schmitt    schedule 07.10.2008

Это тоже может быть что-то - MockingBird. Выглядишь полезным.

person Riri    schedule 12.02.2009

На моем рабочем месте мы используем Typemock и nUnit для нашего модульного тестирования.

person Community    schedule 10.04.2009