Автоматизировать тестирование взаимодействия с веб-сервисом
-
09-06-2019 - |
Вопрос
У меня есть приложение, которое отправляет сообщения во внешний веб-сервис.Я создаю и развертываю это приложение с помощью MSBuild и Cruisecontrol.NET.Когда CCNET создает и развертывает приложение, оно также запускает набор тестов, используя НАнит.Теперь я хотел бы также протестировать взаимодействие с веб-службой.
Моя идея заключается в том, что как часть процесса сборки должна быть сгенерирована веб-служба (на основе внешних веб-служб WSDL) и развернута на локальном веб-сервере build servers.Все, что должна сделать веб-служба, это получить сообщение и поместить его в файловую систему, чтобы затем я мог проверить его, например, с помощью обычного NUnit.Это также упростило бы разработку, поскольку новым разработчикам нужно было бы только запустить скрипт сборки и приступить к работе (не нужно было бы тратить время на настройку подключения к сторонней службе).
Есть ли какие-нибудь существующие там коммунальные услуги так легко имитировать веб-сервис, основанный на WSDL?Кто Угодно делали что-то подобное с помощью MSBuild?
Есть ли там другие способы тестирования этого сценария?
Решение
Я только начал изучать http://www.soapui.org/ , и мне кажется, что это так будет хорошо работать для тестирования веб-сервисов.
Также, возможно, посмотрите на добавление уровня абстракции в ваш веб-сервис, каждый вызов сервиса будет напрямую вызывать тестируемый метод (вне веб-области)? Я только что сделал это с большим проектом, над которым я работаю, и его тестируемость работает хорошо.
Другие советы
В общем, очень хороший способ проверить подобные вещи - это использовать фиктивные объекты , Р>
На работе мы используем продукт TypeMock для тестирования таких вещей, как взаимодействие с веб-службой и другие внешние зависимости. Это стоит денег, поэтому по этой причине он может не подходить для ваших нужд, но я думаю, что это фантастический продукт. По личному опыту могу сказать, что он очень хорошо интегрируется с NUnit и CCNet.
У него очень простой синтаксис, в котором вы в основном говорите "когда вызывается этот метод / свойство, я хочу, чтобы вы вместо этого возвращали это значение. " Он отлично подходит для тестирования таких вещей, как сбои в сети, отсутствие файлов и, конечно же, веб-сервисы.
Взгляните на 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, похоже, вытеснил NMock.
Это также может быть что-то - MockingBird . Выглядит полезным.