在执行API自动化时,如何验证API的响应是否具有唯一ID?
我正在使用Cypress实现API自动化。我想验证这些响应的“id”是否唯一。 下面是API的响应示例在执行API自动化时,如何验证API的响应是否具有唯一ID?,api,automation,cypress,unique-id,Api,Automation,Cypress,Unique Id,我正在使用Cypress实现API自动化。我想验证这些响应的“id”是否唯一。 下面是API的响应示例 { "data": [ { "id": 5, "created": "2021-01-04T03:50:03.458+05:30" }, { "id": 7,
{
"data":
[
{
"id": 5,
"created": "2021-01-04T03:50:03.458+05:30"
},
{
"id": 7,
"created": "2021-01-04T03:50:03.469+05:30"
},
{
"id": 8,
"created": "2021-01-04T03:50:03.474+05:30"
}
]
}
如有任何建议或想法,将不胜感激。谢谢。还有更多选项,您可以使用Set:
const数据={
“数据”:[
{
“id”:5,
“已创建”:“2021-01-04T03:50:03.458+05:30”
},
{
“id”:7,
“已创建”:“2021-01-04T03:50:03.469+05:30”
},
{
“id”:8,
“已创建”:“2021-01-04T03:50:03.474+05:30”
}
]
};
const id=data.data.map(e=>e.id);
const setIds=新集合(ids);
expect(ids.length).to.equal(setIds.size);
Set总是只包含唯一的值,因此如果原始数据结构中没有唯一的id,Set对象的元素将更少。一个想法是在
之前预取中的所有id,并将它们存储到变量中,然后在中使用此变量,例如,expect.to.be.oneOf
这样做的一个缺点是,如果返回的数据集很大,那么这可能会导致测试运行的时间过长
下面的代码显示了如何实现这一点
请注意,它以正文中的特定Id为目标(通过执行res.body[2].Id
ie,它获取数据中的第三项)。如果您想测试整个响应,那么您可以只map
再次遍历列表(actualIdList=res.body.map((result)=>result.id);
)并将其存储到另一个变量,然后针对该变量进行断言(使用expect(actualIdList).to.include.members(idList);
)
谢谢,此解决方案确实有效。:)
describe('API Test', () => {
let idList;
before('should get some data', () => {
cy.request({
method: 'GET',
url: myUrl
}).then((res) => {
idList = res.body.map((results) => results.id);
});
});
it('should validate an Id in the response', () => {
cy.request({
method: 'GET',
url: myUrl,
}).then((res) => {
expect(res.body[2].id).to.be.oneOf(idList);
});
});
});