在 Debian 上用 Swagger OpenAPI 实现自动化测试
一 方案总览
二 准备环境
三 路径A 代码生成驱动的自动化测试
<build>
<plugins>
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>7.10.0</version>
<executions>
<execution>
<goals><goal>generate</goal></goals>
<configuration>
<inputSpec>${project.basedir}/src/main/resources/swagger.yaml</inputSpec>
<generatorName>java</generatorName>
<output>${project.build.directory}/generated-sources</output>
<apiPackage>com.example.api</apiPackage>
<modelPackage>com.example.model</modelPackage>
<configOptions>
<sourceFolder>src/gen/java/main</sourceFolder>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
// __tests__/items.test.js
const request = require('supertest');
const app = require('../app'); // 你的 Express/Fastify/Koa 实例
describe('GET /api/items', () => {
it('returns 200 and JSON', async () => {
const res = await request(app).get('/api/items');
expect(res.statusCode).toBe(200);
expect(res.headers['content-type']).toMatch(/json/);
});
});
四 路径B 契约测试驱动的自动化校验(无需手写用例)
# test_contract.py
from swagger_tester import swagger_test
def test_swagger_spec():
swagger_test(
spec='./swagger.yaml', # 本地或远程 URL
base_url='http://localhost:3000', # 被测服务地址(可选,若提供则发起真实请求)
strict_routes=True, # 严格校验路径与方法
allowed_status_codes=[200, 201, 400, 404, 422],
)
五 持续集成与注意事项
name: Java OpenAPI CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with: { java-version: '11', distribution: 'temurin' }
- run: mvn -B verify
name: Node OpenAPI CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '18' }
- run: npm ci
- run: npx openapi-generator-cli generate -i swagger.yaml -g javascript -o ./generated-client
- run: npx jest --ci