В чем разница XML и JSON
Что проверяют
Не столько определения форматов, сколько понимание, как разница между ними влияет на тестирование API: чем проверять схему, как искать значения, какие граничные случаи и уязвимости специфичны для каждого. Следом обычно просят показать, как вы проверите ответ в Postman или в автотесте.
Как отвечать
Сравнивайте по признакам, которые важны тестировщику:
- модель данных: JSON это объекты и массивы с типами строка, число, логическое значение и
null. В XML всё текст, типы появляются только через схему. Зато у XML есть атрибуты, пространства имён, комментарии и смешанное содержимое, текст вперемешку с тегами; - порядок: порядок ключей в JSON-объекте ничего не значит, а порядок элементов в XML значим, если его задаёт схема;
- валидация: для XML это XSD (реже DTD), для JSON это JSON Schema. В Postman схему ответа проверяют через
pm.response.to.have.jsonSchema(schema), в SoapUI есть проверка ответа по схеме из WSDL; - поиск значений: XPath для XML и JSONPath для JSON. В REST Assured для этого есть
XmlPathиJsonPath; - где встречаются: XML в SOAP-сервисах, банковских и государственных интеграциях, конфигурациях; JSON в REST и почти во всех современных веб-API.
Отдельно назовите специфичные проверки. Для XML это атака XXE (внешние сущности, которые читают файлы сервера) и «billion laughs», раздувание памяти через вложенные сущности: парсер должен их отключать. Для JSON это большие числа (JavaScript точно хранит целые только до Number.MAX_SAFE_INTEGER, около 9 квадриллионов), даты, которые приходят строкой без единого формата, и поведение сервера при дублирующихся ключах.
Где спотыкаются
Сравнивают ответы как строки. Другой порядок ключей или лишние пробелы валят тест, хотя данные те же. Сравнивать нужно структурно или по конкретным полям.
Не различают null, отсутствующее поле и пустую строку. Для клиента это три разных случая, и каждый заслуживает отдельной проверки.
В XPath забывают про пространства имён. Выражение без префикса не находит элемент в SOAP-ответе, и кажется, что поля нет, хотя оно на месте.