Я новичок в 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. Пробовал ставить больше \ но потом Почтальон жаловался.

У вас много пробелов в тесте. Пытаться:
pm.response.to.have.body("{\"Id\":"+typeId+",\"NamespaceId\":"+namespaceId+",\"Name\":\"AutoTest\",\"DataSchema\ ":\"{\n"firstName\": {\n"type\": \"строка\",\n"описание\": \"Имя человека\u0027s.\"\n}\n}\ ",\"Код\":\"АВТОТИП\"}");
Спасибо Даниил за отзыв. Мне пришлось немного помассировать его, и он, наконец, работает, но, похоже, только по определенному шаблону: 1) Создайте тестовые данные без пробела в части DataSchema (которая является собственной схемой JSON). 2) Затем используйте следующее ожидаемое: pm.response.to.have.body("{\"Id\":"+typeId+",\"NamespaceId\":"+namespaceId+",\"Name\" :\"Auto Test\",\"DataSchema\":\"{\\\"properties\\\":{\\\"firstName\\\":{\\\"type\\\" : \\\"string\\\",\\\"description\\\": \\\"Имя человека\\u0027s.\\\"}}}\",\"Код\":\ "АВТОТИП\"}");
Вот мои новые тестовые данные {"firstName":{"type": "string","description": "Имя человека."}}, и мне интересно, могу ли я все еще использовать свой исходный формат ??
Я думаю, проблема в том, что вы указываете, что ожидаете строку как тело, но затем сравниваете ее с объектом 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
});
Спасибо Фризо. Я думаю, что это тоже может сработать (больше работы, но может пройти с большим количеством объектов).
Я считаю это полезным. В то время как его настройка требует больше работы, набор текста приходит ко мне довольно быстро, поэтому дополнительного времени не так много. Я часто запускаю свои скрипты, поэтому выяснение того, что (если что-то) было неправильным, быстро экономит мне много времени. Получение ошибки о том, что ваша строка не соответствует ожидаемому результату, на самом деле не так уж и полезно. Но YMMV
вы также можете использовать схему JSON для проверки структуры и только для проверки отдельных значений. Вы получите 5 строк, таких как pm.expect(jsonData.DataSchema.firstName.type).to.equal('string').
Информацию о форматировании см. в статье stackoverflow.com/editing-help.