You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Playwright(TypeScript)中验证API响应JSON Schema

在Playwright(TypeScript)中验证API响应JSON Schema的方法

针对你的需求,有两种常见实现方式:一种用Playwright自带的断言快速验证字段存在,另一种用第三方库做更严格的Schema校验。

方法一:用Playwright内置断言验证字段存在

如果只需要确认指定字段存在,直接用Playwright的toHaveProperty断言即可,无需额外依赖:

import { test, expect } from '@playwright/test';

test('检查API响应必填字段是否存在', async ({ request }) => {
  // 发送API请求
  const response = await request.get('/你的API接口地址');
  // 先确保请求成功
  expect(response.ok()).toBeTruthy();

  // 解析响应JSON
  const responseBody = await response.json();

  // 验证顶层字段存在
  expect(responseBody).toHaveProperty('id');
  expect(responseBody).toHaveProperty('appCode');
  expect(responseBody).toHaveProperty('applicationReference');
  expect(responseBody).toHaveProperty('datetimeSubmitted');
  expect(responseBody).toHaveProperty('firstName');
  expect(responseBody).toHaveProperty('surname');

  // 验证嵌套字段存在
  expect(responseBody.lastAddress).toHaveProperty('street');
  expect(responseBody.lastAddress).toHaveProperty('property');
});

方法二:用Ajv做严格的Schema校验

如果需要验证字段类型、格式(比如日期格式)等更严格的规则,推荐用ajv这个第三方JSON Schema验证库,步骤如下:

  1. 安装依赖(TypeScript需要额外装类型声明)
npm install ajv @types/ajv --save-dev
  1. 编写测试代码,定义对应Schema并验证:
import { test, expect } from '@playwright/test';
import Ajv from 'ajv';

// 创建Ajv实例
const ajv = new Ajv();

// 定义你的API响应Schema,包含必填项、字段类型、格式等规则
const responseSchema = {
  type: 'object',
  // 声明所有必填字段
  required: ['id', 'appCode', 'applicationReference', 'datetimeSubmitted', 'firstName', 'surname', 'lastAddress'],
  properties: {
    id: { type: 'string' },
    appCode: { type: 'string' },
    applicationReference: { type: 'string' },
    // 验证日期时间格式是否符合ISO标准
    datetimeSubmitted: { type: 'string', format: 'date-time' },
    firstName: { type: 'string' },
    surname: { type: 'string' },
    lastAddress: {
      type: 'object',
      required: ['street', 'property'],
      properties: {
        street: { type: 'string' },
        property: { type: 'string' }
      }
    }
  }
};

test('验证API响应Schema合法性', async ({ request }) => {
  const response = await request.get('/你的API接口地址');
  expect(response.ok()).toBeTruthy();

  const responseBody = await response.json();

  // 编译Schema并执行验证
  const validate = ajv.compile(responseSchema);
  const isValid = validate(responseBody);

  // 验证失败时输出错误信息
  expect(isValid, validate.errors?.map(err => err.message).join('\n')).toBe(true);
});

两种方式对比:

  • 方法一适合快速验证字段存在,代码简洁;
  • 方法二可以覆盖更全面的校验规则,确保响应数据完全符合预期结构,适合复杂API场景。

内容的提问来源于stack exchange,提问作者Sweety

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 20:40:19