如何在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验证库,步骤如下:
- 安装依赖(TypeScript需要额外装类型声明)
npm install ajv @types/ajv --save-dev
- 编写测试代码,定义对应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
相关产品推荐
相关产品推荐

