首页 > 解决方案 > JS库检查http响应负载中是否返回了额外的数据字段?

问题描述

我目前正在为另一个团队正在开发的 API 构建端到端测试,我想知道是否有人知道我可以用来测试 HTTP 响应正文中是否返回额外字段的 JS 库? 此功能的目的是在开发团队通过测试对 api 进行更改时通知 QA 团队,而不是开发人员手动让我们知道他们已经创建了更新。我知道这可以手动实现,但如果轮子已经存在,我宁愿避免重新创建它,哈哈。

示例场景:

API 调用:GET 用户 - 返回:用户名、用户 ID 和用户生日。

使用提议的功能,如果开发团队对 Get 用户调用进行了更新,它会返回以下内容 - 返回:用户名、用户 ID、用户生日和用户地址。

测试无法让我知道返回了一个不期望的额外字段(用户地址)。

标签: javascripthttptesting

解决方案


您需要模式验证,那里有像ajv这样的库。

var ajv = new Ajv({ allErrors: true }); // options can be passed, e.g. {allErrors: true}
// API call: GET user - returns : user name, user ID and user birthday.
// With proposed functionality, if the dev team made updates to the Get user call, and it returns the following - return : user name, user ID, user birthday AND user address.
var schema = {
  type: "object",
  properties: {
    userName: {
      type: "string",
    },
    userId: {
      type: "string",
    },
    userBirthdate: {
      type: "string",
    },
  },
  required: ["userName", "userId", "userBirthdate"],
  additionalProperties: false,
};
var validate = ajv.compile(schema);
var validUser = {
  userName: "John",
  userId: "john",
  userBirthdate: "01012000",
};
var invalidUser = {
  userName: "John",
  userId: "john",
  userBirthdate: "01012000",
  userAddress: "World",
};
var valid = validate(validUser);
console.log(`Valid user is valid: ${valid}`);
valid = validate(invalidUser);
console.log(`Invalid user is valid: ${valid}`);
console.log('Validate errors:', validate.errors);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ajv/6.6.2/ajv.min.js"></script>


推荐阅读