如何用Portman实现API自动化测试:Newman集成与CI/CD流程详解
【免费下载链接】portmanPort OpenAPI Specs to Postman Collections, inject test suite and run via Newman 👨🏽🚀项目地址: https://gitcode.com/gh_mirrors/po/portman
Portman是一款强大的API自动化测试工具,能够将OpenAPI规范转换为Postman集合,并自动注入测试套件,最终通过Newman执行测试。本文将详细介绍如何利用Portman实现API自动化测试,并将其集成到CI/CD流程中,帮助开发团队提升API质量和开发效率。
什么是Portman?
Portman是一个开源工具,它的核心功能是将OpenAPI规范文件转换为Postman集合。与普通转换工具不同的是,Portman还能自动为API端点生成测试用例,包括状态码验证、响应时间检查、JSON Schema验证等。这些测试用例可以直接在Postman中运行,也可以通过Newman在命令行或CI/CD管道中执行。
Portman的工作流程主要包括以下几个步骤:
- 解析OpenAPI规范文件
- 生成Postman集合
- 注入自动化测试用例
- 导出Postman集合或直接通过Newman运行测试
安装Portman
要开始使用Portman,首先需要安装Node.js和npm。然后通过npm全局安装Portman:
npm install -g @apideck/portman如果你需要从源码构建,可以克隆Portman仓库:
git clone https://gitcode.com/gh_mirrors/po/portman cd portman npm install npm run build npm link安装完成后,可以通过以下命令验证安装是否成功:
portman --version基本使用方法
从OpenAPI生成Postman集合
使用Portman将OpenAPI规范转换为Postman集合非常简单。只需运行以下命令:
portman --input ./path/to/openapi.yml --output ./path/to/postman_collection.json这条命令会读取指定的OpenAPI文件,生成Postman集合,并保存到指定位置。
配置文件定制
Portman支持通过配置文件进行更精细的控制。创建一个portman-config.json文件,可以指定测试生成规则、环境变量、请求头等。例如:
{ "version": 1, "tests": { "responseStatusSuccess": true, "responseTime": 500, "responseJsonSchema": true }, "environment": { "baseUrl": "https://api.example.com" } }然后在运行Portman时指定配置文件:
portman --input ./openapi.yml --output ./collection.json --config ./portman-config.jsonPortman提供了默认配置文件portman-config.default.json,你可以以此为基础进行修改。
测试套件详解
Portman能够自动生成多种类型的测试用例,确保API的各个方面都得到验证。
状态码验证
Portman会根据OpenAPI规范中定义的响应状态码生成相应的测试。例如,如果某个端点定义了200和404响应,Portman会生成测试来验证这两种状态码。
响应时间检查
你可以配置Portman生成响应时间测试,确保API在规定时间内返回结果。默认情况下,Portman会检查响应时间是否小于500ms,这个值可以在配置文件中修改。
JSON Schema验证
Portman会根据OpenAPI规范中的响应模式生成JSON Schema验证测试,确保API返回的数据结构符合预期。
请求参数验证
Portman还能生成请求参数验证测试,包括路径参数、查询参数和请求体。例如,测试必填参数是否存在,参数格式是否正确等。
Newman集成
Newman是Postman的命令行运行器,可以用于执行Postman集合。Portman生成的集合可以直接通过Newman运行,实现自动化测试。
安装Newman
npm install -g newman运行测试
使用以下命令通过Newman运行Portman生成的集合:
newman run ./path/to/postman_collection.json -e ./path/to/environment.json其中,-e选项用于指定环境变量文件。
生成测试报告
Newman支持生成多种格式的测试报告,如HTML、JSON等。要生成HTML报告,需要安装newman-reporter-html:
npm install -g newman-reporter-html然后运行:
newman run ./collection.json -e ./environment.json -r html --reporter-html-export report.htmlCI/CD集成
将Portman和Newman集成到CI/CD流程中,可以实现API测试的自动化。下面以GitHub Actions为例,介绍如何配置CI/CD流程。
创建GitHub Actions工作流文件
在项目根目录下创建.github/workflows/api-test.yml文件,内容如下:
name: API Tests on: push: branches: [ main ] pull_request: branches: [ main ] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Node.js uses: actions/setup-node@v2 with: node-version: '16' - name: Install dependencies run: npm install -g @apideck/portman newman newman-reporter-html - name: Generate Postman collection run: portman --input ./openapi.yml --output ./collection.json --config ./portman-config.json - name: Run API tests run: newman run ./collection.json -e ./environment.json -r html --reporter-html-export report.html - name: Upload report uses: actions/upload-artifact@v2 with: name: api-test-report path: report.html这个工作流会在每次推送到main分支或创建拉取请求时运行API测试,并生成测试报告。
Postman集合同步
Portman还支持将生成的Postman集合同步到Postman云端,方便团队协作和分享。要实现这一点,需要在Portman配置文件中添加Postman API密钥:
{ "postman": { "apiKey": "your-postman-api-key", "workspaceId": "your-workspace-id", "collectionId": "your-collection-id" } }然后运行Portman时添加--sync选项:
portman --input ./openapi.yml --config ./portman-config.json --sync高级功能
测试用例变异
Portman支持生成变异测试用例,通过修改请求参数来测试API的健壮性。例如,测试必填字段缺失、参数类型错误等情况。
模糊测试
Portman还可以生成模糊测试用例,向API发送异常数据,测试其错误处理能力。
自定义测试脚本
如果自动生成的测试不能满足需求,Portman允许你添加自定义测试脚本。只需在配置文件中指定脚本路径:
{ "tests": { "customTests": ["./custom-tests.js"] } }总结
Portman是一个功能强大的API自动化测试工具,它能够将OpenAPI规范转换为带有测试用例的Postman集合,并通过Newman实现自动化测试。通过将Portman集成到CI/CD流程中,可以在开发过程早期发现API问题,提高API质量和开发效率。
无论是小型项目还是大型企业应用,Portman都能为API测试提供全面的支持。它的灵活性和可扩展性使得开发团队可以根据自己的需求定制测试策略,确保API的可靠性和稳定性。
如果你还在手动编写API测试用例,不妨尝试一下Portman,它可能会彻底改变你的API测试方式!
【免费下载链接】portmanPort OpenAPI Specs to Postman Collections, inject test suite and run via Newman 👨🏽🚀项目地址: https://gitcode.com/gh_mirrors/po/portman
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考