Postman + Newman + Jenkins 搭建接口自动化测试
接口自动化测试是很多团队都需要做的事。Postman + Newman + Jenkins这套方案已经很成熟了,用的人也多。
整体分三步:
在Postman里写好测试
导出成JSON文件
让Jenkins调用Newman去执行,生成报告
下面一步步来说。
第一步:在Postman里准备测试
先打开Postman,把测试用例准备好。
创建集合
把所有要测的API请求放到一个Collection里,可以叫APITests。建议按功能模块分,比如用户模块、订单模块,这样好找。
编写测试脚本
这是核心。在请求的Tests标签页里写JavaScript代码,用来判断接口返回对不对。
// 1. 检查状态码是不是200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
// 2. 检查返回数据里有token,并且不为空
pm.test("响应数据中token应存在且非空", function () {
const responseData = pm.response.json().data;
const token = responseData?.token;
pm.expect(token).to.exist.and.to.not.be.empty;
});
// 3. 检查响应时间小于200毫秒
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});用pm.environment.set()还能在请求之间传变量。比如登录接口返回的token,可以设置给后面的请求用。
导出测试文件
右键点击Collection,选Export,格式选v2.1,保存成文件。如果用了环境变量(比如{{base_url}}),也要去环境管理器里点Export,导出环境文件。
第二步:本地验证Newman命令
在Jenkins上跑之前,先在本地试试命令能不能用。省得在Jenkins上反复改。
安装Node.js和Newman
Newman是Node.js的一个模块,需要先装Node.js。装好之后,在命令行里执行:
npm install -g newman执行测试
打开终端(Windows用CMD或PowerShell),运行:
newman run API-Tests.postman_collection.json常见问题:提示不是内部或外部命令
如果遇到这个报错,按下面三步操作:
检查Node.js有没有装。输入node -v,有版本号说明装好了。没有就去nodejs.org下载LTS版本安装。
安装Newman。输入npm install -g newman。
如果还不行,就是环境变量没配好。Newman一般装在C:\Users\你的用户名\AppData\Roaming\npm,把这个路径加到系统PATH里,重启命令行就好了。
带参数运行
实际用的时候通常要带更多参数:
newman run API-Tests.postman_collection.json \
-e My-Environment.json \
-r htmlextra,cli \
--reporter-htmlextra-export report.html-e 指定环境变量文件
-r 指定报告格式
--reporter-htmlextra-export 指定报告文件名
看到failures是0,说明本地环境没问题了。
第三步:在Jenkins里配置任务
这一步把Newman和Jenkins连起来。
方案A:Freestyle项目(适合新手)
新建任务:点New Item,起个名字,选Freestyle project。
源码管理:选Git,填仓库地址(里面放着Postman导出的JSON文件)。
构建环境:勾选Provide Node & npm bin/ folder to PATH,选好NodeJS版本。
构建步骤:点Add build step,选Execute shell(Linux/Mac)或Execute Windows batch command(Windows)。
Windows示例:
newman run "API-Tests.postman_collection.json" -e "My-Environment.json"Mac/Linux示例:
export PATH=$PATH:/opt/homebrew/bin
newman run "API-Tests.postman_collection.json" -e "My-Environment.json"方案B:Pipeline项目(更灵活)
Pipeline方式用一个Jenkinsfile文件来定义整个流程,方便版本控制。
在代码仓库根目录创建Jenkinsfile:
pipeline {
agent any
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Run API Tests') {
steps {
sh 'npm install -g newman'
sh 'newman run "API-Tests.postman_collection.json" -e "My-Environment.json" -r junit --reporter-junit-export test_results.xml'
}
}
}
post {
always {
junit 'test_results.xml'
}
}
}在Jenkins里新建任务,类型选Pipeline。Pipeline配置里,Definition选Pipeline script from SCM,填好Git仓库地址就行。
定时执行
在任务配置里找到Build Triggers,勾选Build periodically,用cron语法填时间。比如H/15 * * * *表示每15分钟跑一次。
第四步:查看测试报告
构建完可以看结果:
控制台输出:点构建记录,进Console Output,能看到Newman的执行日志。
可视化报告:如果用-r junit参数,Jenkins会把报告解析出来,在构建页面显示趋势图。
pm对象常用功能
pm是Postman内置的全局对象,可以在测试脚本里用。
| 属性/方法 | 作用 | 示例 |
|---|---|---|
| pm.response | 响应对象 | pm.response.code(状态码) |
| pm.request | 请求对象 | pm.request.url |
| pm.variables | 变量(按优先级获取) | pm.variables.get("varName") |
| pm.environment | 环境变量 | pm.environment.set("key", "value") |
| pm.globals | 全局变量 | pm.globals.get("key") |
| pm.collectionVariables | 集合变量 | pm.collectionVariables.set("key", "value") |
| pm.sendRequest | 发送异步请求 | pm.sendRequest("https://api.example.com", callback) |
| pm.info | 请求元信息 | pm.info.requestName |
总结与避坑指南
几个有用的技巧
把用户名、密码等测试数据放CSV文件里,用Newman的-d参数导入,一个脚本可以跑多组数据。
用环境变量区分开发、测试、生产环境,脚本可以复用。
密码、Token别写死在文件里。用Jenkins的Credentials Binding插件管理,执行时动态注入。
常见问题排查
Newman找不到:Jenkins的PATH里没有Newman。用which newman找到路径,手动加到PATH里。
文件路径错误:Jenkins执行命令的工作目录是任务的工作区。确保JSON文件已经通过Git拉取下来了,或者用绝对路径。
按照上面的步骤操作,就能搭起来一套API自动化测试流水线。后续可以接Git的Webhook,代码提交就自动触发测试,把自动化真正融入日常开发流程里。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!