软件测试学习条记丨Postman实战训练

[复制链接]
发表于 2026-1-23 20:38:58 | 显示全部楼层 |阅读模式
本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32096#h-22
  二、实战训练

2.1 宠物市肆接口文档分析

接口文档:http://petstore.swagger.io ,这是宠物市肆接口的 swagger 文档
2.1.1 什么是 swagger



  • Swagger 是一个用于天生、形貌和调用 RESTful 接口的 WEB 服务。
  • 普通的来讲,Swagger 就是将项目中全部想要袒露的接口展如今页面上,而且可以举行接口调用和测试的服务。
  • 如今大部门的项目都使用了 swagger,由于如许后端开辟就不必要专门为接口使用者编写接口文档。
  • 当接口更新之后,只必要修改代码中的 Swagger 形貌就可以及时天生新的接口文档,如许就可以制止接口文档老旧不能使用的标题。
  • 而且通过 Swagger 页面,可以直接举行接口调用,低落了项目开辟阶段的调试资本。
2.1.2 分析查询接口

接口的 swagger 文档怎么看。


2.1.3 调试宠物

怎么在页面上调试接口?
以查询宠物接口举例:


  • 点击 Try it out
  • 哀求参数 status 选择 available
  • 点击 Execute 发出哀求
  • 下方展示当前哀求的 Curl 下令
  • 下方展示当前哀求的完备 URL
  • 下方展示相应状态码和对应的相应体
  • 有了 swagger,就可以非常方便的获取到接口的信息,从而计划测试用例
2.2 接口测试用例计划



  • 宠物的 增、删、改、查 冒烟测试用例
查询宠物

新增宠物

更新宠物信息

删除宠物

2.3 编写断言

Tests 重要用来做断言,比如要测试返回效果是否含有某一字符串,就可以用到 Tests。


  • 断言,就是效果和预期对比
  • 如果同等,则用例通过,返回PASS
  • 如果差别等,断言失败,用例失败,失败返回 FAIL
test 中可以使用 JavaScript 脚原来举行断言的编写。如果本身不认识 JS 语法的话也没有关系,Postman 当中已经预置好了常用的断言。



  • 验证相应状态码Status Code:Code is 200
  1. pm.test("响应状态码为 200", function () {
  2.   pm.response.to.have.status(200);
  3. });
复制代码
status 方法中传入的值 200 就是预期效果,可以把括号中的状态码改为恣意必要的值,比如 400。


  • 查抄相应体中是否包罗某个字符串Response Body:contains string
  1. pm.test("响应体中包含预期的字符串", function () {
  2.   pm.expect(pm.response.text()).to.include("doggie");
  3. });
复制代码


  • 检测 JSON 中的某个值是否便是预期的值Response Body:JSON value check
  1. pm.test("宠物名称为 doggie", function () {
  2.   var jsonData = pm.response.json();
  3.   pm.expect(jsonData[0].name).to.eql("doggie");
  4. });
复制代码
var jsonData 是界说了一个变量,然后把相应数据颠末 JSON 格式化之后,赋值给了界说好的变量。然后用 expect 这个方法,把相应数据中的 url 这个 key 中的值提取出来,用 eql 这个方法去和括号中的字符串做比力,如果这两个值是同等的,返回 true,如果差别等就返回 false。


  • 验证相应体是否与某个字符串完全雷同Response Body:Is equal to a string
  1. pm.test("Body is correct", function () {
  2.   pm.response.to.have.body("response_body_string");
  3. });
复制代码
这是一个全量的断言,把相应的数据和一个确定的字符串去做比力,如果完全雷同返回 true,不完全雷同返回 false。


  • 验证相应头信息中的 Content-Type 是否存在Response Body:Content-Type header check
  1. pm.test("Content-Type is present", function () {
  2.   pm.response.to.have.header("Content-Type");
  3. });
复制代码
这个断言可以用来测试相应的头信息中是否包罗某个字段,Content-type 可以换位其他的字段


  • 验证相应时间是否小于某个值Response time is less than 200ms
  1. pm.test("Response time is less than 200ms", function () {
  2.   pm.expect(pm.response.responseTime).to.be.below(200);
  3. });
复制代码
可以用来判断相应的时间是否凌驾了某一个值,预设的是 200ms,如果没有凌驾返回 true,凌驾预设的值返回 false
2.4 Postman 完成接口测试



  • 创建测试集
  • 编写断言
  • 运行测试集
  • 查察测试效果
2.4.1 创建测试集



  • 选择左侧边栏的 Collecions,点击 + 进入新建 collection 界面,定名为【宠物市肆】

  • 如今的这四个接口是对宠物的操纵,以是可以在 collection 中再创建一层文件夹,点击 Add folder,定名为【宠物】


2.4.2 查询宠物接口



  • 定名:查询宠物
  • 哀求方法:保持 GET 稳固
  • 哀求 URL:
  • 哀求参数:GET 哀求参数要在 Params 中设置,status=available

2.4.3 新增宠物接口



  • 定名:新增宠物
  • 哀求方法:换为 POST
  • 哀求 URL:
  • 哀求参数:POST 哀求的参数必要放在 body – raw 中,这里的哀求参数格式为 JSON
注意: id 具有唯一性必要举行修改
  1. {
  2.   "id": 9223372000001083222,
  3.   "category": {
  4.     "id": 1,
  5.     "name": "cat"
  6.   },
  7.   "name": "miao",
  8.   "photoUrls": [
  9.     "string"
  10.   ],
  11.   "tags": [
  12.     {
  13.       "id": 5,
  14.       "name": "cute"
  15.     }
  16.   ],
  17.   "status": "available"
  18. }
复制代码



  • 完成断言的编写

  1. pm.test("响应状态码为 200", function () {
  2.     pm.response.to.have.status(200);
  3. });
  4. pm.test("响应体正确", function () {
  5.     pm.response.to.have.body("{"id":9223372000001083222,"category":{"id":1,"name":"cat"},"name":"miao","photoUrls":["string"],"tags":[{"id":5,"name":"cute"}],"status":"available"}");
  6. });
复制代码
2.4.4 更新宠物接口



  • 定名:更新宠物信息
  • 哀求方法:换为 PUT
  • 哀求 URL:
  • 哀求参数:POST 哀求的参数必要放在 body – raw 中,这里的哀求参数格式为 JSON
比如修改宠物姓名:
  1. {
  2.   "id": 9223372000001083333,
  3.   "category": {
  4.     "id": 1,
  5.     "name": "cat"
  6.   },
  7.   "name": "小黑",
  8.   "photoUrls": [
  9.     "string"
  10.   ],
  11.   "tags": [
  12.     {
  13.       "id": 5,
  14.       "name": "cute"
  15.     }
  16.   ],
  17.   "status": "available"
  18. }
复制代码


  • 添加断言
  1. pm.test("响应状态码为 200", function () {
  2.     pm.response.to.have.status(200);
  3. });
  4. pm.test("响应体正确", function () {
  5.     pm.response.to.have.body("{"id":9223372000001083333,"category":{"id":1,"name":"cat"},"name":"小黑","photoUrls":["string"],"tags":[{"id":5,"name":"cute"}],"status":"available"}");
  6. });
复制代码

2.4.5 删除宠物接口



  • 定名:删除宠物
  • 哀求方法:换为 DELETE
  • 哀求 URL:
  • 哀求参数:宠物 id,直接跟在 URL 中
  1. https://petstore.swagger.io/v2/pet/9223372000001083333
复制代码


  • 添加断言 这里重点断言业务错误码 code 和 message 这两个字段的值就可以。
  1. pm.test("响应状态码为 200", function () {
  2.     pm.response.to.have.status(200);
  3. });
  4. pm.test("业务错误码为 200", function () {
  5.     var jsonData = pm.response.json();
  6.     pm.expect(jsonData.code).to.eql(200);
  7. });
  8. pm.test("message 为删除的宠物 id", function () {
  9.     var jsonData = pm.response.json();
  10.     pm.expect(jsonData.message).to.eql("9223372000001083222");
  11. });
复制代码

2.4.6 运行测试集

对于 collection 来说,每一级的目次都可以单独运行。比如如今只想要运行宠物操纵相干用例,那么就可以点击宠物,进入宠物 folder 页面。


  • 点击 Run 按钮进入 collection 实验页面




  • 可以选择要实验的 collection,选择环境变量、选择实验次数、选择耽误时间,选择测试数据(做数据驱动)
  • 点击 Run 按钮即可开始实验
2.4.7 查察测试效果

运行完毕后会进入测试效果页面,就可以查察测试效果了

2.4.8 变量



  • Data:在测试会集上传的数据
  • Environment:环境范围
  • Collection:聚集范围
  • Global:全局范围
  • Local:在脚本中设置的变量
变量界说

Postman 的变量重要用于参数化和关联,常用变量可以按使用范围设置。
Local
Local 级别的变量着实就是在脚本中界说的变量,比如删除宠物信息用例中,断言里使用了查验 JSON 格式中某个 key 的值

这内里的 jsonData 就是一个 Local 级别的变量。它只在这条断言中收效。
Global
如果是大部门的接口都会用到的变量,可以设置为全局变量,如许的话 Postman 中的全部接口都可以直接调用。
点击左侧的 Environments,点击 Globals 进入全局变量设置界面。
在这里可以设置变量



  • VARIAVLE: 变量名
  • INITIAL VALUE: 共享初始值, 用于团队共享时供别人使用的默认值
  • CURRENT VALUE: 当前值, 本身当前使用的变量值 (一样平常我们只用设置这个值即可)
  • Perisit All: 保持全部, 将当前本身使用的值 (CURRENT VALUE) 更换全部的初始值
  • Reset All: 重置全部, 将当前全部的 CURRENT VALUE 重置为与当前初始值一样
这里我们设置一个全局变量名为 status ,INITIAL VALUE 设置为 available,然后点击 sava 生存设置
如今一个全局变量已经设置好了。
在 Postman 中的使用为 {{ 变量名 }},当 Postman 剖析变量时,字符串 {{ 变量名 }} 会被更换为相应的值。
比如进入查询宠物接口,这时间就可以把 status 的值更换为全局变量。

除了手动设置之外,还可以通过脚本的方式设置。
一样平常设置变量会在哀求之前,可以在 Pre-request Script 当中来完成。
Postman 已经给我封装好了现成的设置和获取全局变量的脚本,可以直接使用。



  • 进入查询宠物接口
  • 在 Pre-request Script 当中点击 Set a global variable
  1. pm.globals.set("status", "sold");
复制代码
如许设置就相当于在哀求之前,先把全局变量 status 的值设置为了 sold,以是哀求的效果也是返回的 sold 状态的宠物信息。
如今再看下 Globals 当中,status 如今的值

这就分析哀求前使用脚本设置全局变量是乐成的。
那如果必要在脚本当中获取全局变量的值应该怎么办
比如如今要在脚本中获取 status 这个全局变量的值,而且打印在控制台。
  1. var status = pm.globals.get("status");
  2. console.log(status)
复制代码
点击 Postman 下方的 Console 按钮,就可以打开 Postman 中的控制台,这里就可以看到全部的 log 日志日志

Collection
如果是某一个测试会集的接口会用到的变量,可以设置为测试集变量。
比如点击 Collections 中的宠物市肆,可以看到在测试集当中也可以设置鉴权方式,哀求前脚本,测试脚本和变量。
点击 Variables,就可以设置对应的测试集变量。
注意,宠物市肆的下一级,宠物 folder 只可以设置鉴权方式和脚本,变量是不可以设置的。
回到宠物市肆的变量设置页面。
前面的宠物操纵都涉及到了宠物 id 的值,可以把宠物 id 设置为测试集变量。

设置好之后,新增宠物、更新宠物和删除宠物接口中的宠物 id 就都可以引用这个测试集变量。


  • 新增宠物

对应的断言也得做修改
起首要先获取到这个测试集变量,然后再把变量值拼接到预期效果当中就可以了。
  1. var petId = pm.collectionVariables.get("petId");
  2. pm.test("响应体正确", function () {
  3.     pm.response.to.have.body("{"id":" + petId + ","category":{"id":1,"name":"cat"},"name":"miao","photoUrls":["string"],"tags":[{"id":5,"name":"cute"}],"status":"available"}");
  4. });
  5. pm.test("Body matches string", function () {
  6.     pm.expect(pm.response.text()).to.include("{"id":" + petId + ","category":{"id":1,"name":"cat"},"name":"miao","photoUrls":["string"],"tags":[{"id":5,"name":"cute"}],"status":"available"}");
  7. });
复制代码



  • 更新宠物信息接口

修改断言,思绪和新增宠物的同等。
  1. var petId = pm.collectionVariables.get("petId");
  2. pm.test("响应状态码为 200", function () {
  3.     pm.response.to.have.status(200);
  4. });
  5. pm.test("响应体正确", function () {
  6.     pm.response.to.have.body("{"id":" + petId + ","category":{"id":1,"name":"cat"},"name":"小黑","photoUrls":["string"],"tags":[{"id":5,"name":"cute"}],"status":"available"}");
  7. });
复制代码


  • 删除宠物

修改断言
  1. var petId = pm.collectionVariables.get("petId");
  2. pm.test("message 为删除的宠物 id", function () {
  3.     var jsonData = pm.response.json();
  4.     pm.expect(jsonData.message).to.eql(petId);
  5. });
复制代码
Enviroment
怎么设置和使用环境变量。
环境变量一样平常来说是用来切换差别测试环的境。
比如一套接口要在差别的环境上测试时, 可以新建两个环境,比如 test 环境和 stage 环境, 两个环境中添加 base_url 变量并设置差别的值, 哀求中接口的url中使用 {{ base_url }}, 如许只需在 Postman 中切换环境就可以测试差别的环境。
如今先创建一个 test 环境。
左侧边栏点击 Environments,点击 + 进入创建新环境的界面。


  • 定名:测试环境
  • 变量名:baseURL
  • 初始值:https://petstore.swagger.io/v2

选择测试环境

然后四个接口就可以修改一下 url 的设置了。


  • 查询宠物:{{ baseURL }}/pet/findByStatus?status={{ status }}
  • 新增宠物:{{ baseURL }}/pet
  • 更新宠物:{{ baseURL }}/pet
  • 删除宠物:{{ baseURL }}/pet/{{ petId }}
修改完毕之后,记得生存设置。然后再次运行测试集。
Data
data 级别的就是在测试会集导入数据,通过数据驱动的方式完成测试。
变量的优先级

当变量重名的时间,优先级从高至低为:Data → Enviroment → Collection → Global → Local。

保举学习

【霍格沃兹测试开辟】7天软件测试快速入门带你从零根本/转行/小白/就业/测试用例计划实战
【霍格沃兹测试开辟】最新版!Web 自动化测试从入门到醒目/ 电子商务产物实战/Selenium (上集)
【霍格沃兹测试开辟】最新版!Web 自动化测试从入门到醒目/ 电子商务产物实战/Selenium (下集)
【霍格沃兹测试开辟】明星讲师经心打造最新Python 教程软件测试开辟从业者必学(上集)
【霍格沃兹测试开辟】明星讲师经心打造最新Python 教程软件测试开辟从业者必学(下集)
【霍格沃兹测试开辟】佳构课合集/ 自动化测试/ 性能测试/ 精准测试/ 测试左移/ 测试右移/ 人工智能测试
【霍格沃兹测试开辟】腾讯/ 百度/ 阿里/ 字节测试专家技能沙龙分享合集/ 精准化测试/ 流量回放/Diff
【霍格沃兹测试开辟】Pytest 用例布局/ 编写规范 / 免费分享
【霍格沃兹测试开辟】JMeter 及时性能监控监控平台/ 数据分析展示体系Grafana/Docker 安装
【霍格沃兹测试开辟】接口自动化测试的场景有哪些?为什么要做接口自动化测试?怎样一键天生测试陈诉?
【霍格沃兹测试开辟】口试本领引导/ 测试开辟本领评级/1V1 模仿口试实战/ 冲刺年薪百万!
【霍格沃兹测试开辟】腾讯软件测试本领评级标准/ 要评级表格的接洽我
【霍格沃兹测试开辟】Pytest 与Allure2 一键天生测试陈诉/ 测试用例断言/ 数据驱动/ 参数化
【霍格沃兹测试开辟】App 功能测试实战快速入门/adb 常用下令/adb 压力测试
【霍格沃兹测试开辟】阿里/ 百度/ 腾讯/ 滴滴/ 字节/ 一线大厂口试真题解说,卷完拿高薪Offer !
【霍格沃兹测试开辟】App自动化测试零根本快速入门/Appium/自动化用例录制/参数设置
【霍格沃兹测试开辟】怎样用Postman 做接口测试,从入门到实战/ 接口抓包(最新最全教程)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表