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

news2024/11/22 11:40:44

本文转自测试人社区,原文链接: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
pm.test("响应状态码为 200", function () {
  pm.response.to.have.status(200);
});

status 方法中传入的值 200 就是预期结果,可以把括号中的状态码改为任意需要的值,比如 400

  • 检查响应体中是否包含某个字符串Response Body:contains string
pm.test("响应体中包含预期的字符串", function () {
  pm.expect(pm.response.text()).to.include("doggie");
});
  • 检测 JSON 中的某个值是否等于预期的值Response Body:JSON value check
pm.test("宠物名称为 doggie", function () {
  var jsonData = pm.response.json();
  pm.expect(jsonData[0].name).to.eql("doggie");
});

var jsonData 是定义了一个变量,然后把响应数据经过 JSON 格式化之后,赋值给了定义好的变量。然后用 expect 这个方法,把响应数据中的 url 这个 key 中的值提取出来,用 eql 这个方法去和括号中的字符串做比较,如果这两个值是一致的,返回 true,如果不一致就返回 false

  • 验证响应体是否与某个字符串完全相同Response Body:Is equal to a string
pm.test("Body is correct", function () {
  pm.response.to.have.body("response_body_string");
});

这是一个全量的断言,把响应的数据和一个确定的字符串去做比较,如果完全相同返回 true,不完全相同返回 false

  • 验证响应头信息中的 Content-Type 是否存在Response Body:Content-Type header check
pm.test("Content-Type is present", function () {
  pm.response.to.have.header("Content-Type");
});

这个断言可以用来测试响应的头信息中是否包含某个字段,Content-type 可以换位其他的字段

  • 验证响应时间是否小于某个值Response time is less than 200ms
pm.test("Response time is less than 200ms", function () {
  pm.expect(pm.response.responseTime).to.be.below(200);
});

可以用来判断响应的时间是否超过了某一个值,预设的是 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 具有唯一性需要进行修改

{
  "id": 9223372000001083222,
  "category": {
    "id": 1,
    "name": "cat"
  },
  "name": "miao",
  "photoUrls": [
    "string"
  ],
  "tags": [
    {
      "id": 5,
      "name": "cute"
    }
  ],
  "status": "available"
}

  • 完成断言的编写

pm.test("响应状态码为 200", function () {
    pm.response.to.have.status(200);
});

pm.test("响应体正确", function () {
    pm.response.to.have.body("{"id":9223372000001083222,"category":{"id":1,"name":"cat"},"name":"miao","photoUrls":["string"],"tags":[{"id":5,"name":"cute"}],"status":"available"}");
});

2.4.4 更新宠物接口

  • 命名:更新宠物信息
  • 请求方法:换为 PUT
  • 请求 URL:
  • 请求参数:POST 请求的参数需要放在 body – raw 中,这里的请求参数格式为 JSON

比如修改宠物姓名:

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

pm.test("响应体正确", function () {
    pm.response.to.have.body("{"id":9223372000001083333,"category":{"id":1,"name":"cat"},"name":"小黑","photoUrls":["string"],"tags":[{"id":5,"name":"cute"}],"status":"available"}");
});

2.4.5 删除宠物接口

  • 命名:删除宠物
  • 请求方法:换为 DELETE
  • 请求 URL:
  • 请求参数:宠物 id,直接跟在 URL
https://petstore.swagger.io/v2/pet/9223372000001083333
  • 添加断言 这里重点断言业务错误码 codemessage 这两个字段的值就可以。
pm.test("响应状态码为 200", function () {
    pm.response.to.have.status(200);
});

pm.test("业务错误码为 200", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.code).to.eql(200);
});

pm.test("message 为删除的宠物 id", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.message).to.eql("9223372000001083222");
});

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 重置为与当前初始值一样

这里我们设置一个全局变量名为 statusINITIAL VALUE 设置为 available,然后点击 sava 保存设置

现在一个全局变量已经设置好了。

在 Postman 中的使用为 {{ 变量名 }},当 Postman 解析变量时,字符串 {{ 变量名 }} 会被替换为相应的值。

比如进入查询宠物接口,这时候就可以把 status 的值替换为全局变量。

除了手动设置之外,还可以通过脚本的方式设置。

一般设置变量会在请求之前,可以在 Pre-request Script 当中来完成。

Postman 已经给我封装好了现成的设置和获取全局变量的脚本,可以直接使用。

  • 进入查询宠物接口
  • Pre-request Script 当中点击 Set a global variable
pm.globals.set("status", "sold");

这样设置就相当于在请求之前,先把全局变量 status 的值设置为了 sold,所以请求的结果也是返回的 sold 状态的宠物信息。

现在再看下 Globals 当中,status 现在的值

这就说明请求前使用脚本设置全局变量是成功的。

那如果需要在脚本当中获取全局变量的值应该怎么办

比如现在要在脚本中获取 status 这个全局变量的值,并且打印在控制台。

var status = pm.globals.get("status");

console.log(status)

点击 Postman 下方的 Console 按钮,就可以打开 Postman 中的控制台,这里就可以看到所有的 log 日志

Collection

如果是某一个测试集中的接口会用到的变量,可以设置为测试集变量。

比如点击 Collections 中的宠物商店,可以看到在测试集当中也可以设置鉴权方式,请求前脚本,测试脚本和变量。

点击 Variables,就可以设置对应的测试集变量。

注意,宠物商店的下一级,宠物 folder 只可以设置鉴权方式和脚本,变量是不可以设置的。

回到宠物商店的变量设置页面。

前面的宠物操作都涉及到了宠物 id 的值,可以把宠物 id 设置为测试集变量。

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

  • 新增宠物

对应的断言也得做修改

首先要先获取到这个测试集变量,然后再把变量值拼接到预期结果当中就可以了。

var petId = pm.collectionVariables.get("petId");

pm.test("响应体正确", function () {
    pm.response.to.have.body("{"id":" + petId + ","category":{"id":1,"name":"cat"},"name":"miao","photoUrls":["string"],"tags":[{"id":5,"name":"cute"}],"status":"available"}");
});

pm.test("Body matches string", function () {
    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"}");
});

  • 更新宠物信息接口

修改断言,思路和新增宠物的一致。

var petId = pm.collectionVariables.get("petId");


pm.test("响应状态码为 200", function () {
    pm.response.to.have.status(200);
});

pm.test("响应体正确", function () {
    pm.response.to.have.body("{"id":" + petId + ","category":{"id":1,"name":"cat"},"name":"小黑","photoUrls":["string"],"tags":[{"id":5,"name":"cute"}],"status":"available"}");
});
  • 删除宠物

修改断言

var petId = pm.collectionVariables.get("petId");

pm.test("message 为删除的宠物 id", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.message).to.eql(petId);
});

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 级别的就是在测试集中导入数据,通过数据驱动的方式完成测试。

变量的优先级

当变量重名的时候,优先级从高至低为:DataEnviromentCollectionGlobalLocal

在这里插入图片描述

推荐学习

【霍格沃兹测试开发】7天软件测试快速入门带你从零基础/转行/小白/就业/测试用例设计实战

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (上集)

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (下集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(上集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(下集)

【霍格沃兹测试开发】精品课合集/ 自动化测试/ 性能测试/ 精准测试/ 测试左移/ 测试右移/ 人工智能测试

【霍格沃兹测试开发】腾讯/ 百度/ 阿里/ 字节测试专家技术沙龙分享合集/ 精准化测试/ 流量回放/Diff

【霍格沃兹测试开发】Pytest 用例结构/ 编写规范 / 免费分享

【霍格沃兹测试开发】JMeter 实时性能监控平台/ 数据分析展示系统Grafana/Docker 安装

【霍格沃兹测试开发】接口自动化测试的场景有哪些?为什么要做接口自动化测试?如何一键生成测试报告?

【霍格沃兹测试开发】面试技巧指导/ 测试开发能力评级/1V1 模拟面试实战/ 冲刺年薪百万!

【霍格沃兹测试开发】腾讯软件测试能力评级标准/ 要评级表格的联系我

【霍格沃兹测试开发】Pytest 与Allure2 一键生成测试报告/ 测试用例断言/ 数据驱动/ 参数化

【霍格沃兹测试开发】App 功能测试实战快速入门/adb 常用命令/adb 压力测试

【霍格沃兹测试开发】阿里/ 百度/ 腾讯/ 滴滴/ 字节/ 一线大厂面试真题讲解,卷完拿高薪Offer !

【霍格沃兹测试开发】App自动化测试零基础快速入门/Appium/自动化用例录制/参数配置

【霍格沃兹测试开发】如何用Postman 做接口测试,从入门到实战/ 接口抓包(最新最全教程)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2123411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

更改flutter 应用的应用名称和图标

在 Flutter 项目中,更改构建后的应用名称和图标是常见的定制化需求。以下是如何更改应用名称和图标的步骤。 1. 更改应用名称 Android 平台 修改 Android 端的应用名称: Flutter 项目的 Android 部分位于 android/app/src/main/AndroidManifest.xml …

高度可定制的电竞鼠标,雷柏VT1 PRO MAX体验

不管是菜鸟还是老鸟,游戏玩到某个阶段很容易出现瓶颈,在游戏的某个阶段,这里面制约最大的除了操作之外,实际上还是我们用的硬件。比如在PC游戏中,鼠标的影响就非常大,像是在游戏中如果鼠标延迟过高&#xf…

每天五分钟玩转深度学习框架PyTorch:获取神经网络模型的参数

本文重点 当我们定义好神经网络之后,这个网络是由多个网络层构成的,每层都有参数,我们如何才能获取到这些参数呢?我们将再下面介绍几个方法来获取神经网络的模型参数,此文我们是为了学习第6步(优化器)。 获取所有参数Parameters from torch import nn net=nn.Sequent…

责任链模式chain of responsibility

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/chain-of-responsibility 将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者 把责任链造出来然后往后传

SQL的高级查询练习知识点中(day25)

1 学习目标 重点掌握聚合函数的使用重点掌握字段别名重点掌握分组查询的语法重点掌握having的使用方法了解子查询的语法重点掌握排序查询语法 2 排序查询 2.1 语法 SELECT要查询的东西 FROM表 WHERE 条件 ORDER BY 排序的字段|表达式|函数|别名 [ASC|DESC] ASC 升序&#…

Mendix 10.14 版 – 新版本上线及新功能点介绍

Mendix 10.14版本的全部内容都是“连接点”——从简化Studio Pro中的编辑体验到用于连接到其他系统的强大更新。 Studio Pro已针对性能进行了优化,用户现在可以直接在属性窗格中更改样式。现在也可以在系统文本编辑器中使用Maia(AI)进行翻译…

Java中的类加载与卸载机制详解

在Java虚拟机(JVM)中,类加载和类卸载机制是Java运行时环境的重要组成部分。理解类的加载与卸载不仅有助于深入掌握JVM的运行原理,还可以帮助开发者优化程序性能,特别是在内存管理和应用程序生命周期管理中起到关键作用…

通信过程天线的原理

文章目录 电场电场的作用 磁场电磁波电磁波怎么表示0与1 引用文章 电场 电场是电荷及变化磁场周围空间里存在的一种特殊物质。 静止电荷在其周围空间产生的电场,称为静电场; 电场的作用 电荷产生电场:任何电荷周围都存在电场。正电荷产生的…

C语言深入了解指针一(14)

文章目录 前言一、内存和地址内存究竟该如何理解编址 二、指针变量和地址取地址操作符&解引用操作符*指针变量的大小 总结 前言 终于来到指针啦!如前篇末尾总结所说,这是你们马上要下大功夫的地方   但是,就像我们上初中的时候&#xf…

Netty权威指南:Netty总结-客户端创建

第十四章 客户端创建 14.1 Netty客户端创建流程分析 BootStrap是socket客户端创建工具类,通过Bootstrap可以方便地创建Netty客户端发起异步TCP连接操作 14.1.1 客户端创建时序图 14.1.2 客户端流程分析 用户线程创建BootStrap实例,通过API设置创建客…

Linux 网络基础概念

文章目录 一、初始协议1、理解2、协议分层3、软件分层4、OSI七层模型5、TCP/IP五层模型 二、再识协议1、为什么要有TCP/IP协议2、什么是TCP/IP协议3、TCP/IP协议与操作系统的关系(宏观上,怎么实现的) 三、网络传输基本流程1、mac地址2、TCP/I…

Django 模型索引的创建

在 Django 中,索引是优化数据库查询性能的重要工具。Django 提供了多种方式来为模型字段创建索引,比如通过字段选项或直接在模型的 Meta 类中定义。下面详细介绍如何在 Django 中为模型创建索引。 1、问题背景 在 Django 中,当我们需要对模型…

浅谈人工智能之Python调用AutoGen Studio SDK

浅谈人工智能之Python调用AutoGen Studio SDK 引言 在之前的文档中我们讲解了如何搭建AutoGen Studio环境以及基于AutoGen Studio构建AI Agent并且进行执行。 今天我们介绍如何通过Python调用AutoGen Studio提供的SDK来运行workflow,即AI Agent。 实例说明 第一步:我们使…

国产ERT/ECT工业电阻/电容层析成像系统在多相流领域的应用

层析成像技术,是通过射线扫描与反演计算,重建物体内部结构的图像,广泛应用于工业领域。其中,电学成像技术作为层析成像的重要分支,具备无辐射、响应快、成本低等优势。它通过对被测物体施加电学激励并检测边界测量值变…

计算机专业选题推荐-基于uniapp的共享电子图书管理微信小程序

💖🔥作者主页:毕设木哥 精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻 实战项目 文章目录 实战项目 一、基于uniapp的共享电子图书管…

linux驱动学习笔记(linux驱动头文件说明) include asm等目录下头文件功能_在linux中文件中的include表示什么

#include<linux/device.h>//包含了device、class 等结构的定义 #include <linux/io.h>//包含了ioremap、iowrite等内核访问IO内存等函数的定义。 #include<linux/miscdevice.h>//包含了miscdevice结构的定义及相关的操作函数。 #include<linux/interru…

NLTK:一个强大的自然语言处理处理Python库

我是东哥&#xff0c;一名热爱技术的自媒体创作者。今天&#xff0c;我将为大家介绍一个非常有趣且强大的Python库——NLTK。无论你是刚刚接触Python的小白&#xff0c;还是对自然语言处理&#xff08;NLP&#xff09;有些许了解的朋友&#xff0c;NLTK都是一个值得学习的工具。…

web项目如何部署到服务器上并运行呢?——使用Tomcat插件

三、使用Tomcat插件 这种方式是在web项目种集成tomcat&#xff0c;所以不用部署web项目了&#xff0c;只需要直接启动服务器就可以了。 1、集成tomcat插件 &#xff08;1&#xff09;在pom.xml文件中添加tomcat插件&#xff1a; <build><plugins><!--Tomcat…

2024 全新智能识别 API 接口震撼登场

近年来&#xff0c;随着人工智能技术的快速发展&#xff0c;智能识别技术逐渐成为了各个领域的热门应用。在这个大背景下&#xff0c;2024 年的全新智能识别 API 接口横空出世&#xff0c;为我们的生活带来了更多的便利。本文将为大家详细介绍这个全新智能识别 API 接口&#x…

Linux之Shell命令

Shell 是一个 C 语言编写的脚本语言&#xff0c;它是用户与 Linux 的桥梁&#xff0c;用户输入命令交给 Shell 处理&#xff0c;Shell 将相应的操作传递给内核&#xff08;Kernel&#xff09;&#xff0c;内核把处理的结果输出给用户。 程序执行方式&#xff1a;编译、解释 Sh…