学会从Postman接口测试到接口自动化测试

📅 2026/7/19 14:40:47
学会从Postman接口测试到接口自动化测试
本文旨在为API 测试初学者和希望系统掌握 Postman 工具使用的开发者提供一份实用指南。文章将循序渐进地介绍 Postman 的核心概念、基础操作并深入实战环节涵盖从手动接口调试到自动化测试脚本编写最终过渡到自动化测试框架的完整学习路径。通过阅读本文您将能够快速上手 Postman并了解如何将其融入日常的 API 开发与测试工作流中。一、Postman是什么在学习postman之前首先需要了解这个软件是什么。这是一个商业软件不是难以替代的故基本功能可以免费使用。并且这个软件还需要联网使用是一个流行的接口测试入门工具也是一个强大的API开发和测试软件。与Apifox相似。在使用之前需要创建一个账号用户然后登录使用。接下来对这个界面的内容做一个简单的介绍。一定要熟悉英文详细的介绍模块如下图所示根据以上学习可以总结出PostMan的特点1界面好看2满足Http接口测试的基本要求3支持代码但是有缺点1商业软件需要联网、付费功能有限2扩展性差二、接口测试实战企业中的项目一定会包含接口文档接口文档的形式并不重要但是一定要包含关键的信息。这些信息包含请求、响应。一般情况下接口文档都是自动化生成的这里分享一篇值得练习的接口测试项目分享一份接口测试项目非常值得练手 - 程序员二黑 - 博客园当你输入不同的请求会根据请求的所需条件得到不同的响应结果。例如200表示请求成功400表示请求有问题但是格式没有问题与格式无关401表示没有身份凭据422参数不符合要求例如密码不符合规定要求以上这些都是可能会得到的响应结果这是接口文档所体现出来的。接下来就需要在postman当中进行调试。这是一些基本信息POST http://api.fbi.com:9225/rest-v2/login/access_token 必填数据:头请求头content-type: application/json正文请求正文请求的核心数据选填数据的类型表单参数文件上传JSON: application/jsonXMLJSON-RPCemail ( 8 , 30)password ( 8 , 20)打开postman软件然后输入点击send按钮之后会得到以下结果前提是项目要在运行当中。以上这些就是基本调优。三、自动化测试脚本编写自动化测试脚本的前置要求首先要有代码基础推荐使用Python语言因为它有好的自动化生态。使用Python的方式——1.自己编写2.自带电池3.第三方库requests实际情况下使用最多这里可以有一条捷径使用postman来生成自动化测试脚本如图所示这里将通用的部分转换成代码有很多代码语言可以选择。import requests #方法加URL地址 methodPOST url http://api.fbi.com:9225/rest-v2/login/access_token #json头Body payload { email: bf163.com, password: bf552386663 }) headers { content-type: application/json } #################################### response requests.request(method, url, headersheaders, datapayload) print(response.text)这个postman的脚本模版缺少了断言这里需要自己去写断言。例如assert response.status_code200 assert access_token in response.text这里做一个解释requests响应格式Response对象状态码status_code响应头headers正文textJSON:json()当规模比较大时这个脚本就不实用了。因此当遇到专业性的、复杂的、大规模的测试环境时就需要使用自动化测试框架来执行测试用例。这里推荐使用pytest这里附一下pytest学习链接大家可自行学习超详细的 pytest 教程【入门篇】-CSDN博客四、自动化测试框架框架目录结构标准分层auto_test_framework/ ├── config/ # 配置层环境、账号、全局变量 │ └── settings.py ├── common/ # 公共工具层封装请求、日志、token │ └── api_request.py ├── test_cases/ # 测试用例层所有业务接口用例 │ └── test_login.py ├── reports/ # 自动生成测试报告运行后自动创建 ├── pytest.ini # pytest全局配置 └── run_all.py # 一键执行入口1. 第一层配置文件 config/settings.py存放环境地址、账号密码统一管理切换环境只改这里。2. 第二层公共工具 common/api_request.py封装统一发 http 请求的工具自动携带请求头、捕获异常、打印日志。import requests from config.settings import TEST_HOST class ApiRequest: # 全局存储登录后的token所有接口自动复用 token classmethod def send_http(cls, url, methodPOST, json_dataNone): 统一发送接口请求 # 拼接完整接口地址 full_url TEST_HOST url # 统一请求头和截图一致 content-type:application/json headers { Content-Type: application/json } # 如果已经登录自动带上token鉴权 if cls.token: headers[Authorization] fBearer {cls.token} try: # 发送请求 res requests.request(methodmethod, urlfull_url, headersheaders, jsonjson_data) # 打印请求日志方便排查问题 print(f请求地址{full_url}) print(f请求参数{json_data}) print(f响应结果{res.json()}) return res.json() except Exception as e: print(f接口请求异常{str(e)}) return None classmethod def save_token(cls, token_value): 登录成功后保存token到全局 cls.token token_value3. 第三层测试用例 test_cases/test_login.py写登录接口的自动化用例覆盖正常登录、参数超长、密码过短场景。import pytest from common.api_request import ApiRequest from config.settings import LOGIN_URL, TEST_ACCOUNT, USER_EMAIL_RULE, USER_PWD_RULE class TestLogin: def test_login_success(self): 用例1正常账号密码登录成功获取token # 组装请求参数和截图接口参数对应 emailpassword params { email: TEST_ACCOUNT[email], password: TEST_ACCOUNT[password] } # 调用封装好的请求工具 response ApiRequest.send_http(urlLOGIN_URL, json_dataparams) # 断言校验接口返回符合预期自动化核心自动判断结果对错 assert response[code] 200 assert access_token in response[data] # 保存token给后续接口使用 ApiRequest.save_token(response[data][access_token]) def test_login_email_over_length(self): 用例2邮箱超过30位校验失败 long_email a * 31 163.com params { email: long_email, password: TEST_ACCOUNT[password] } response ApiRequest.send_http(urlLOGIN_URL, json_dataparams) # 断言返回参数错误 assert response[code] 400 assert 邮箱长度需8-30位 in response[msg] def test_login_pwd_short(self): 用例3密码少于8位校验失败 params { email: TEST_ACCOUNT[email], password: 123456 } response ApiRequest.send_http(urlLOGIN_URL, json_dataparams) assert response[code] 400 assert 密码长度需8-20位 in response[msg]4. 执行入口 run_all.py一键运行所有用例自动生成可视化 html 测试报告。import pytest import os if __name__ __main__: # 报告保存文件夹 report_path ./reports/login_test_report.html # 执行所有用例并生成报告 pytest.main([ ./test_cases/, -v, -s, f--html{report_path}, --self-contained-html ]) print(f测试执行完成报告路径{os.path.abspath(report_path)})5. 依赖安装运行前执行打开 cmd 输入bashpip install pytest requests pytest-html框架核心好处复用性强发请求、存 token 只写一次上百个接口直接调用不用重复复制代码好维护改接口域名、改请求头只需要改settings.py不用每个用例挨个修改自动校验不用人盯着看返回数据代码assert自动判断结果错了直接标记失败批量执行一次运行几十上百条用例几分钟跑完人工几小时的工作量结果可视化自动生成网页报告清晰看到哪些用例成功、哪些失败、失败原因以上内容借助AI工具来生成的以供参考学习。五、Postman核心应用实战一、项目整体说明1. 项目业务接口清单模块请求方式接口路径功能是否需要Token鉴权登录鉴权POST/rest-v2/login/access_token登录获取access_token否用户管理GET/rest-v2/user/list分页查询用户列表是用户管理POST/rest-v2/user/add新增系统用户是课程管理GET/rest-v2/course/list查询课程分页列表是数据统计GET/rest-v2/statistics/overview获取平台数据大盘是2. 登录接口入参约束对应你截图规则email字符长度 8 ~ 30password字符长度 8 ~ 20请求体统一格式application/json3. 前置准备已安装新版Postman v10及以上接口服务地址可正常访问http://api.fbi.com:9225:9225熟悉基础概念集合Collections、环境Environments、请求头Headers、后置脚本Tests第一阶段基础环境搭建步骤1创建专属工作空间打开Postman左上角My Workspace下拉框点击Create Workspace然后选择API testing填写配置Workspace name云教育系统测试空间Description云教育后台接口实战练习项目访问权限Personal个人私有空间点击Create workspace完成创建自动进入该空间步骤2新建测试集合统一管理所有接口集合作用分类存放全套业务接口支持批量运行、统一配置请求头左侧侧边栏点击文件夹图标Collections→New Collection集合配置Name云教育后台接口测试集合Description包含登录、用户、课程、统计全套业务接口内置Token自动提取、结果断言右下角点击Create保存集合步骤3创建测试环境核心统一管理域名、账号、Token环境变量作用全局复用地址、账号、鉴权令牌修改一处全部接口同步生效左侧侧边栏点击地球图标Environments→Create Environment环境名称云教育测试环境新增以下4组环境变量填写初始值Variable变量名Initial value初始值类型Type变量用途base_urlhttp://api.fbi.com:9225default全局基础域名access_token留空secret存储登录后自动提取的鉴权令牌test_emailadminedu163.comdefault合法测试邮箱满足8-30位test_pwdAdmin123456default合法测试密码满足8-20位右上角点击Save保存环境软件右上角No Environment下拉框选中云教育测试环境激活当前环境步骤4切换左右双栏布局和教学视频界面对齐新版默认上下分栏教学视频为左右分栏一键切换顶部菜单栏点击View勾选Toggle Two-Pane View快捷键CtrlAltVWindows/CmdOptionVMac界面变更左侧编辑请求右侧展示响应返回内容永久生效设置可选右上角齿轮⚙️Settings→General找到Two-pane view开启开关点击Update保存步骤5创建登录基础请求access_token登录接口顶部请求标签栏点击新建空白请求请求方式下拉选择POST地址栏输入变量拼接地址{{base_url}}/rest-v2/login/access_token切换至Headers标签新增请求头KeyContent-TypeValueapplication/json切换至Body标签选中raw右侧下拉框选择JSON填入请求体读取环境变量账号密码{ email: {{test_email}}, password: {{test_pwd}} }点击右上角Save保存至「云教育后台接口测试集合」请求命名01-登录获取access_token步骤6编写Tests后置脚本自动提取Token接口断言脚本作用接口请求完成后自动执行校验返回结果、提取Token存入环境变量后续接口无需手动复制令牌保持登录请求打开切换顶部Tests标签完整复制下方JS脚本粘贴至编辑区// 打印完整返回日志方便调试排查 console.log(登录接口返回完整数据, pm.response.json()); ​ // 断言1接口请求成功返回code200 pm.test(登录接口状态码为200, function () { pm.response.to.have.jsonBody(code, 200); }); ​ // 提取返回的access_token令牌 let res pm.response.json(); let token res.data.access_token; ​ // 将token存入当前激活的测试环境变量 pm.environment.set(access_token, token); console.log(自动提取Token完成, token); ​ // 断言2校验Token非空登录鉴权凭证有效 pm.test(成功获取有效access_token, function () { pm.expect(token).not.eql(); });脚本无需手动保存切换其他标签自动生效步骤7执行登录请求验证自动化提取效果确认右上角激活「云教育测试环境」点击蓝色Send按钮发送请求右侧Response区域查看标准成功返回示例{ code: 200, msg: 登录成功, data: { access_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.xxxxxxx, userInfo: { userId: 1001, realName: 系统管理员 } } }下方切换Test Results标签两条断言全部绿色PASS打开左侧Environments→云教育测试环境access_token变量已自动填充加密字符串基础环境搭建完成第二阶段开发带Token鉴权的业务接口步骤8~12所有业务接口必须携带鉴权请求头Authorization: Bearer {{access_token}}复用登录自动提取的令牌步骤8接口统一请求头批量配置集合全局Header无需每个接口重复添加左侧找到「云教育后台接口测试集合」右键点击Edit切换至Headers标签新增2个全局请求头KeyValue说明Content-Typeapplication/json全局JSON报文格式AuthorizationBearer {{access_token}}全局鉴权令牌点击Update保存集合配置集合内所有接口自动携带该请求头步骤902-分页查询用户列表接口右键集合 →Add request命名02-分页查询用户列表请求方式GET请求地址{{base_url}}/rest-v2/user/list切换Params标签添加分页查询参数KeyValue参数说明pageNum1查询页码pageSize10每页展示条数keyword留空可选姓名/账号模糊搜索切换Tests标签添加校验脚本let res pm.response.json(); // 基础成功断言 pm.test(查询用户列表返回成功code200, (){ pm.response.to.have.jsonBody(code,200) }) // 校验分页数据存在 pm.test(用户列表分页数据正常返回, (){ pm.expect(res.data.total).to.be.a(number); pm.expect(res.data.list).to.be.an(array); })点击Save保存接口点击Send发送请求查看Test Results全部通过步骤1003-新增系统用户接口集合右键 →Add request命名03-新增系统用户请求方式POST地址{{base_url}}/rest-v2/user/addBody→raw→JSON填入新增用户请求体{ username: teacher001, password: Teacher123456, realName: 王老师, userType: 2, roleId: 2, mobile: 13800138000, email: teacher001edu.com }Tests后置脚本let res pm.response.json(); pm.test(新增用户成功code200, (){ pm.response.to.have.jsonBody(code,200) }) pm.test(返回新增用户userId, (){ pm.expect(res.data.userId).to.be.gt(0) })Save保存Send发送执行用例。步骤1104-课程列表查询接口新建请求命名04-课程列表查询请求方式GET请求地址{{base_url}}/rest-v2/course/listParams分页参数KeyValuepageNum1pageSize10status1Tests校验脚本let res pm.response.json(); pm.test(课程列表查询成功, ()pm.response.to.have.jsonBody(code,200)); pm.test(返回课程数组, ()pm.expect(res.data.list).is.an(array));步骤1205-平台数据统计接口新建请求05-平台数据概览请求方式GET请求地址{{base_url}}/rest-v2/statistics/overview无请求参数直接编写Tests脚本校验统计数值let res pm.response.json(); pm.test(数据统计接口请求成功, ()pm.response.to.have.jsonBody(code,200)); pm.test(用户总数大于0, ()pm.expect(res.data.userCount).to.be.gt(0)); pm.test(课程总数大于0, ()pm.expect(res.data.courseCount).to.be.gt(0));第三阶段批量运行集合 生成可视化测试报告步骤13~14步骤13Runner批量执行全套接口用例左侧找到「云教育后台接口测试集合」点击集合右侧三角展开按钮点击Run打开Runner批量执行面板Runner配置项Collection云教育后台接口测试集合Environment云教育测试环境必须选中否则Token失效Iterations1执行1轮Delay0接口间无等待延时点击底部Run 云教育后台接口测试集合自动顺序执行全部5条接口执行完成后页面展示成功用例数、失败用例数、每条接口断言通过情况步骤14导出HTML可视化测试报告Runner批量执行结束后页面右上角点击Export Results选择导出格式HTML自定义报告文件名保存至本地文件夹使用浏览器打开HTML文件可查看完整请求日志、响应报文、每条用例断言详情、失败截图/错误信息可交付开发/产品/测试评审第四阶段拓展进阶实战选做提升测试能力拓展1前置脚本Pre-request Script参数动态生成场景自动生成随机合规邮箱替代固定test_email打开登录请求切换Pre-request Script请求发送前执行粘贴脚本生成随机邮箱// 随机生成8-30位前缀邮箱 let randomStr ; let chars abcdefghijklmnopqrstuvwxyz123456789; for(let i0;i12;i){ randomStr chars[Math.floor(Math.random()*chars.length)] } let randomEmail randomStr edu-test.com; // 覆盖环境变量邮箱 pm.environment.set(test_email, randomEmail); console.log(本次随机生成登录邮箱, randomEmail);拓展2异常场景用例练习负面测试复制登录请求新建2条负面用例用例邮箱长度不足8位预期返回code400参数错误用例密码长度超过20位预期返回code400参数错误修改Body内email/password长度补充Tests断言校验错误码与提示文案拓展3环境切换实战新增生产环境Environments新建环境「云教育生产环境」修改base_url为线上地址Runner运行时切换Environment一键切换测试/生产两套环境执行用例五、常见问题排错指南接口返回401未授权原因access_token为空/失效未激活测试环境集合全局Header未配置解决重新执行登录接口自动刷新Token确认右上角选中对应环境JSON报文解析报错原因Body未选择JSON格式、请求头缺少Content-Type解决集合全局Headers配置Content-Type: application/json断言全部失败排查底部Console控制台查看打印日志核对接口返回字段名称是否与脚本一致批量运行Token失效解决集合内接口执行顺序必须「先登录后业务接口」登录接口会自动刷新环境变量Token以上就是今天的学习记录~