接口测试流程的三个核心环节

一 接口参数化

接口参数化允许你用不同的数据多次运行同一个请求,从而实现数据驱动测试。

1、使用变量(环境/全局变量)

这是最基础的方式,将请求中易变的部分(如URL、参数)替换为变量占位符。

  • 定义变量 :在 Postman 的【variables】 -【Environment】/【 Globals 】中定义变量,例如 base_url。
  • 引用变量 :在请求的 URL、Headers、Body 中使用双花括号引用,如 {``{base_url}}/api/users

【补充】在postman中全局变量和环境变量的使用区别

2、使用数据文件(CSV/JSON)进行批量测试

这是实现数据驱动的核心方法,适合用多组数据验证同一接口。

  • 准备数据文件:

    • CSV文件 :第一行是变量名,后续每行是一条测试数据。例如:username,password user1,pwd1。

    • JSON文件 :必须是++对象数组++,每个对象代表一次迭代的数据。例如:[{"username":"u1","password":"p1"}, ...]。

  • 执行批量测试 :使用 Collection Runner ,选择集合,在 Data 选项卡中上传 CSV 或 JSON 文件,设置迭代次数(Iterations),Postman 会自动用文件中的数据替换请求中的变量并逐行执行。

3、使用内置动态变量

Postman内置了动态变量,用于生成一次性数据,如时间戳、随机数等,适合防重放或生成唯一标识。

  • {``{$guid}}:生成唯一 GUID。

  • {``{$timestamp}}:当前时间戳(秒)。

  • {``{$randomInt}}:0-1000 的随机整数。

4、使用前置脚本(Pre-request Script)生成参数--动态传参

对于需要复杂逻辑生成的参数(如签名、加密参数),可以在请求发送前用 JavaScript 脚本生成。

示例:生成13位时间戳并存入环境变量。

javascript 复制代码
// Pre-request Script
const ts = Date.now();
pm.environment.set("ts", ts);

pm.enviroment.set()就是用来动态传参 的。它通常写在 Pre-request Script(前置脚本)或 Tests(后置断言脚本)中。

4.1、配套的常用操作

有 set(存),就有对应的 get(取)和 unset(删除):

javascript

javascript 复制代码
// 1. 设置(存)
pm.environment.set("token", "abc123");

// 2. 获取(取):读取当前环境变量的值
const myToken = pm.environment.get("token");
console.log(myToken); // 控制台打印 abc123

// 3. 删除(清空)
pm.environment.unset("token");

// 4. 替换:把字符串里的 {{变量名}} 替换成实际值
const url = pm.environment.replaceIn("{{base_url}}/api/user");

5、真实工作流演示(最经典的用法)

假设你有两个接口:1. 登录接口 和 2. 获取用户信息接口 。

要求:必须先登录拿到 token,才能请求第二个接口。

第一步:在"登录接口"的 【scripts】标签页写脚本

javascript

javascript 复制代码
// 1. 获取登录接口返回的 JSON 数据
const res = pm.response.json();

// 2. 提取其中的 token 字段
const myToken = res.token;

// 3. 把 token 存入当前环境变量中(重点就是这一句!)
pm.environment.set("auth_token", myToken);

代码执行后,Postman 右侧"眼睛图标"里的环境变量中,就会自动多出一个 auth_token,它的值就是刚刚获取到的真实 token。

第二步:在"获取用户信息接口"中引用

  • 在 Headers 里写:Authorization: Bearer {``{auth_token}}
  • 当你发送第二个请求时,Postman 会自动用刚才存进去的真实 token 替换掉 {``{auth_token}}。

5.1、token过期(难+)

在实际自动化测试中,token 是有有效期的。 如果 token 过期,脚本会报错。

解决办法 :++通常是在前置脚本(Pre-request Script)中增加一个判断逻辑++,或者直接用一个独立的请求先刷新 token 再跑后续用例;如果是大型项目,我会用 Python + Requests + Pytest 框架结合 Fixture 来处理 token 的自动刷新和前置依赖。"

二、环境变量管理

环境变量管理用于在不同环境(开发、测试、生产)之间无缝切换配置,避免硬编码。

1. 创建与管理环境

  • 选择环境

  • 在 Postman 的【variables】 -【Environment】中添加。

2. 变量的作用域与优先级

Postman 的变量有多种作用域,当同名变量存在时,优先级高的会覆盖优先级低的。优先级从高到低依次为:

局部变量 (Local) > 数据变量 (Data) > 环境变量 (Environment) > 集合变量 (Collection) > 全局变量 (Global)。

  • 实践建议 :将通用配置(如超时时间)放在全局变量 中,将环境相关的配置(如 base_url)放在环境变量中,便于按环境覆盖。

3. 在请求和脚本中使用

变量定义好之后,最关键的一步就是如何在请求和脚本中正确引用它。下面分别介绍在请求界面和脚本代码中的两种使用方式。

  • 在请求中 :直接使用 {``{variable_name}} 引用。无论是 URL、Headers 还是 Body 中,只要出现双花括号包裹的变量名,Postman 都会在发送请求前自动将其替换为当前生效的变量值。例如,在 URL 中写 {``{base_url}}/api/users,实际发送时会被替换为 https://api.example.com/api/users。

  • 在脚本中 :使用 pm.environment.get("variable_name") 读取,使用 pm.environment.set("variable_name", "value") 写入。这种方式适合在 Pre-request Script 或 Tests 中动态读取和更新变量,例如从登录响应中提取 token 后存入环境变量,供后续请求使用。

补充说明 :在请求中引用变量时,如果变量不存在,Postman 会保留原始的双花括号文本并给出提示;而在脚本中使用 pm.environment.get() 读取不存在的变量时,会返回 undefined,因此建议在读取前先判断变量是否存在,避免脚本报错。

4. 导出与团队协作

你可以通过 Manage Environments 中的 Export 功能,将环境导出为 JSON 文件,以便在团队中共享或在多台机器间同步。建议将不含敏感信息的环境文件纳入版本控制。

三、断言校验

断言用于自动验证接口响应是否符合预期,是自动化测试的核心。Postman 使用 JavaScript 在 Tests 标签页中编写断言。

1. 核心语法

推荐使用 pm.test() 和 pm.expect() 组合,语法更直观。

  • pm.test("测试名称", function () { ... }):定义一个测试用例。

  • pm.expect(实际值).to.断言方法(期望值):进行断言比较。

2. 常见断言类型与示例

断言类型 示例代码 说明
状态码 pm.response.to.have.status(200); 验证HTTP状态码为200。
响应体包含字符串 pm.expect(pm.response.text()).to.include("success"); 验证响应文本包含特定字符串。
JSON字段值 pm.expect(pm.response.json().id).to.eql(156894); 验证JSON响应中 id 字段的值等于156894。
JSON字段存在 pm.expect(pm.response.json()).to.have.property("token"); 验证JSON响应中包含 token 字段。
响应时间 pm.expect(pm.response.responseTime).to.be.below(500); 验证响应时间小于500毫秒。
响应头 pm.response.to.have.header("Content-Type"); 验证响应头包含 Content-Type 字段。

3. 高级断言:JSON Schema 校验

对于复杂的JSON结构,可以使用 tv4 库(Postman内置)进行 Schema 校验,确保数据结构完全符合规范。

javascript

javascript 复制代码
const schema = {
    "type": "object",
    "properties": {
        "name": { "type": "string" },
        "age": { "type": "number" }
    },
    "required": ["name", "age"]
};
pm.test("Validate JSON Schema", function () {
    pm.expect(tv4.validate(pm.response.json(), schema)).to.be.true;
});

4. 查看断言结果

发送请求后,Postman 会在底部的 Test Results 标签页中显示所有断言的执行结果。绿色 PASS 表示通过,红色 FAIL 表示失败,并会显示具体的错误信息(如"expected response to have status code 200 but got 404")。

四、使用场景--数据驱动测试

比如登录功能接口测试 参数用户名和密码会存在多个

正确的,错误的这样就需要不停的去修改很麻烦,这个时候就可以使用参数化去解决。

1、一个txt或者csv文件

2、参数的value就不能写具体的值,而是引用参数{{参数名}}(参数名和文件中的名字保持一致)

3、run的时候选择电脑端的csv文件执行即可(目前收费)

相关推荐
知野小兔1 小时前
JavaScript 数组方法大全(超详细整理)
开发语言·前端·javascript
哈__1 小时前
飞牛OS还在手动维护?我用Ansible把重复操作写成了Playbook
开发语言·ansible·php
道尔柯南1 小时前
【QT】从零认识 Qt:跨平台 C++ GUI 开发入门
开发语言·c++·qt
喜欢coding的谢同学1 小时前
Go语言常用设计模式基础和实践案例介绍
开发语言·设计模式·golang
MayZork1 小时前
std::filesystem 文件操作详解
开发语言·c++·qt
Nebula_g3 小时前
JavaSE加强:IO流
java·开发语言·windows·stream·javase
Ada's10 小时前
【计算机基础系列】003:Python数据结构
开发语言·数据结构·python
2601_9628857211 小时前
如何用 Python 计算 TRIX 三重指数平滑均线指标?
开发语言·python
还卿一钵无情泪11 小时前
Unsloth 微调 构建自己的大模型 没有GPU也能微调
linux·开发语言·人工智能·python·大模型·nlp·unsloth