软件测试接口测试从入门到精通:Postman入门到精通
05 Postman 入门到精通 - 接口测试瑞士军刀本章目标掌握Postman的安装配置、基础使用、高级功能能够独立完成接口测试工作。5.1 Postman 简介什么是PostmanPostman是一款流行的API开发协作平台提供接口测试、文档生成、Mock服务、监控等功能。为什么选择Postman免费且功能强大界面直观易用支持多种协议团队协作方便自动化测试支持丰富的生态系统安装Postman下载地址https://www.postman.com/downloads/支持平台Windows、macOS、Linux、Web版浏览器直接使用5.2 Postman 界面导览顶部栏新建按钮、环境选择器、搜索框左侧栏Collections接口集合、APIsAPI定义、Environments环境变量、History请求历史中间区域请求标签页、响应区域底部栏控制台、Runner5.3 发送第一个请求步骤打开Postman点击左上角新建请求选择HTTP方法GET输入URLhttps://jsonplaceholder.typicode.com/posts/1点击Send示例响应{ userId: 1, id: 1, title: sunt aut facere repellat provident occaecati excepturi optio reprehenderit, body: quia et suscipit... }5.4 请求组件详解URL和参数https://api.example.com/users?page1size20 ↑ ↑ ↑ 基础URL 路径 查询参数在Postman中设置Params标签添加查询参数自动拼接到URLPath Variables路径变量/users/:id请求头Headers常用Header说明示例Content-Type请求体格式application/jsonAuthorization认证信息Bearer token123Accept期望响应格式application/jsonUser-Agent客户端标识PostmanRuntime/7.32.3请求体BodyPostman支持多种Body类型noneGET请求常用form-data文件上传表单x-www-form-urlencoded普通表单提交rawJSON/XML/Textbinary单文件上传认证AuthorizationNo AuthBearer TokenBasic AuthAPI KeyOAuth 2.0Digest AuthBearer Token示例选择Bearer Token类型在Token框输入eyJhbGciOiJIUzI1NiIs...Postman自动添加到HeaderAuthorization: Bearer eyJhbG...5.5 环境变量和全局变量为什么用变量场景开发环境、测试环境、生产环境的API地址不同开发环境https://api-dev.example.com 测试环境https://api-test.example.com 生产环境https://api.example.com不用变量每次切换环境都要改URL用变量只需切换环境URL自动变化创建环境点击右上角齿轮图标 →Manage Environments点击Add设置变量变量名初始值当前值baseUrlhttps://api-dev.example.comhttps://api-dev.example.comtoken使用变量{{baseUrl}}/users → 自动替换为 https://api-dev.example.com/users {{token}} → 自动替换为变量值变量作用域优先级Data Environment Collection Global5.6 集合Collection管理什么是CollectionCollection是一组相关请求的集合可以组织、共享、运行。创建Collection用户管理系统 ├── 01 认证模块 │ ├── 登录 │ ├── 登出 │ └── 刷新Token ├── 02 用户模块 │ ├── 获取用户列表 │ ├── 获取用户详情 │ ├── 创建用户 │ ├── 更新用户 │ └── 删除用户 └── 03 订单模块 ├── 创建订单 ├── 获取订单列表 └── 取消订单Collection的进阶功能功能说明Pre-request Script请求前执行的脚本Tests请求后执行的断言脚本Variables集合级别的变量Run批量运行集合中的所有请求5.7 断言Tests为什么需要断言断言是验证接口返回结果是否符合预期的自动化检查。常用断言示例// 1. 验证状态码 pm.test(状态码是200, function () { pm.response.to.have.status(200); }); // 2. 验证响应时间 pm.test(响应时间小于500ms, function () { pm.expect(pm.response.responseTime).to.be.below(500); }); // 3. 验证JSON字段 pm.test(返回正确的用户名, function () { var jsonData pm.response.json(); pm.expect(jsonData.name).to.eql(张三); }); // 4. 验证数组长度 pm.test(返回10条数据, function () { var jsonData pm.response.json(); pm.expect(jsonData.data.list).to.have.lengthOf(10); }); // 5. 验证包含某个字段 pm.test(响应包含token字段, function () { pm.expect(pm.response.text()).to.include(token); }); // 6. 验证Header pm.test(Content-Type是JSON, function () { pm.response.to.have.header(Content-Type); pm.expect(pm.response.headers.get(Content-Type)).to.include(application/json); });断言模板速查表断言类型代码示例状态码pm.response.to.have.status(200)响应时间pm.expect(pm.response.responseTime).to.be.below(500)JSON字段值pm.expect(jsonData.code).to.eql(0)字段存在pm.expect(jsonData).to.have.property(data)数组长度pm.expect(jsonData.list).to.have.lengthOf(5)包含字符串pm.expect(pm.response.text()).to.include(success)正则匹配pm.expect(pm.response.text()).to.match(/token/)5.8 Pre-request Script什么是Pre-request ScriptPre-request Script是在发送请求之前执行的JavaScript代码常用于动态生成参数、设置变量等。常用场景// 1. 生成时间戳 pm.environment.set(timestamp, new Date().getTime()); // 2. 生成随机数 pm.environment.set(randomNum, Math.floor(Math.random() * 1000)); // 3. 生成UUID const uuid require(uuid); pm.environment.set(uuid, uuid.v4()); // 4. 计算签名示例 const crypto require(crypto-js); const sign crypto.MD5(appKey pm.environment.get(timestamp)).toString(); pm.environment.set(sign, sign);5.9 批量运行Collection Runner步骤点击Collection右侧的...→Run Collection或使用底部工具栏的Runner数据驱动测试CSV数据文件示例username,password,expectedCode admin,123456,0 admin,wrong,1001 ,123456,1002 test,123,1003在Tests中使用数据pm.test(验证返回码, function () { var jsonData pm.response.json(); pm.expect(jsonData.code).to.eql(parseInt(pm.iterationData.get(expectedCode))); });5.10 接口关联数据传递场景登录接口返回token后续接口需要使用这个token。实现步骤Step 1登录接口的Tests中提取token// 从响应中提取token var jsonData pm.response.json(); pm.environment.set(auth_token, jsonData.data.token);Step 2后续接口使用tokenAuthorization: Bearer {{auth_token}}5.11 Mock Server什么是Mock ServerMock Server是模拟API服务器当后端接口还没开发完成时可以先模拟响应进行前端/测试开发。创建Mock Server点击左侧→Mock Server定义请求路径和响应保存并获取Mock URL示例Mock URL: https://xxx.mock.pstmn.io 请求: GET /api/users 响应: { code: 0, data: [ {id: 1, name: Mock用户1}, {id: 2, name: Mock用户2} ] }5.12 导入和导出导出Collection右键Collection →Export选择格式Collection v2.1推荐保存为JSON文件导入CollectionFile →Import选择文件或粘贴URL支持Swagger/OpenAPI导入命令行运行Newman# 安装Newman npm install -g newman # 运行Collection newman run collection.json -e environment.json # 生成HTML报告 newman run collection.json -r html --reporter-html-export report.html5.13 Postman 最佳实践命名规范✓ GET /users - 获取用户列表 ✓ POST /users - 创建用户 ✗ 获取用户列表 ✗ 接口1变量命名✓ baseUrl, authToken, userId ✗ url, token, id断言规范// 好的断言描述清晰 pm.test(登录成功后返回有效的JWT token, function () { var jsonData pm.response.json(); pm.expect(jsonData.code).to.eql(0); pm.expect(jsonData.data.token).to.not.be.empty; pm.expect(jsonData.data.token).to.match(/^eyJ/); }); // 差的断言描述不清 pm.test(test1, function () { pm.expect(pm.response.json().code).to.eql(0); });5.14 本章小结Postman核心功能基础功能发送请求、查看响应、保存请求变量系统环境变量、全局变量、集合变量断言测试状态码验证、响应时间、JSON字段高级功能Pre-request Script、Collection Runner、Mock Server、Newman命令行课后练习 实践题使用Postman调用https://jsonplaceholder.typicode.com的接口完成GET获取文章列表、POST创建新文章、PUT更新文章、DELETE删除文章。进阶题创建一个Collection实现登录→获取用户信息→更新用户的完整流程使用环境变量传递token。挑战题使用Collection Runner CSV文件实现数据驱动的登录接口测试测试多种用户名密码组合。5.15 下章预告下一章我们将学习curl命令行工具它是接口测试和调试的终极利器Postman是接口测试的瑞士军刀掌握它你就拥有了测试任何API的能力。