接口测试:Postman+Newman 自动化脚本实战指南

在接口测试领域,高效的自动化工具能显著提升测试效率、降低重复劳动成本。Postman 作为一款可视化接口测试工具,凭借其易用性和强大功能成为开发者与测试人员的首选;而 Newman 作为 Postman 的命令行运行工具,完美弥补了 Postman 图形界面在批量执行、持续集成等场景下的不足。本文将从基础概念入手,逐步讲解如何使用 Postman 编写接口测试脚本,并通过 Newman 实现自动化运行与报告生成,同时附带详细示例代码与拓展知识,帮助读者快速掌握这套主流的接口自动化测试方案。

一、核心概念梳理:Postman 与 Newman 是什么?

1.1 接口测试的核心价值

接口是系统间数据交互的桥梁,接口测试的核心目标是验证接口是否符合需求定义(如请求参数、响应格式、业务逻辑等),提前发现数据传输、权限控制、异常处理等方面的问题。相较于UI测试,接口测试更底层、更稳定,且执行效率更高,是自动化测试体系中的重要组成部分。

1.2 Postman 核心作用

Postman 是一款支持HTTP/HTTPS、REST、SOAP等多种协议的接口测试工具,提供图形化界面,可快速创建请求、设置参数、验证响应。其核心优势包括:

  • 可视化操作,上手成本低,无需编写代码即可完成基础接口测试;

  • 支持环境变量、全局变量管理,适配多环境(开发、测试、生产)测试场景;

  • 内置Tests脚本编辑器,可通过JavaScript编写断言,实现接口自动化验证;

  • 支持集合(Collection)管理,可将多个接口按业务模块归类,便于批量执行;

  • 支持数据驱动测试,可导入CSV/JSON数据文件实现多组参数测试。

1.3 Newman 核心作用

Newman 是 Postman 的命令行运行器,基于Node.js开发,可直接运行Postman导出的Collection文件。其核心价值在于:

  • 脱离图形界面,支持批量、定时执行接口测试脚本;

  • 可生成HTML、JSON、XML等多种格式的测试报告,清晰展示测试结果;

  • 支持与Jenkins、GitLab CI等持续集成工具集成,实现测试流程自动化;

  • 支持命令行参数配置,灵活适配不同测试场景。

二、前置准备:环境搭建步骤

2.1 Postman 安装

  1. 访问 Postman 官方网站(https://www.postman.com/),根据操作系统(Windows/macOS/Linux)下载对应版本的安装包;

  2. 双击安装包,按照引导完成安装(Windows系统需注意选择"添加到PATH"选项,便于后续命令行调用);

  3. 打开 Postman,可选择注册账号(便于同步Collection)或直接使用"Skip signing in"跳过登录,进入主界面。

2.2 Newman 安装

Newman 基于Node.js,需先安装Node.js环境:

  1. 安装 Node.js:访问 Node.js 官方网站(https://nodejs.org/),下载LTS版本(长期支持版),安装过程中默认勾选"Add to PATH";

  2. 验证 Node.js 安装:打开命令行工具(Windows:CMD/PowerShell;macOS/Linux:Terminal),输入以下命令,若显示版本号则说明安装成功:
    node -v npm -v

  3. 安装 Newman:在命令行中输入以下命令,全局安装Newman:
    npm install -g newman

  4. 验证 Newman 安装:输入以下命令,显示版本号则安装成功:
    newman -v

  5. 安装 Newman 报告插件(可选,用于生成HTML报告):
    npm install -g newman-reporter-html

三、Postman 自动化脚本编写:从单接口到集合

本节以"用户管理系统"的3个核心接口(用户列表查询、用户创建、用户删除)为例,讲解Postman脚本的编写流程,包括请求配置、断言编写、环境变量设置、数据驱动配置。

3.1 基础配置:环境变量与全局变量

多环境测试时(如开发环境、测试环境),接口基础URL、请求头参数等可能不同,通过环境变量可统一管理,避免重复修改。

  1. 创建环境变量:

    点击 Postman 主界面左侧"Environments"→"+"新建环境,命名为"用户管理系统-测试环境";

  2. 添加环境变量:

    变量名:baseUrl,变量值:http://localhost:8080/api(替换为实际接口基础URL);

  3. 变量名:token,变量值:空(后续通过登录接口获取后自动赋值);

  4. 点击"Save"保存,在顶部环境选择框中切换到该环境。

  5. 创建全局变量(可选,用于全局共享的参数):

    点击"Environments"→"Globals"→"Edit",添加全局变量,如timeout,值为5000(请求超时时间)。

3.2 单接口测试脚本编写:以"用户列表查询"为例

假设"用户列表查询"接口信息:

  • 请求方式:GET

  • 请求URL:{{baseUrl}}/users({{baseUrl}}为环境变量)

  • 请求头:Authorization: Bearer {{token}}(需要登录认证)

  • 查询参数:page=1,size=10(分页参数)

  • 响应格式:JSON,包含code(状态码)、message(提示信息)、data(用户列表数据)

  1. 创建Collection:点击左侧"Collections"→"+",命名为"用户管理系统接口测试",点击"Create"。

  2. 添加请求:右键Collection→"Add Request",命名为"查询用户列表"。

  3. 配置请求信息:

    请求方式:选择"GET";

  4. 请求URL:输入{``{baseUrl}}/users

  5. 请求头:点击"Headers",添加键值对:AuthorizationBearer {``{token}}

  6. 查询参数:点击"Params",添加参数page=1、size=10。

  7. 编写断言脚本(Tests标签):

    断言用于验证接口响应是否符合预期,Postman的Tests脚本基于JavaScript,内置多种常用断言方法,可直接选择使用。针对本接口,编写以下断言:`// 1. 验证响应状态码为200(请求成功)

    pm.test("响应状态码为200", function () {

    pm.response.to.have.status(200);

    });

// 2. 验证响应时间小于5000ms(全局变量timeout的值)

pm.test("响应时间小于" + pm.globals.get("timeout") + "ms", function () {

pm.response.to.have.responseTime.lt(pm.globals.get("timeout"));

});

// 3. 验证响应格式为JSON

pm.test("响应格式为JSON", function () {

pm.response.to.be.json;

});

// 4. 验证响应体中code字段为0(业务成功状态码)

pm.test("业务状态码为0", function () {

var jsonData = pm.response.json(); // 解析响应体为JSON对象

pm.expect(jsonData.code).to.eql(0);

});

// 5. 验证响应体中包含data字段,且data为数组

pm.test("响应体包含data数组", function () {

var jsonData = pm.response.json();

pm.expect(jsonData).to.have.property("data");

pm.expect(jsonData.data).to.be.an("array");

});

// 6. 验证data数组长度小于等于10(与查询参数size一致)

pm.test("data数组长度≤10", function () {

var jsonData = pm.response.json();

pm.expect(jsonData.data.length).to.be.lte(10);

});`

  1. 执行并验证:点击"Send"发送请求,查看"Response"区域的响应数据,同时查看"Tests"标签下的断言结果(绿色对勾表示断言通过,红色叉号表示失败)。

3.3 接口依赖处理:以"创建用户后删除"为例

实际测试中,接口间可能存在依赖关系(如"删除用户"需先通过"创建用户"获取用户ID),Postman可通过环境变量传递参数。

3.3.1 编写"创建用户"接口脚本

假设"创建用户"接口信息:

  1. 右键Collection→"Add Request",命名为"创建用户"。

  2. 配置请求信息:

    请求方式:POST;

  3. 请求URL:{{baseUrl}}/users;

  4. 请求头:添加Authorization(Bearer {{token}})、Content-Type(application/json);

  5. 请求体:点击"Body"→选择"raw"→选择"JSON",输入请求体:
    { "username": "test_user", "password": "123456", "email": "test@example.com" }

  6. 编写断言与参数传递脚本(Tests标签):

    `// 1. 基础断言

    pm.test("响应状态码为200", function () {

    pm.response.to.have.status(200);

    });

    pm.test("业务状态码为0", function () {

    var jsonData = pm.response.json();

    pm.expect(jsonData.code).to.eql(0);

    });

// 2. 提取创建的用户ID,存入环境变量(供删除接口使用)

pm.test("提取用户ID到环境变量", function () {

var jsonData = pm.response.json();

var userId = jsonData.data.id;

pm.environment.set("userId", userId); // 存入环境变量userId

console.log("创建的用户ID:" + userId); // 控制台打印,便于调试

});`

3.3.2 编写"删除用户"接口脚本

假设"删除用户"接口信息:

  • 请求方式:DELETE

  • 请求URL:{{baseUrl}}/users/{{userId}}({{userId}}为创建用户时存入的环境变量)

  • 请求头:Authorization: Bearer {{token}}

  • 响应体:{"code":0,"message":"删除成功"}

  1. 右键Collection→"Add Request",命名为"删除用户"。

  2. 配置请求信息:

    请求方式:DELETE;

  3. 请求URL:{{baseUrl}}/users/{{userId}};

  4. 请求头:Authorization: Bearer {{token}}。

  5. 编写断言脚本(Tests标签):
    pm.test("响应状态码为200", function () { pm.response.to.have.status(200); }); pm.test("业务状态码为0", function () { var jsonData = pm.response.json(); pm.expect(jsonData.code).to.eql(0); }); pm.test("删除成功提示正确", function () { var jsonData = pm.response.json(); pm.expect(jsonData.message).to.eql("删除成功"); });

3.4 数据驱动测试:多组参数验证

数据驱动测试通过导入外部数据文件(CSV/JSON),实现同一脚本多组参数的批量测试(如验证不同用户名、密码的创建用户场景)。

3.4.1 准备数据文件(CSV)

创建CSV文件(命名为create_user_data.csv),包含多组测试数据,格式如下:

csv 复制代码
username,password,email,expectedCode,expectedMessage
test_user1,123456,test1@example.com,0,创建成功
test_user2,654321,test2@example.com,0,创建成功
,123456,test3@example.com,1,用户名不能为空
test_user3,,test3@example.com,1,密码不能为空

说明:第一行为表头(与脚本中引用的变量名一致),后续行为测试数据,包含合法数据与异常数据。

3.4.2 修改"创建用户"接口脚本,适配数据驱动

  1. 修改请求体,将固定参数替换为CSV文件中的变量:
    { "username": "{``{username}}", "password": "{``{password}}", "email": "{``{email}}" }

  2. 修改Tests脚本,适配动态断言(根据CSV中的expectedCode和expectedMessage验证):

    `pm.test("响应状态码为200", function () {

    pm.response.to.have.status(200);

    });

// 动态断言业务状态码和提示信息

pm.test("业务状态码符合预期", function () {

var jsonData = pm.response.json();

var expectedCode = parseInt(pm.iterationData.get("expectedCode")); // 获取CSV中的expectedCode(转为数字)

pm.expect(jsonData.code).to.eql(expectedCode);

});

pm.test("提示信息符合预期", function () {

var jsonData = pm.response.json();

var expectedMessage = pm.iterationData.get("expectedMessage"); // 获取CSV中的expectedMessage

pm.expect(jsonData.message).to.eql(expectedMessage);

});

// 仅当创建成功时,提取用户ID(避免异常场景下提取失败)

pm.test("创建成功时提取用户ID", function () {

var jsonData = pm.response.json();

if (jsonData.code === 0) {

var userId = jsonData.data.id;

pm.environment.set("userId", userId);

console.log("创建的用户ID:" + userId);

}

});`

3.4.3 配置数据文件并执行

  1. 点击Collection名称→"Run",打开Collection Runner界面;

  2. 在"Data"区域点击"Select File",选择准备好的create_user_data.csv文件;

  3. 设置"Iterations"(迭代次数,即测试数据的行数),点击"Run 用户管理系统接口测试",查看批量执行结果。

四、Newman 自动化运行:命令行与报告生成

Postman的Collection编写完成后,可导出为JSON文件,通过Newman在命令行中运行,实现脱离图形界面的自动化测试。

4.1 导出Postman相关文件

  1. 导出Collection:右键Collection→"Export"→选择"Collection v2.1"(推荐)→保存为"user_management_collection.json";

  2. 导出环境变量:点击左侧"Environments"→选择创建的环境→"Export"→保存为"test_environment.json";

  3. 准备数据文件:将3.4.1中的create_user_data.csv文件与上述两个JSON文件放在同一目录下(便于命令行调用)。

4.2 Newman 基础运行命令

打开命令行工具,进入文件所在目录,执行以下基础命令:

shell 复制代码
newman run user_management_collection.json -e test_environment.json -d create_user_data.csv

命令参数说明:

  • run:指定要运行的Collection文件;

  • -e(--environment):指定环境变量文件;

  • -d(--data):指定数据驱动文件(CSV/JSON)。

4.3 生成测试报告

通过Newman的报告插件,可生成HTML、JSON等格式的测试报告,其中HTML报告最直观,便于查看详细结果。

4.3.1 生成HTML报告命令

shell 复制代码
newman run user_management_collection.json -e test_environment.json -d create_user_data.csv -r html --reporter-html-export test_report.html

参数说明:

  • -r(--reporters):指定报告类型(html、json、xml等,多个类型用逗号分隔,如-r html,json);

  • --reporter-html-export:指定HTML报告的输出路径和文件名(默认生成在当前目录)。

4.3.2 查看HTML报告

命令执行完成后,在当前目录下会生成test_report.html文件,用浏览器打开即可查看:

  • 报告包含测试概览(总用例数、通过数、失败数、通过率);

  • 详细的请求与响应信息,以及每个断言的执行结果;

  • 测试耗时、环境信息等。

4.4 常用进阶命令

  1. 设置请求超时时间:
    newman run user_management_collection.json -e test_environment.json -d create_user_data.csv --timeout-request 5000--timeout-request 5000:单个请求超时时间为5000ms。

  2. 静默运行(仅显示最终结果,不显示详细请求过程):
    newman run user_management_collection.json -e test_environment.json -d create_user_data.csv -s-s(--silent):静默模式。

  3. 批量生成多种报告:
    newman run user_management_collection.json -e test_environment.json -d create_user_data.csv -r html,json,xml --reporter-html-export html_report.html --reporter-json-export json_report.json --reporter-xml-export xml_report.xml

五、拓展进阶:持续集成与高级技巧

5.1 与Jenkins集成实现持续测试

将Newman脚本集成到Jenkins中,可实现代码提交后自动触发接口测试,及时发现问题。

  1. 前提:Jenkins服务器已安装Node.js和Newman(步骤同2.2);

  2. 创建Jenkins任务:

    新建"自由风格项目",命名为"用户管理系统接口自动化测试";

  3. 配置源码管理(若脚本存放在Git仓库):选择"Git",输入仓库地址和 credentials;

  4. 配置构建步骤:点击"添加构建步骤"→"执行shell"(Linux/macOS)或"执行Windows批处理命令"(Windows),输入Newman运行命令:
    cd 脚本所在目录 newman run user_management_collection.json -e test_environment.json -d create_user_data.csv -r html --reporter-html-export test_report.html

  5. 配置构建后操作:点击"添加构建后操作"→"Publish HTML reports",设置HTML目录为脚本所在目录,HTML文件名为test_report.html,点击"保存"。

  6. 触发构建:点击"立即构建",构建完成后可在Jenkins任务中查看HTML测试报告。

5.2 Postman脚本高级技巧

  1. 使用Pre-request Script预处理请求:
    Pre-request Script在请求发送前执行,可用于生成动态参数(如时间戳、签名)。示例:生成请求签名(假设签名规则为"参数+密钥"的MD5加密):`// Pre-request Script
    var timestamp = new Date().getTime(); // 生成时间戳
    var secret = "test_secret"; // 密钥
    var sign = CryptoJS.MD5("timestamp=" + timestamp + secret).toString(); // 生成签名

// 将时间戳和签名存入环境变量

pm.environment.set("timestamp", timestamp);

pm.environment.set("sign", sign);然后在请求参数中添加timestamp={{timestamp}}sign={{sign}}`。

  1. 全局脚本复用:将通用断言(如响应状态码、响应格式)封装为全局脚本,避免重复编写:点击Collection→"Edit"→"Pre-request Scripts"或"Tests",编写全局脚本,该脚本会在Collection下所有请求的对应阶段执行。

5.3 常见问题排查

  1. Newman运行时提示"找不到Collection文件":

    检查命令行当前目录是否正确;

  2. 检查文件名是否正确(区分大小写)。

  3. 接口请求提示"401未授权":

    检查token是否有效(可能已过期,需重新获取);

  4. 检查Authorization请求头格式是否正确(如Bearer后是否有空格)。

  5. 数据驱动时提示"变量未定义":

    检查CSV文件表头是否与脚本中引用的变量名一致;

  6. 检查数据文件是否正确导入(Newman命令中-d参数是否指定正确)。

六、总结与实践建议

Postman+Newman组合为接口自动化测试提供了"可视化编写-命令行运行-报告生成-持续集成"的完整解决方案,具有上手快、灵活性高、生态完善等优势,适合中小型项目或快速验证场景的接口自动化建设。

实践建议:

  1. 先梳理接口文档,明确接口的请求参数、响应格式、业务逻辑,再编写测试脚本;

  2. 优先覆盖核心业务接口(如用户登录、订单创建),再逐步拓展到边缘接口;

  3. 定期维护测试脚本和数据文件,适配接口变更;

  4. 结合持续集成工具,将接口测试融入研发流程,实现"早发现、早修复"。

通过本文的实操步骤与示例代码,相信读者已能掌握Postman+Newman自动化脚本的核心用法。在实际应用中,可根据项目需求灵活拓展脚本功能,不断优化测试效率。

相关推荐
小坏讲微服务8 小时前
Spring Boot4.0 集成 Redis 实现看门狗 Lua 脚本分布式锁完整使用
java·spring boot·redis·分布式·后端·lua
嘻哈baby8 小时前
Jenkins自动化构建与CI/CD流水线实战
ci/cd·自动化·jenkins
坐公交也用券8 小时前
适用于vue3+pnpm项目自动化类型检查及构建的Python脚本
开发语言·javascript·python·typescript·自动化
EAIReport8 小时前
基于AI的全国蔬菜供应与价格预测PPT自动化生成方案
人工智能·自动化·powerpoint
wxdlfkj8 小时前
微米级精度的光谱共焦位移传感器在多层透明极片涂层厚度测量中的应用
网络·人工智能·自动化
原神启动19 小时前
Ansible(一)—— 自动化运维工具 Ansible:集中化管理服务器
运维·自动化·ansible
CeshirenTester19 小时前
Playwright元素定位详解:8种定位策略实战指南
人工智能·功能测试·程序人生·单元测试·自动化
世岩清上20 小时前
AI驱动的智能运维:从自动化到自主化的技术演进与架构革新
运维·人工智能·自动化
守城小轩21 小时前
基于Chrome140的Quora账号自动化——运行脚本(三)
运维·自动化·chrome devtools·指纹浏览器·浏览器开发