Сравнение всего тела ответа в Postman с JSON DataSchema - PullRequest
0 голосов
/ 08 февраля 2019

Я довольно новичок в Почтальоне и пытаюсь создать скрипт автоматизации, чтобы создать объект, содержащий схему 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."
    }
}
 }

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

PS Я пытался поставить еще \ но тогда Почтальон жаловался бы.

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Я думаю, проблема в том, что вы указываете, что ожидаете строку как тело, но потом сравниваете ее с объектом 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    
});
0 голосов
/ 08 февраля 2019

В вашем тесте много пробелов.Попробуйте:

pm.response.to.have.body ("{\" Id \ ":" + typeId + ", \" NamespaceId \ ":" + namespaceId + ", \" Name \ ": \"Автотест \ ", \" DataSchema \ ": \" {\ n "firstName \": {\ n "type \": \ "string \", \ n "description \": \ "Имя пользователя \ u0027s firstname. \"\ п} \ п} \", \ "Код \": \ "Autotype \"} ");

...