🚀 这是我在 B 站课程《接口测试的简介与分类》(点击直达)学习过程中的详细笔记与实操总结,面向接口测试初学者与自动化测试入门者,希望对你有所启发。


🌐 接口测试的简介与分类

❓ 什么是接口测试?

接口测试是指对系统组件之间的数据传递、业务逻辑接口等内容进行测试,验证各模块间是否能正确交互与协作。🔁

📂 接口测试分类:

  • 外部接口测试
    系统对接外部第三方服务,如支付接口、物流接口,主要验证正向功能。
    ○ 只需验证正例(接口是否返回成功)✅

  • 内部接口测试
    ○ ① 内部调用接口:模块之间对接使用,如预算系统与承保系统。
    ■ 只需验证正例
    ○ ② 开放给外部的内部接口:业务核心接口,如 App 端调用后端接口。
    ■ 需验证正例 + 异常 + 权限 + 安全性

分类 典型场景 测试重点 扩展测试点
外部接口 第三方支付、物流查询 正向流程(如支付下单 - 回调通知) 网络异常(断网、超时)、限流处理
内部接口 电商系统“库存扣减”与“订单创建”对接 数据一致性(库存扣减失败时订单回滚) 并发调用(多用户同时下单锁机制)
开放内部接口 App 端用户登录接口 权限校验、SQL 注入防护 敏感数据加密(密码传输加密)🔒

🔁 接口测试的流程与用例设计

1️⃣ 熟悉接口

  • 获取方式:
    ○ 查看接口文档
    ○ 抓包工具(如 Charles/Fiddler)观察请求

  • 熟悉内容:
    ○ 接口地址、请求方式(GET/POST等)
    ○ 鉴权机制(Token/Cookie)
    ○ 请求参数与响应结构
    ○ 状态码及错误码定义


2️⃣ 编写接口测试用例

  • 用例设计思路:

    • 正例:
      ○ 合理入参 + 正确鉴权 → 返回成功结果

    • 反例:
      ○ 鉴权类:Token 缺失、错误、过期
      ○ 参数类:参数为空、格式错误、类型/长度不符
      ○ 业务类:错误码验证、边界值、分页逻辑
      ○ 安全类:黑名单用户、访问频率限制、权限验证


3️⃣ 执行接口测试

  • 使用 Postman 编写请求,管理集合和环境变量
  • 手动调试,确认功能逻辑正确

4️⃣ 持续集成

  • 使用 Newman 执行 Postman 脚本
  • 将测试集成至 Jenkins 流水线,输出测试报告,并通过邮件/钉钉同步结果 📩

🧰 Postman 简介与介绍

界面说明

  • Home:主页
  • Workspaces:工作空间管理
  • Collections:接口集合管理
  • APIs:API 文档管理
  • Environments:环境变量与全局变量
  • Mock Server:虚拟服务器
  • Monitors:定时监控器
  • History:历史请求记录

请求页面说明

  • Params:GET 请求参数

  • Authorization:设置 Token、Basic Auth 等鉴权方式

  • Headers:请求头(如 Content-Type、Cookie 等)

  • Body(POST 请求参数):

    • none:不传参数
    • form-data:支持键值对和文件
    • x-www-form-urlencoded:表单键值对
    • raw:json、text、xml、html、JavaScript、text等原始格式
    • binary:文件上传(二进制)
  • pre-request script:请求前执行 JS 脚本

  • tests:请求后执行断言

  • cookies:管理 Cookie 信息


响应页签说明

  • Body:返回内容

  • Pretty:以 Json、html、XML 等格式查看数据

  • Raw:文本方式查看数据

  • Preview:网页方式查看数据

  • Cookies:响应中返回的 Cookie

  • Headers:响应头

  • Test Results:断言执行结果

  • 状态码与响应信息:

    • 200:OK
    • 响应时间(如 681ms)
    • 响应大小(如 343B)

面试题

Get请求和Post请求的区别

  1. get 请求一般是获取数据,post 请求一般是提交数据。
  2. post 请求比 get 请求更安全。
  3. 本质区别是传参方式不同:
  • get 请求在地址栏后面以 ? 方式传参,多个参数用 & 分隔。
  • post 请求在 body 以表单方式传参。

环境变量与全局变量

  • 环境变量:限定于特定环境(如 dev/test/prod),variable 命名必须一致,接口地址中使用 。
  • 全局变量:所有环境、所有接口共享,跨接口共享数据(如登录 Token、用户 ID)。
  • 获取环境变量和全局变量的值通过 。
类型 作用域 典型用途 优先级(冲突时)
环境变量 限定于特定环境 不同环境的配置差异(API 域名、端口) 高于全局变量
全局变量 所有环境共享 跨接口共享数据 低于环境变量

接口关联

JSON 提取器

第一个接口:

//使用json提取器提取accesss_token值。

//把返回的字符串格式的数据转换成对象的形式。
var result = JSON.parse(responseBody);

//把access_token设置为全局变量
pm.globals.set("access_token",result.access_tokern);

第二个接口:

{{access_token}}

正则表达式提取器

第一个接口:

//使用正则表达式提取器实现接口关联,match匹配。
var result = responseBody.match(new RegExp('"access_token":"(.*?)"'))
console.log(result[1]);
//设置为全局变量
pm.globals.set("access_token",result[1])

第二个接口:

{{access_token}}

⚡ 动态参数

Postman 内置动态参数:

1. 时间与日期类 ⏰

参数 格式示例 典型用途
1689345678(秒级) 生成当前时间戳(如签名计算)
2025-06-18T12:34:56Z 随机日期(测试订单有效期)
2025-06-18T12:34:56.789Z 符合 ISO 8601 格式的时间戳

使用方法:

// 在 pre-request script 中组合参数
pm.environment.set("orderId", "ORD_" + Date.now());
// 请求 URL 中使用:https://api.com/order/{{orderId}}

2. 随机数据类 🎲

参数 格式示例 典型用途
345(0-1000 内随机数) 测试分页大小(如 size=)
abcdef12345(16 位随机字符串) 生成随机用户名
5f7d3a9c-1b2e-4c3d-8e9f-0a1b2c3d4e5f 唯一标识符(测试分布式 ID)

3. 模拟数据类 🧪

参数 格式示例 典型用途
user567@example.com 注册测试(随机邮箱)
+1 (555) 123-4567 测试短信验证码接口
4111 1111 1111 1111 支付模拟(需配合 Mock Server)

自定义动态参数

// 手动获得时间戳
var times = Date.now();
// 设置为全局变量
pm.globals.set("times", times);

使用时调用:

{{times}}

📊 Postman 断言

常规六种断言

1. Status code:Code is 200(状态码断言)✅

作用: 验证接口返回的 HTTP 状态码是否符合预期(如 200、404 等)。
示例代码:

pm.test("状态码应为 200", function() {
pm.response.to.have.status(200);
});

扩展场景:

  • 验证客户端错误(4xx):pm.response.to.have.status(401)(未授权);
  • 验证服务器错误(5xx):pm.response.to.have.status(500)(内部错误)。

2. Responsebody:Contains string(响应体包含字符串断言)🔍

作用: 检查响应内容是否包含指定字符串(支持文本、JSON、XML 等格式)。
示例代码:

pm.test("响应体包含 success", function() {
pm.expect(pm.response.text()).to.include("success");
});

注意事项:

  • 若响应为 JSON,需先通过 pm.response.json() 解析;
  • 区分大小写(如 “Success” 与 “success” 不同),可通过 to.include("success", {ignoreCase: true}) 忽略大小写。

3. Responsebody:Json value check(JSON 值断言)🧾

作用: 验证响应 JSON 中特定字段的值是否符合预期。
示例代码:

pm.test("用户 ID 应为 123", function() {
const responseJson = pm.response.json();
pm.expect(responseJson.user.id).to.eql(123); // 严格等于
});

多层嵌套场景:

// 响应结构:{ "data": { "list": [{"id": "ORD001"}] } }
pm.test("第一个订单 ID 正确", function() {
const id = pm.response.json().data.list[0].id;
pm.expect(id).to.eql("ORD001");
});

4. Responsebody:is equal to a string(响应体等于字符串断言)📏

作用: 验证响应内容与指定字符串完全一致(较少使用,因响应常含动态数据)。
示例代码:

pm.test("响应体等于指定字符串", function() {
pm.expect(pm.response.text()).to.eql('{"status": "ok"}');
});

优化建议:

  • 避免直接断言完整响应体,可拆分字段断言;
  • 对动态字段(如时间戳)使用通配符或正则表达式(需结合 Chai 库)。

5. Response headers:Content-Type…(响应头断言)📋

作用: 检查响应头是否包含指定字段(如 Content-Type、Authorization)。
示例代码:

// 断言存在 Content-Type 头
pm.test("响应头包含 Content-Type", function() {
pm.response.to.have.header("Content-Type");
});

// 断言 Content-Type 为 JSON 格式
pm.test("Content-Type 应为 application/json", function() {
pm.response.to.have.header("Content-Type", "application/json");
});

6. Response time is less than 200ms(响应时间断言)⏱️

作用: 验证接口响应时间是否小于指定毫秒数(用于性能初步测试)。
示例代码:

pm.test("响应时间应小于 200ms", function() {
pm.expect(pm.response.responseTime).to.be.below(200);
});

扩展用法:

  • 断言响应时间在区间内:pm.expect(responseTime).to.be.within(100, 300)
  • 结合环境变量动态设置阈值:pm.expect(responseTime).to.be.below(pm.environment.get("maxResponseTime"))

🔧 在断言中获取自定义动态参数的方式

获取方式 语法示例 适用场景 注意事项
pm.globals.get(“参数名”) pm.globals.get(“times”) 推荐通用写法,兼容性强 需通过 pm 上下文调用,适用于 Pre-request Script、Tests 脚本
globals[“参数名”] globals[“times”] 键名动态拼接场景 旧版本 Postman 可能不支持
globals.参数名 globals.times 键名无特殊字符时简写 参数名含特殊字符需用方括号访问

🌍 全局断言

实现全局断言的三种方案

方案 1:在 Collection 中编写公共测试脚本

原理: 在 Collection 的 Tests 标签页中编写断言,对集合内所有接口生效。
示例代码:

pm.test("全局状态码校验", function() {
pm.response.to.be.success; // 断言状态码为2xx
});

pm.test("全局响应头校验", function() {
pm.response.to.have.header("Content-Type");
pm.expect(pm.response.headers.get("Content-Type")).to.include("json");
});

注意事项:

  • 集合级断言优先级低于单个接口断言;
  • 可用 pm.info.requestName 判断接口名,实现条件断言:
if (pm.info.requestName !== "健康检查接口") {
pm.response.to.have.status(200); // 排除特定接口
}

方案 2:使用前置脚本(Pre-request Script)动态注入断言

示例代码:

// 在 Collection 或 Folder 的 Pre-request Script 中添加
function addGlobalAssertion() {
// 动态生成断言代码字符串
const script = `
pm.test("全局响应时间校验", function() {
pm.expect(pm.response.responseTime).to.be.below(${pm.environment.get("maxResponseTime") || 1000});
});
`;
// 将断言代码注入到当前请求的 Tests 中
pm.test(script);
}

// 条件执行(如仅在非本地环境执行)
if (pm.environment.get("envType") !== "local") {
addGlobalAssertion();
}

方案 3:通过 Newman 命令行添加全局断言

原理: Newman 运行时通过脚本参数注入全局断言。
示例代码:

// newman-run.js 脚本内容
const { Collection } = require('postman-collection');

module.exports = {
beforeRun: (collection) => {
collection.items.forEach(item => {
if (item.request) {
item.test = new Collection.ItemTest({
script: {
exec: [
"pm.test(\"全局状态码校验\", function() {",
" pm.response.to.be.success;",
"});",
"pm.test(\"全局响应头校验\", function() {",
" pm.response.to.have.header(\"X-Request-ID\");",
"});"
].join('\n')
}
});
}
});
}
};

执行命令:

newman run collection.json --script newman-run.js

全局断言与局部断言的优先级控制

断言位置 优先级 应用场景
单个接口的 Tests 最高 针对特定接口的特殊验证
Folder 级 Tests 分组接口的公共验证
Collection 级 Tests 最低 全量接口的基础验证(状态码、响应头)

冲突解决方案:
接口级 Tests 中使用 pm.test.remove() 移除不需要的全局断言:

// 移除集合中的全局响应时间断言
pm.test.remove("全局响应时间校验");

🧪 Postman 批量运行测试用例

在 Postman 中批量运行测试用例,主要通过 Collection Runner 功能来实现,以下是具体步骤:

1. 创建集合和组织用例

  • 点击左侧 “Collections” 的 “➕” 按钮创建集合,输入集合名称。
  • 选中集合点击 “⋯” → Add Folder 添加模块文件夹。
  • 再选中文件夹点击 Add Request 添加接口测试用例,配置请求参数、断言脚本,将接口组织到集合中。

2. 选择运行方式

  • ✅ 点击集合右上角 Run:全模块回归测试。
  • ✅ 点击文件夹右上角 Run folder:单模块迭代测试。

3. 配置 Runner 参数

  • Iterations:设置测试迭代次数。

  • Delay:设置接口调用间隔(单位:ms)。

  • Data:导入 CSV / JSON 文件进行参数化。

  • Advanced settings

    • ✅ 勾选 “Persist responses” 保存响应。
    • 🔁 选择 “Run order” 控制执行顺序(按文件夹顺序或随机执行)。

4. 执行批量测试

点击 RunRun 文件夹名称 按钮,即可批量运行测试用例。

5. 分析运行结果

  • 📊 汇总信息:运行时间、迭代次数、通过/失败数量、平均响应时间等。
  • 🔍 单接口详情:状态码、响应时间、响应体、断言结果、错误信息。

📂 Postman 数据驱动测试

✅ CSV 参数化测试

📁 CSV 文件格式要求

  • 第一行为表头,后续行为数据。
  • 使用英文逗号 , 分隔,若字段含逗号,需用双引号包裹。

示例文件 users.csv

username,password,expected_status
admin,admin123,200
guest,guest456,200
invalid_user,wrong_pwd,401

📥 导入 CSV 步骤

  1. Runner 中选择集合或文件夹 → 点击 Select File
  2. 选择 CSV 文件 → Postman 自动识别变量名并预览数据。

🔗 请求中引用变量

  • URL 参数:

    https://api.com/login?username={{username}}
  • 请求体参数:

    {
    "username": "{{username}}",
    "password": "{{password}}"
    }
  • 在断言中使用:

    pm.test("状态码校验", function() {
    pm.response.to.have.status(pm.iterationData.get("expected_status"));
    });

✅ JSON 参数化测试

📁 JSON 文件格式要求

  • 根节点为数组,每组对象为一组测试数据。

示例 orders.json

[
{
"productId": "P001",
"quantity": 1,
"price": 99.9,
"expectedTotal": 99.9
},
{
"productId": "P002",
"quantity": 3,
"price": 49.9,
"expectedTotal": 149.7
}
]

📥 导入 JSON 步骤

  • 同样在 Runner 中选择 JSON 文件,Postman 自动识别变量。

🔗 引用方式示例

  • URL 参数:

    https://api.com/order/{{productId}}
  • 请求体参数:

    {
    "quantity": {{quantity}},
    "unitPrice": {{price}}
    }
  • JSON 断言:

    pm.test("金额计算正确", function() {
    const response = pm.response.json();
    pm.expect(response.total).to.eql(pm.iterationData.get("expectedTotal"));
    });

🧾 请求必须携带的请求头说明

请求头名 说明 示例值
Host 指定目标主机(HTTP/1.1要求) api.example.com
Connection 是否保持长连接 keep-alive
Accept 可接受的响应格式 application/json
X-Requested-With 是否为 AJAX 请求 XMLHttpRequest
User-Agent 客户端身份标识 Mozilla/5.0...
Referer 请求来源页面 URL https://example.com
Cookie 携带的 Cookie 信息 session_id=123456; user_token=abc
Content-Type 请求体的格式类型 application/json

🔧 Postman接口Mock Servier服务器

🧪 Mock Server 核心价值与应用场景

核心价值

解决痛点:后端接口尚未开发完成时,前端可通过 Mock Server 模拟接口响应,实现并行开发,提升开发效率。

应用场景

  • 前后端分离开发,后端进度滞后时前端可独立调试
  • 测试复杂业务流程(如支付回调、状态变更)
  • 模拟异常情况(如网络超时、服务器错误)

⚙️ 创建 Mock Server 全流程(以用户示例为例)

1. 准备 Mock 响应数据

示例 JSON(注意逗号格式):

{
"error_code": 0,
"msg": "返回成功",
"data": []
}

2. 在 Postman 中创建 Mock Server

步骤如下:

  1. 创建 Collection:

    • 点击左侧 Collections → ➕ → 命名为“前端 Mock 接口”
    • 添加请求(如 GET/POST)→ 命名为“获取数据接口”
  2. 配置请求与响应:

    • 请求 URL 可自定义,如:https://mock-api.com/data/query
    • 切换至 Response 标签页 → 选择 raw → 粘贴 JSON
    • 设置状态码为 200 OK
  3. 生成 Mock Server:

    • 点击 Collection 的 → 选择 Generate Mock Server
    • 设置域名(如:mock-server.postman.com
    • 点击 Create Mock → 复制生成的 Mock URL,如:
      https://postman-echo.com/mock/12345/data/query

3. 前端调用 Mock 接口示例(JavaScript)

fetch("https://postman-echo.com/mock/12345/data/query", {
method: "GET",
headers: {
"Content-Type": "application/json"
}
})
.then(response => response.json())
.then(data => {
console.log("接口返回:", data);
// 渲染或处理数据
})
.catch(error => {
console.error("请求错误:", error);
});

🍪 Postman 的 Cookie 鉴权机制

  • 由服务器生成的小段 key=value 格式文本
  • 存储在浏览器或 Postman 中,用于身份验证、会话控制等

2. 鉴权流程

  1. 当客户端第一次访问服务器的时候,那么服务器就会生成Cookie信息,并且在响应头的set-cookie里面把生成的cookie信息发送给客户端。
  2. 当客户端第2-N次访问服务器的时候,那么客户端就会在请求头的cookie带上cookie信息,从而实现鉴权
首次请求 → 服务器生成 Set-Cookie 响应头 → 客户端保存 Cookie

后续请求 → 客户端自动附带 Cookie 请求头 → 服务器完成身份校验
类型 存储位置 生命周期 安全性 应用场景
会话 Cookie 内存 浏览器关闭即失效 较低 购物车、临时登录
持久 Cookie 硬盘 设定的过期时间前有效 较高 记住我、长期登录

🔐 Postman 实现接口加密与解密

主流加密算法分类

类型 代表算法 特点 应用场景
对称加密 AES / DES / Base64 加解密使用同一密钥,速度快 请求体数据加密
非对称加密 RSA / ECC 公钥加密私钥解密,较安全 数字签名、密钥交换
单向哈希 MD5 / SHA256 不可逆,用于验证完整性 密码存储、数据签名

Postman 中加密实现方式

✅ 使用内置 CryptoJS(推荐)

Postman 内置了 Crypto-js 库,支持 AES、MD5、SHA 等多种加密算法。

AES 加密请求体:

// 在Pre-request Script中添加
const CryptoJS = require('crypto-js');

// 待加密数据
const data = JSON.stringify({
"username": "test",
"password": "123456"
});

// 密钥(需与后端保持一致)
const secretKey = "1234567890123456"; // 16字节密钥(AES-128)

// AES加密(ECB模式 + PKCS7填充)
const encrypted = CryptoJS.AES.encrypt(data, secretKey, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}).toString();

// 设置加密后的数据到请求体
pm.request.body.raw = encrypted;

MD5 签名:

// 在Pre-request Script中添加
const CryptoJS = require('crypto-js');

// 待签名数据
const signData = "param1=value1&param2=value2";
const secretKey = "your-api-secret";

// 生成MD5签名
const signature = CryptoJS.MD5(signData + secretKey).toString();

// 添加签名到请求头
pm.request.headers.upsert({
key: "X-Signature",
value: signature
});

🔄 外部 JS 文件导入

encrypt.js 文件:

function aesEncrypt(data, key) {
const CryptoJS = require('crypto-js');
return CryptoJS.AES.encrypt(data, key).toString();
}

使用方式:

eval(pm.globals.get("encryptScript")); // 从全局变量获取脚本内容
const encrypted = aesEncrypt("敏感数据", "密钥");

🔍 解密响应数据(Tests 脚本中)

在 Tests 脚本中解密响应

// 在Tests脚本中添加
const CryptoJS = require('crypto-js');

// 从响应获取加密数据
const encryptedData = pm.response.text();
const secretKey = "1234567890123456";

// AES解密
const bytes = CryptoJS.AES.decrypt(encryptedData, secretKey);
const decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));

// 断言解密后的数据
pm.expect(decryptedData.code).to.eql(0);
pm.expect(decryptedData.data.username).to.eql("test");

使用环境变量存储解密结果

// 解密后存储到环境变量供后续请求使用
pm.environment.set("decryptedData", decryptedData);

🔐 加密场景示例

RSA 加密(使用公钥):

// 在Pre-request Script中添加(需先导入jsrsasign库)
const JSEncrypt = require('jsencrypt');

// 公钥(从环境变量获取)
const publicKey = pm.environment.get("rsaPublicKey");

// 待加密数据
const data = "敏感信息";

// 加密
const encrypt = new JSEncrypt();
encrypt.setPublicKey(publicKey);
const encrypted = encrypt.encrypt(data);

// 设置到请求体
pm.request.body.raw = encrypted;

带时间戳的签名验证:

// Pre-request Script
const CryptoJS = require('crypto-js');
const timestamp = new Date().getTime();

// 生成签名
const signData = `timestamp=${timestamp}&api_key=your_key`;
const signature = CryptoJS.SHA256(signData + pm.environment.get("apiSecret")).toString();

// 添加到请求头
pm.request.headers.upsert({ key: "X-Timestamp", value: timestamp });
pm.request.headers.upsert({ key: "X-Signature", value: signature });

// Tests脚本验证响应签名
pm.test("响应签名验证", function() {
const responseSign = pm.response.headers.get("X-Response-Sign");
const expectedSign = CryptoJS.SHA256(pm.response.text() + pm.environment.get("apiSecret")).toString();
pm.expect(responseSign).to.eql(expectedSign);
});

好的,以下是针对你提供的 Newman 相关内容的整理,带有适当表情提示,保持简洁且易读:


🚀 Newman

🚀 Newman 核心价值与应用场景

定位:Postman 的命令行运行器,适合自动化执行测试脚本,完美适配 CI/CD 流水线。

核心优势

  • 🖥️ 脱离 GUI,可集成 Jenkins、GitLab CI 等自动化工具
  • 🔄 支持批量运行、参数化测试、生成标准化报告
  • 🌍 跨平台(Linux/Windows/Mac),支持团队协作

🛠 Newman 安装与基础使用

安装

npm install -g newman

(需先安装 Node.js)

基础命令结构

newman run [collection文件路径] [选项参数]

核心参数说明

参数 作用 示例
-e 指定环境变量文件 (JSON) -e environments/test.json
-g 指定全局变量文件 (JSON) -g globals/prod.json
-d 参数化测试数据文件 (CSV/JSON) -d data/users.csv
-n 迭代次数 -n 5 (每个用例执行 5 次)
-r 报告格式(支持多种组合) -r cli,html,json,junit
--reporter-* 定制报告输出(如HTML路径) --reporter-html-export reports/result.html
--delay-request 请求间隔(毫秒) --delay-request 500
--insecure 允许忽略 HTTPS 证书验证 --insecure

🏃‍♂️ 从 Postman 到 Newman 的完整流程

1. 导出 Collection 和 Environment

  • Postman → 选择集合 → 点击 ... → Export → 保存为 collection.json
  • 选择环境 → 点击 ... → Export → 保存为 environment.json

2. 执行基本测试

# 运行集合,使用测试环境变量
newman run collection.json -e environment.json

3. 参数化测试示例

# 使用CSV数据文件进行参数化测试,生成HTML报告
newman run collection.json -e test.env.json -d data/users.csv -n 3 -r html --reporter-html-export reports/test-result.html

4. 并发与全局变量示例

# 模拟10个并发用户,执行5次迭代,输出JUnit格式报告
newman run collection.json -g globals.json -n 5 --concurrency 10 -r junit --reporter-junit-export reports/junit.xml

🤖 Postman + Newman + Jenkins 持续集成实战

核心步骤速览

  1. 环境准备

    • 安装 Jenkins(推荐 Docker 部署)
    • 安装 Node.js 和 Newman(Jenkins 节点)
    • 导出 Postman Collection 和环境变量文件
  2. Jenkins 配置

    • 新建自由风格项目
    • 配置 Git 源码管理
    • 添加构建步骤,执行 Newman 命令
  3. 报告集成

    • 安装 HTML Publisher 插件
    • 配置报告路径
    • 保存并触发构建

🖥 详细操作步骤

环境准备

# Docker安装 Jenkins(推荐)
docker run -d -p 8080:8080 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
# Jenkins节点安装 Newman
npm install -g newman newman-reporter-html
  • 导出 Postman Collection(collection.json)与环境变量文件(environment.json

Jenkins 项目配置

  1. 新建项目

    • 点击 New Item → 输入项目名 → 选择 Freestyle project
  2. 源码管理

    • 选择 Git → 输入仓库地址 → 配置认证信息
  3. 构建步骤

    • 添加 Execute shell(Linux/macOS):
newman run collection.json \
-e environment.json \
-r html \
--reporter-html-export reports/index.html
  1. 构建后操作

    • 添加 Publish HTML reports 插件配置

      • Report name: API测试报告
      • Directory: reports
      • Index page: index.html

🔍 关键命令解析

newman run collection.json \
-e environment.json \ # 环境变量
-d data.csv \ # 参数化测试数据(可选)
-n 5 \ # 迭代次数(可选)
-r html \ # 生成HTML报告
--reporter-html-export reports/index.html # 报告路径

⚠️ 常见问题及解决方案

问题 解决方案
Newman 未找到 检查 Node.js 与 Newman 是否安装,或使用绝对路径(如 /usr/bin/newman
报告为空 确认命令中的报告路径与 Jenkins 配置一致,确认 Newman 执行成功
中文乱码 添加参数 --reporter-html-encoding utf-8
环境变量不生效 确保 environment.json 格式正确,变量名与 Postman 一致

✅ 执行效果验证

  1. 触发 Jenkins 构建
  2. 构建成功后,点击左侧菜单中的 “API测试报告”
  3. 查看测试结果(成功率、响应时间、失败用例)

写在最后

通过本次系统性学习,我对接口测试从原理、流程、工具到自动化的整个链路有了清晰的认识,Postman 不仅适合手动调试,还可以搭配 Newman 实现完整的自动化方案,未来在项目中我也会持续将这些方法应用于实践中。

如果你刚入门接口测试,希望这份整理对你有所帮助,也欢迎交流、讨论更多实战经验 🙌。