Сравнение всего тела ответа в Postman с JSON DataSchema

Я новичок в Postman и пытаюсь создать сценарий автоматизации для создания объекта, содержащего схему JSON. Но я получаю сообщение об ошибке, которое я не знаю, как обойти.

Не могли бы вы помочь?

Вот мой сценарий ожидаемого ответа:

    pm.test("Body is correct", function () {
    pm.response.to.have.body("{\"Id\":"+typeId+",\"NamespaceId\":"+namespaceId+",\"Name\":\"Auto Test\",\"DataSchema\":\"\{\n    \"firstName\": {\n           \"type\": \"string\",\n           \"description\": \"The person\u0027s first name.\"\n    \}\n}\",\"Code\":\"AUTOTYPE\"}");
});

Вот фактический ответ (тело):

    {
    "Id": 1059,
    "NamespaceId": 1089,
    "Name": "Auto Test",
    "DataSchema": "{\r\n  \"firstName\": {\r\n    \"type\": \"string\",\r\n    \"description\": \"The person's first name.\"\r\n  }\r\n}",
    "Code": "AUTOTYPE"
}

Вот ошибка, которую я получаю:

Body is correct | AssertionError: expected response body to equal '{"Id":1059,"NamespaceId":1089,"Name":"Auto Test","DataSchema":"{\n "firstName": {\n "type": "string",\n "description": "The person\'s first name."\n }\n}","Code":"AUTOTYPE"}' but got '{"Id":1059,"NamespaceId":1089,"Name":"Auto Test","DataSchema":"{\\r\\n \\"firstName\\": {\\r\\n \\"type\\": \\"string\\",\\r\\n \\"description\\": \\"The person\\u0027s first name.\\"\\r\\n }\\r\\n}","Code":"AUTOTYPE"}'

Вот фактическая часть скрипта создания:

    {  "NamespaceId": 1089,
  "Name": "Auto Test",
  "Code": "AUTOTYPE",
  "DataSchema": {
    "firstName": {
           "type": "string",
           "description": "The person's first name."
    }
}
 }

Заранее спасибо.

P.S. Пробовал ставить больше \ но потом Почтальон жаловался.

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
0
2 032
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У вас много пробелов в тесте. Пытаться:

pm.response.to.have.body("{\"Id\":"+typeId+",\"NamespaceId\":"+namespaceId+",\"Name\":\"AutoTest\",\"DataSchema\ ":\"{\n"firstName\": {\n"type\": \"строка\",\n"описание\": \"Имя человека\u0027s.\"\n}\n}\ ",\"Код\":\"АВТОТИП\"}");

Информацию о форматировании см. в статье stackoverflow.com/editing-help.

molamk 08.02.2019 20:01

Спасибо Даниил за отзыв. Мне пришлось немного помассировать его, и он, наконец, работает, но, похоже, только по определенному шаблону: 1) Создайте тестовые данные без пробела в части DataSchema (которая является собственной схемой JSON). 2) Затем используйте следующее ожидаемое: pm.response.to.have.body("{\"Id\":"+typeId+",\"NamespaceId\"‌​:"+namespaceId+",\"N‌​ame\" :\"Auto Test\",\"DataSchema\":\"{\\\"properties\\\":{\\\"firstName\\‌​\":{\\\"type\\\" : \\\"string\\\",\\\"description\\\": \\\"Имя человека\\u0027s.\\\"}}}\",\"Код\":\ "АВТОТИП\"}");

KVN 08.02.2019 23:19

Вот мои новые тестовые данные {"firstName":{"type": "string","description": "Имя человека."}}, и мне интересно, могу ли я все еще использовать свой исходный формат ??

KVN 08.02.2019 23:21
Ответ принят как подходящий

Я думаю, проблема в том, что вы указываете, что ожидаете строку как тело, но затем сравниваете ее с объектом JSON. В том виде, в котором вы его настроили сейчас, тест очень хрупок, больше, чем нужно, ИМХО.

Еще немного кода даст вам более стабильное решение (например, не зависит от форматирования пробелов, что не имеет отношения к JSON):

pm.test("Body is correct", function () {
    const jsonData = pm.response.json();
    pm.expect(jsonData.Id)
        .to.be.a('number', 'Id should be a number')
        .that.is.equal(typeId, 'Id should equal typeId');
    pm.expect(jsonData.NamespaceId)
        .to.be.a('number', 'NamespaceId should be a number')
        .that.is.eql(namespaceId);
    pm.expect(jsonData.Name).to.equal("Auto Test");  

    // is this really what you want, i.e. should this be a string?
    pm.expect(jsonData.DataSchema).to.be.a('string'); 
    const dataSchema = JSON.parse(jsonData.DataSchema);
    pm.expect(dataSchema.firstName.type).to.equal("string");
    // ... etc    
});

Спасибо Фризо. Я думаю, что это тоже может сработать (больше работы, но может пройти с большим количеством объектов).

KVN 22.04.2019 17:15

Я считаю это полезным. В то время как его настройка требует больше работы, набор текста приходит ко мне довольно быстро, поэтому дополнительного времени не так много. Я часто запускаю свои скрипты, поэтому выяснение того, что (если что-то) было неправильным, быстро экономит мне много времени. Получение ошибки о том, что ваша строка не соответствует ожидаемому результату, на самом деле не так уж и полезно. Но YMMV

Friso 23.04.2019 13:47

вы также можете использовать схему JSON для проверки структуры и только для проверки отдельных значений. Вы получите 5 строк, таких как pm.expect(jsonData.DataSchema.firstName.type).to.equal('stri‌​ng').

Friso 23.04.2019 13:50

Другие вопросы по теме