Еще раз о проверках ответов
Что мы проверяем в ответах сервиса? И почему мы это проверяем?
Как оказалось, это не такой простой и ясный вопрос и поэтому он требует отдельной темы.
Сначала вернемся к описанию того, что делает API: веб-сервис выдает некоторый пул информации для своих клиентов. Или что-то создает (и в ответе тоже выдает информацию о том, что он создал). Клиентов чаще всего несколько и каждый из предоставленного ответа берет то, что нужно именно ему. И берет он это из заранее оговоренных полей (а мы же помним, что SOAP - это протокол обмена четко структурированными xml-сообщениями).
Рассмотрим это на примере сервиса записи пациентов к врачам где разные методы используют сущность "Пациент", у которой есть следующие поля:
- ID
- Фамилия
- Имя
- Отчество
- Дата рождения
- Полис
- Адрес
- Телефон
- Пол
- Льготы
Когда метод возвращает эту сущность, различные сервисы берут различные ее части: сервис расписаний возьмет только фамилию (все равно в списке расписаний врача будет записана только фамилия записанного пациента), сервис вызовов на дом возьмет фамилию, адрес и телефон, сервис льготного обеспечения лекарствами возьмет только ID и льготу. И так далее.
Получается, что каждый сервис парсит только какие-то свои поля, поэтому нам жизненно необходимо проверить, что:
- все обязательные поля, описанные в документации, возвращаются в ответе
- все необязательные поля, описанные в документации, возвращаются когда они заполнены
- в ответе тип поля соответствует документации (если написано, что приходит int, то и прийти должен не string)
- названия полей соответствуют документации
- если возвращается сообщение об ошибке, то оно должно соответствовать этой ошибке
- soapui валидирует ответ по схеме (можно настроить ассерт на это, а можно руками проверить - в поле ответа нажать alt+v
Если все это будет возвращаться с отклонениями, то клиенты будут падать от невозможности получить что либо. Соответственно самая первая проверка ответов должна быть не на бизнес-логику, а на соответствие ответов схеме. Ну и запросов, конечно (собственно тут такая же проблема, как и с ответами, просто скорее всего при некорректном запросе вы и ответ то не получите).