接口测试和Mock学习路线(中)

1.什么是 swagger

Swagger 是一个用于生成、描述和调用 RESTful 接口的 WEB 服务。

通俗的来讲,Swagger 就是将项目中所有想要暴露的接口展现在页面上,并且可以进行接口调用和测试的服务。

现在大部分的项目都使用了 swagger,因为这样后端开发就不需要专门为接口使用者编写接口文档。

当接口更新之后,只需要修改代码中的 Swagger 描述就可以实时生成新的接口文档,这样就可以避免接口文档老旧不能使用的问题。

而且通过 Swagger 页面,可以直接进行接口调用,降低了项目开发阶段的调试成本。

1.1.分析查询接口

接口的 swagger 文档怎么看:

1.1.1、调试宠物

怎么在页面上调试接口,以查询宠物接口举例 - 点击 Try it out - 请求参数 status 选择 available - 点击 Execute 发出请求 - 下方展示当前请求的 Curl 命令 - 下方展示当前请求的完整 URL - 下方展示响应状态码和对应的响应体 - 有了 swagger,就可以非常方便的获取到接口的信息,有了这些信息,就可以设计测试用例

1.1.2、接口测试用例设计

  • 宠物的 增、删、改、查 冒烟测试用例
  • 模块+测试标题+优先级+前置条件+URL+请求方法+请求参数+预期结果+实际结果

1.1.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.Postman 完成接口测试

  • 创建测试集
  • 编写断言
  • 运行测试集
  • 查看测试结果

3.变量

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

3.1.变量定义

Postman 的变量主要用于参数化和关联,常用变量可以按使用范围设置。

3.1.1、Local

Local 级别的变量其实就是在脚本中定义的变量,比如删除宠物信息用例中,断言里使用了检验 JSON 格式中某个 key 的值

这里面的 jsonData 就是一个 Local 级别的变量。它只在这条断言中生效。

3.1.2、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
pm.globals.set("status", "sold");

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

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

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

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

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

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

3.1.3、Collection

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

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

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

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

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

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

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

3.1.4、Data

data 级别的就是在测试集中导入数据,通过数据驱动的方式完成测试。

3.1.5、变量的优先级

当变量重名的时候,优先级从高至低为:Data -> Enviroment -> Collection -> Global -> Local

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

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

相关文章

fakak详解(2)

Kafka和Flume整合 Kafka与flume整合流程 Kafka整合flume流程图 flume主要是做日志数据(离线或实时)地采集。 图-21 数据处理 图-21显示的是flume采集完毕数据之后,进行的离线处理和实时处理两条业务线,现在再来学习flume和kafka的整合处理。 配置fl…

微信小程序开发工具的使用,各个配置文件详解,小程序开发快速入门

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

redis单线程模型

工作原理 在Redis中,当两个客户端同时发送相同的请求时,Redis采用单线程模型来处理所有的客户端请求,会依次处理这些请求,每个请求都会按照先后顺序被执行,不会同时处理多个请求。使得Redis能够避免多线程并发访问数据…

大语言模型应用指南:以ChatGPT为起点,从入门到精通的AI实践教程

目录 前言ChatGPT问世和发展展望未来大语言模型应用指南 特点大语言模型应用指南 主要内容 前言 在20世纪末和21世纪初,人类经历了两次信息革命的浪潮。 第一次是互联网时代的兴起,将世界各地连接在一起,改变了人们获取信息和交流的方式。 …

函数式接口及Stream流式计算

一、什么是函数式接口 只有一个方法的接口,例如 FunctionalInterface public interface Runnable { public abstract void run(); }二、Function函数式接口:有一个输入参数,有一个输出 三、断定型接口:有一个输入参数&#xf…

《ElementPlus 与 ElementUI 差异集合》el-select 显示下拉列表在 Cesium 场景中无法监听关闭

前言 仅在 Element UI 时有此问题,Element Plus 由于内部结构差异较大,不存在此问题。详见《el-select 差异点,如:高、宽、body插入等》; 问题 点击空白处,下拉列表可监听并关闭;但在 Cesium…

【js】解决自动生成颜色时相邻颜色视觉相似问题的技术方案

解决自动生成颜色时相邻颜色视觉相似问题的技术方案 在进行大规模颜色生成时,特别是在数据可视化、用户界面设计等应用领域,一个常见的挑战是确保相邻颜色在视觉上具有足够的区分度。本文介绍的方法通过结合黄金分割比与饱和度、亮度的周期性变化&#…

数据分析_时间维度对比及变化可视化分析(Pandas和Matplotlib)

数据分析_时间维度对比及变化可视化分析(Pandas和Matplotlib) 分析维度包括: 各年度合计销量 各年度合计销售额 各年度平均每公斤销售额 各月度销量对比 各月度销售额变化 构建测试数据 这里你可以了解到: 如何生成时间相关的数据。 如何从列表(可迭代对象…

Linux多进程(二)进程通信方式一 管道

管道的是进程间通信(IPC - InterProcess Communication)的一种方式,管道的本质其实就是内核中的一块内存(或者叫内核缓冲区),这块缓冲区中的数据存储在一个环形队列中,因为管道在内核里边,因此我们不能直接…

Vue 双向绑定、diff和nextTick原理

前言 什么是虚拟dom virtual DOM 虚拟DOM,用普通js对象来描述DOM结构,因为不是真实DOM,所以称之为虚拟DOM。 虚拟 dom 是相对于浏览器所渲染出来的真实 dom而言的,在react,vue等技术出现之前,我们要改变页面…

LabVIEW专栏八、类

该章目的是可以开发仪器类。 一、类的概述 一般来说类有三大特性,封装,继承和多态。 在实际项目中,最主要是继承和多态,要搞清楚这两者的概念和在LabVIEW中是怎样应用的。在LabVIEW中,面向对象编程用到的就是LabVIE…

SAM在低阶自适应航空土地覆盖分类中的应用2024.01

GEOSCIENCE AND REMOTE SENSING LETTERS 2024.01 提出了一种新的语义分割模型,该模型结合了SAM的图像编码器和低秩自适应方法(LoRA),用于航空图像的特征提取和微调。我们还使用了一个辅助CNN编码器来促进下游适应,并补充ViT编码器在密集视觉…

机器学习模型效果不好及其解决办法

当训练出来的机器学习模型效果不佳时,可能涉及多个方面的原因。为了改善模型的效果,需要系统地检查和分析问题的根源,并采取相应的措施进行优化。 一、数据问题 数据质量 检查数据是否干净、完整,是否存在噪声、异常值或缺失值。…

【MySQL】A01、性能优化-语句分析

1、数据库优化方向 A、SQL及索引优化 根据需求写出良好的SQL,并创建有效的索引,实现某一种需求可以多种写法,这时候我们就要选择一种效率最高的写法。这个时候就要了解sql优化 B、数据库表结构优化 根据数据库的范式,设计表结构&…

从C向C++14——STL初识及函数对象

一.STL初识 1.STL的诞生 长久以来,软件界一直希望建立一种可重复利用的东西C的面向对象和泛型编程思想,目的就是复用性的提升多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作为了建立数据结构和算法的一套标准,诞生了ST…

详解汽车充电桩主板的硬件设计与软件系统

随着电动汽车时代的到来,充电桩逐渐成为城市新地标。而在每一个充电桩的核心,隐藏着一颗强大的“心脏”——充电桩主板。 充电桩主板是充电桩的核心部件,决定着充电桩的充电效率、安全和用户体验。今天,我们将深入探索汽车充电桩主…

分布式版本控制工具 Git 的使用方式

文章目录 Git简介下载安装基本使用起始配置Git 的三个区域基本操作流程查看仓库状态删除(撤销暂存区)差异对比查看版本日志版本回退修改提交日志分支概念:创建分支与切换分支合并分支(快速合并)合并分支(提…

北京筑龙当选中招协第二届招标采购数字化专业委员会执行主任单位

4月18-19日,中国招标投标协会(以下简称中招协)2024年年会在宁波召开,北京筑龙作为中招协理事会员单位受邀出席会议。会议期间举行了“电子招标采购专业委员会换届会议暨第二届第一次工作会议”,北京筑龙当选第二届招标…

用代码给孩子造“钱”

起因 作为家里有两个娃的奶爸,时长为了孩子乱花钱而焦虑不已。然后最近看到一段短视频说了这么段话。 父母不要被动给孩子买东西,而是定期给孩子钱。让孩子自己管钱培养她对于钱的认知和理财的观念。 突然感觉大师我悟了。感觉值得一试。于是就打算给他…

如何在官网查看Qt5的所有模块?

2024年4月23日,周二上午 如果你不想一步步来的话,可以直接去这个Qt官方链接 https://doc.qt.io/qt-5/qtmodules.html 第一步:去到Qt官网 https://www.qt.io/ 第二步:点击文档链接 第三步:选择文档中的“Qt5” 第四步…