_tests目录外部化OpenAPI测试方案失效,求可用示例
OpenAPI测试外部化可行实现示例
项目结构
别纠结_tests/_data的命名限制了,直接用更直观的目录划分,避免工具默认规则的识别问题:
your-project/ ├── src/ │ └── server.js # 你的API服务代码 ├── openapi/ │ └── openapi.yaml # 核心OpenAPI规范文件 ├── test-cases/ # 单独存放外部测试用例的目录 │ └── user-api-tests.yaml ├── tests/ │ └── api.spec.js # 测试执行的入口文件 ├── package.json
安装依赖
先装必要的工具包:用Jest做测试框架,Supertest发请求,swagger-parser解析OpenAPI规范,js-yaml读取外部用例,jest-json-schema做响应Schema验证:
npm install jest supertest swagger-parser js-yaml jest-json-schema --save-dev
编写外部测试用例
在test-cases/user-api-tests.yaml里定义测试场景,每个用例包含请求方法、路径、请求体、预期状态码和响应Schema:
testCases: - name: "获取用户列表接口正常返回" method: GET path: "/users" expectedStatus: 200 expectedBodySchema: type: array items: type: object properties: id: { type: integer } name: { type: string } - name: "创建用户接口返回正确数据" method: POST path: "/users" requestBody: name: "测试用户" email: "test@demo.com" expectedStatus: 201 expectedBodySchema: type: object properties: id: { type: integer } name: { type: string } email: { type: string }
编写测试执行脚本
在tests/api.spec.js里写执行逻辑,主动读取外部用例、加载OpenAPI规范,批量执行测试:
const request = require('supertest'); const swaggerParser = require('swagger-parser'); const jsYAML = require('js-yaml'); const fs = require('fs'); const path = require('path'); const app = require('../src/server'); // 替换成你的API服务入口 // 读取外部测试用例文件 const testCaseFile = path.join(__dirname, '../test-cases/user-api-tests.yaml'); const testCases = jsYAML.load(fs.readFileSync(testCaseFile, 'utf8')).testCases; // 预加载OpenAPI规范(可选,如需基于规范做更多校验) let openApiSpec; beforeAll(async () => { openApiSpec = await swaggerParser.parse(path.join(__dirname, '../openapi/openapi.yaml')); }); // 遍历所有测试用例执行 testCases.forEach(caseItem => { test(caseItem.name, async () => { let res; // 根据请求方法发送请求 switch(caseItem.method) { case 'GET': res = await request(app).get(caseItem.path); break; case 'POST': res = await request(app).post(caseItem.path).send(caseItem.requestBody); break; // 按需扩展PUT、DELETE等方法 } // 验证状态码 expect(res.statusCode).toBe(caseItem.expectedStatus); // 验证响应体符合预期Schema expect(res.body).toMatchSchema(caseItem.expectedBodySchema); }); });
配置Jest
在项目根目录创建jest.config.js,添加Schema验证支持:
module.exports = { setupFilesAfterEnv: ['jest-json-schema'], testEnvironment: 'node' // 针对Node.js服务的配置 };
运行测试
在package.json里添加测试脚本:
{ "scripts": { "test": "jest" } }
执行命令启动测试:
npm test
这个方案完全将测试用例与执行逻辑分离,外部YAML用例可独立修改,无需改动测试代码;同时通过主动读取指定文件的方式,避开了工具默认目录规则的限制,不会出现文件不被调用的问题。
内容的提问来源于stack exchange,提问作者Gagandeep Sharma
相关产品推荐
相关产品推荐

