一 接口参数化
接口参数化允许你用不同的数据多次运行同一个请求,从而实现数据驱动测试。
1、使用变量(环境/全局变量)
这是最基础的方式,将请求中易变的部分(如URL、参数)替换为变量占位符。
定义变量:在 Postman 的【variables】 -【Environment】/【
Globals】中定义变量,例如base_url。
引用变量:在请求的 URL、Headers、Body 中使用双花括号引用,如
{{base_url}}/api/users
【补充】在postman中全局变量和环境变量的使用区别
2、使用数据文件(CSV/JSON)进行批量测试
这是实现数据驱动的核心方法,适合用多组数据验证同一接口。
准备数据文件:
CSV文件:第一行是变量名,后续每行是一条测试数据。例如:
username,passworduser1,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位时间戳并存入环境变量。
// 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
// 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
// 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
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文件执行即可(目前收费)