2009-06-25 6 views
9

Мне нужно издеваться над довольно сложным веб-сервисом Java, и я ищу правильное решение. Один из способов сделать это - использовать пользовательский интерфейс Soap, но мне нужно что-то, что могло бы изменить состояние сервера, т.е. один запрос повлиял бы на будущие запросы.Лучший способ издеваться над веб-сервисом java

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

Эти два требования не позволяют мне использовать SoapUI - логическая логика станет довольно сложной и, вероятно, трудно выполнить.

Мои вопросы:

1) Существуют ли какие-либо другие преимущества SoapUI в этом контексте (например, простой переход к новой версии WSDL) над пользовательских Java издеваться реализации.?

2) Что было бы наиболее подходящим способом создания веб-службы из wsdl и по-прежнему можно было бы подключить некоторые пользовательские функции, т.е. путем прикрепления некоторых перехватчиков, которые можно было бы редактировать в отдельных файлах (чтобы облегчить дальнейшее восстановление ws-кода из обновленного wsdl)?

+0

Следует также отметить, что макет не только для целей тестирования, но и должен оставить клиентскую часть как есть, т.е. должно быть обычное http-соединение, только изменения конечной точки. Поэтому я думаю, что насмешливая структура не будет в этом случае. – aaimnr

+0

Если вы говорите об интеграции, то я попытаюсь максимально точно отразить производственную среду и использовать реальный веб-сервис против базы данных UAT/QA. Если веб-сервис не находится под вашим контролем, посмотрите на создание «тестовых» данных, которые вы используете во время тестов.ИМХО, создавая «макет»/заглушку веб-сервиса, дает вам ложное чувство безопасности, потому что ваш «макет»/заглушка основан на ваших предположениях о том, как будет вести себя веб-сервис. Это нормально в модульных тестах, но для полного теста интеграции вы должны использовать настоящую вещь, чтобы быть уверенным, что она работает. –

+0

Не совсем интеграционное тестирование, скорее подумайте об использовании его в целях обучения. Поскольку веб-службы, используемые интерфейсом, действительно трудно отразить (множество конфиденциальных данных), легче создать легкий макет, но достаточно интеллектуальный, чтобы поддерживать состояние и, следовательно, обеспечить возможность сценариев логической подготовки. – aaimnr

ответ

2

Для простых издевательств я использую soapUI, а для более сложного, когда состояние должно меняться между запросами, я использую простой эмулятор веб-сервисов, написанный на Python. Такой эмулятор использует шаблоны ответов, созданные из реального веб-сервиса или ответов, которые я создал в soapUI. Таким образом, я могу контролировать всю логику.

Эмулятор для моего последнего проекта содержит более 300 строк кода Python, но для предыдущего, гораздо более простого, это было ~ 150 строк кода Python.

+0

Звучит круто и все, но доступно ли это? – Monachus

+0

soapUI является бесплатным (там также выплачивается более продвинутое издание). Сценарии Python, которые я использую для эмулятора, имеют различную службу: они используют HTTP-сервер и заполняют ответы на основе шаблона и некоторого значения базы данных. –

5

Вы должны посмотреть на EasyMock, что позволяет программно строить издевки. Можно указать очень сложные поведения для ваших макетов.

3

Предположительно вы используете какой-то сгенерированный заглушка в своем клиенте? Вы должны высмеивать заглушку одним из насмешливых API (JMock или EasyMock) и вводить макет в класс-тест.

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

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

Что касается создания классов Java из WSDL, то Apache Axis имеет что-то, называемое WSDL2Java, которое создает клиентские заглушки, о которых я упоминал ранее. Такая утилита распространена в инфраструктуре веб-сервисов, но, возможно, ее заменили с тех пор, как появились веб-службы EJB3, представленные javax.xml.rpc.ServiceFactory.

Здесь есть веб-службы и клиенты EJB3 (http://www.theregister.co.uk/2007/01/23/ejb_web_services/).

Смежные вопросы