Как сравнить само имя объекта (ключи) тела JSON?
Я очень плохо знаком с Почтальоном. Я хочу сравнить отклик объекта JSON.
json_response = JSON.parse(responseBody);
x=json_response.counter
pm.expect(x).to.equal("400");
Это дает мне 400 значений этого соответствующего "счетчика" (или "400" значения ключа "счетчик")
Но я бы хотел сравнить "счетчик" с самим "счетчиком". (например, Счетчик, Счетчик и т. д.)
{
"counter": 400,
"validInMinutes": 660,
"currentCounter": 322,
}
В основном, я хочу проверить, что все ключи JSON равны тому, что я ищу! Есть ли простой способ сделать это?
2 ответа
Почтальона pm.expect
использует библиотеку Чай для утверждений (это ссылки на pm.cookies
но вход для pm.expect
по той или иной причине находится под этим заголовком). Используя API Chai, вы можете проверить, что ответ имеет только те ключи, которые вы ожидаете, сказав expect(someObject).to.have.keys(expectedKeys)
и определите, какими должны быть ключи:
//for convenience - in Postman, these would be readily available.
var pm = {
expect: chai.expect,
response: {
json: function() {
// the response you would get
return { "counter": 400, "validInMinutes": 660, "currentCounter": 322 };
}
}
};
/* --- test script begins --- */
var expectedKeys = ["counter", "validInMinutes", "currentCounter"];
pm.expect(pm.response.json()).to.have.keys(expectedKeys); // OK
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/4.2.0/chai.min.js"></script>
И вот несколько примеров того, как это ожидание может потерпеть неудачу:
var pm = {
expect: chai.expect,
response: {
json: function() {
// "Counter" starts with capital C
return { "Counter": 400, "validInMinutes": 660, "currentCounter": 322 };
}
}
};
/* --- test script begins --- */
var expectedKeys = ["counter", "validInMinutes", "currentCounter"];
pm.expect(pm.response.json()).to.have.keys(expectedKeys); // fails
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/4.2.0/chai.min.js"></script>
var pm = {
expect: chai.expect,
response: {
json: function() {
// "counter" is missing
return { "validInMinutes": 660, "currentCounter": 322 };
}
}
};
/* --- test script begins --- */
var expectedKeys = ["counter", "validInMinutes", "currentCounter"];
pm.expect(pm.response.json()).to.have.keys(expectedKeys); // fails
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/4.2.0/chai.min.js"></script>
var pm = {
expect: chai.expect,
response: {
json: function() {
//same object you have...
return { "counter": 400, "validInMinutes": 660, "currentCounter": 322 };
}
}
};
/* --- test script begins --- */
//...but there is an extra expected key
var expectedKeys = ["counter", "validInMinutes", "currentCounter", "otherKey"];
pm.expect(pm.response.json()).to.have.keys(expectedKeys); // fails
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/4.2.0/chai.min.js"></script>
У вас есть особая схема, которую вы хотите проверить. (например, Обязательные поля, Типы и т. д.) Другим возможным способом является проверка по заранее определенной JSON-схеме:
//Schema definition (can be available as a global var)
var schema = {
"type": "object",
"properties": {
"counter": {
"type": "number"
},
"validInMinutes": {
"type": "number"
},
"currentCounter": {
"type": "number"
}
},
"required": ["counter", "validInMinutes", "currentCounter"]
};
//Test
pm.test('Schema is valid', function() {
var jsonData = pm.response.json();
pm.expect(tv4.validate(jsonData, schema)).to.be.true;
});
Линия "required": ["counter", "validInMinutes", "currentCounter"]
это именно ваше определение того, какие свойства должны быть там. Но вы также можете определить более строгие правила, например, "должен иметь тип Numer" или иметь ровно 3 цифры и т. Д.