首页 > 解决方案 > 无法从 API 响应中找到重复的元素

问题描述

我们正在测试一个 API,最近遇到了一个问题,一些客户无法登录网站。

我们发现了这个问题,这是因为 API 响应中的重复键,即使 API 包含重复键,它也会给出响应。

所以测试对重复的关键条件没有帮助,所以任何人都可以帮助我或指导我如何找到 API 响应中是否存在重复元素。

工具:邮递员

下面是示例 API 输出,

在下面来自 API 的 JSON 输出中,我们可以找到“operatingSystem”的重复项,就像这个重复的键来自不同的元素。

由于某些原因,有一段时间无法调试API,所以需要找出这些重复的情况。

任何想法或建议将不胜感激。在此先感谢。

JSON
eg: {
  "code": 2,
  "deviceId": "ID",
  "deviceName": "Test",
  "platform": "x64",
  "operatingSystem": "test",
  "operatingSystem": "test",
  "gde": 000,
  "productVersion": "0.0",
  "build": "00000",
  "receipt": null
 }

我们怎么能处理这样的情况。我们有什么方法可以自动化/测试这种情况吗?

标签: seleniumpostmanweb-api-testing

解决方案


这里有一些你可以尝试的东西,虽然它有点复杂。pm.response.json()将规范化响应并删除任何重复项,即您将无法检测到任何重复项。因此,您可以做的是获取文本中的响应,然后将其处理成一个列表并在那里查找重复项。我使用了一个地图对象,如果地图已经包含给定的键,那么设置一个标志并通过测试。

这没有经过彻底测试,但它应该给你一个想法或至少一个解决问题的起点:

var jsonBody = pm.response.text();
var str = jsonBody.substring(1, jsonBody.length-1);
var keyArr = str.split(",");
var keyMap = {};
var foundDups = false;

for (var i = 0; i < keyArr.length; i++) {
    var key = keyArr[i].split(":")[0];

    if(!(key in keyMap)) {
        keyMap[key] = key;
        console.log("added key " + key);
    }
    else {
        console.log("found duplicate: " + key);
        foundDups = true;
        break;
    }
}

pm.test("Look for dups", function() {
    pm.expect(foundDups).to.eql(false);
});

推荐阅读