Использование пригодности для тестирования сервисов на основе xml через http

Я изо всех сил пытаюсь придумать хороший подход к написанию автоматических приемочных тестов для сервисов на основе xml через http с использованием Fitnesse. Эти службы имеют сложные запросы и ответы с элементами xml из схем, которые не используются совместно службами. Я не хочу создавать огромное количество Fixture-кода для создания запросов, маршалинга/демаршалинга и выполнения http-вызовов для каждой службы.

Я изучил RestFixture (https://github.com/smartrics/RestFixture), который кажется отличным подходом к ограничению усилий по сантехнике для тестирования таких сервисов. Единственная проблема — правильно сгенерировать запрос. Для «настоящих» сервисов отдыха это не будет проблемой, но мои сервисы требуют много xml в теле запроса.

Я хотел бы каким-то образом позволить тестировщику построить свой запрос с помощью таблицы Scenario, но, поскольку все сервисы используют разные схемы, он не видит, как я могу это сделать, не создавая действительно сложное вспомогательное приспособление, отвечающее за создание всех различных request или несколько Fixture, каждый из которых отвечает за генерацию запроса на одну услугу. В любом случае я бы вернулся к написанию дорогой сантехники. У кого-нибудь здесь есть мысли по этому поводу?


person magnarwium    schedule 12.11.2012    source источник
comment
Я задал аналогичный вопрос, и ответ, похоже, не существует общего приспособления. Вам нужно будет написать собственные фикстуры для обработки XML-анализа в плоских парах имя/значение, которые Fitnesse поддерживает для его проверки. Принятие решения о том, как отображать проанализированные объекты, является немного сложной задачей.   -  person Chris Kessel    schedule 13.11.2012
comment
Хорошо спасибо. Думаю, я должен начать думать о хорошем способе разоблачения проанализированных объектов.   -  person magnarwium    schedule 13.11.2012


Ответы (1)


Я создал приспособление для решения этой проблемы без дополнительного кодирования: XmlHttpTest. Создание запроса не связано с использованием (настраиваемого) кода Java, имитирующего структуру XML. Вместо этого это рассматривается как создание текстового значения, в котором необходимо заменить заполнители. Проверки выполняются с использованием выражений XPath.

Пример использования (взято из одной из вики-страниц проекта на GitHub) для одного вызова:

!define POST_BODY { {{{
<s11:Envelope xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/">
  <s11:Body>
    <ns1:GetCityWeatherByZIP xmlns:ns1="http://ws.cdyne.com/WeatherWS/">
      <ns1:ZIP>90210</ns1:ZIP>
    </ns1:GetCityWeatherByZIP>
  </s11:Body>
</s11:Envelope>
}}} }

|script         |xml http test                                                       |
|post           |${POST_BODY}   |to                   |${URL}                        |
|check          |response status|200                                                 |
|show           |response                                                            |
|register prefix|weather        |for namespace        |http://ws.cdyne.com/WeatherWS/|
|check          |xPath          |//weather:City/text()|Beverly Hills                 |

(Результат)

Или (используя сценарий для совершения нескольких вызовов)

!*> Scenario definition
!define POST_BODY_2 { {{{
<s11:Envelope xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/">
  <s11:Body>
    <ns1:GetCityWeatherByZIP xmlns:ns1="http://ws.cdyne.com/WeatherWS/">
      <ns1:ZIP>@{zip}</ns1:ZIP>
    </ns1:GetCityWeatherByZIP>
  </s11:Body>
</s11:Envelope>
}}} }

|script|xml http test|

|table template |send request                                                        |
|post           |${POST_BODY_2} |to                   |${URL}                        |
|check          |response status|200                                                 |
|show           |response                                                            |
|register prefix|weather        |for namespace        |http://ws.cdyne.com/WeatherWS/|
|check          |xPath          |//weather:City/text()|@{City}                       |
*!

|send request       |
|zip  |City         |
|10007|New York     |
|94102|San Francisco|

(Результат)

Для более сложных запросов приспособление также позволяет использование шаблона Freemarker (для таких вещей, как необязательные элементы и итерация).

person Fried Hoeben    schedule 01.07.2016