接口测试和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.mfbz.cn/a/569726.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Maven基础篇7

私服-idea访问私服与组件上传 公司团队开发流程 本地上传–>repository–>私服 其他成员从私服拿 1.项目完成后发布到私服 在pom文件最后写上发布的配置管理 ​ //写发布的url也就是你发布到哪一个版本,以及写入id ​ ​ 发布的时候,将项…

开源贡献代码之​探索一下Cython

探索一下Cython 本篇文章将会围绕最近给Apache提的一个feature为背景,展开讲讲Cython遇到的问题,以及尝试自己从0写一个库出来,代码也已经放星球了,感兴趣的同学可以去下载学习。 0.背景 最近在给apache arrow提的一个feature因为…

通配符SSL证书有哪些优点?怎么免费申请?

通配符证书就像一把“万能钥匙”,可以同时给一家公司旗下所有以某个主域名开头的子网站都“上锁”。这样有以下几个好处: 安全放心: - 全副武装:甭管用户访问的是公司的邮箱网站(比如mail.公司名.com)、购…

【电控笔记5.10】Luenberger估测器

Luenberger估测计 单积分器:pi控制器的补偿 双积分器:使用pid控制器的补偿 除了受控厂跟传感器,其他都在mcu 去掉Rs就是一个PLL锁相环 带宽比PLL更大

WEB服务的配置与使用 Apache HTTPD

服务端:服务器将发送由状态代码和可选的响应正文组成的 响应 。状态代码指示请求是否成功,如果不成功,则指示存在哪种错误情况。这告诉客户端应该如何处理响应。较为流星的web服务器程序有: Apache HTTP Server 、 Nginx 客户端&a…

揭秘npm:高效包管理的绝佳技巧(AI写作)

首先,这篇文章是基于笔尖AI写作进行文章创作的,喜欢的宝子,也可以去体验下,解放双手,上班直接摸鱼~ 按照惯例,先介绍下这款笔尖AI写作,宝子也可以直接下滑跳过看正文~ 笔尖Ai写作:…

整合阿里云OSS 对象存储

1. 创建Bucket 填写属性参数 2. 获取秘钥accessKey 2.1 进入accessKey管理页面 2.2 创建accessKey&#xff0c;并获取信息 需要自行进行安全验证 记录自己的 信息 3. 查看官方SDK文档 位置 找到开发参考Java 4. 具体实现-参考官网 4.1 添加依赖 <dependency&…

Java | Leetcode Java题解之第42题接雨水

题目&#xff1a; 题解&#xff1a; class Solution {public int trap(int[] height) {int n height.length;if (n 0) {return 0;}int[] leftMax new int[n];leftMax[0] height[0];for (int i 1; i < n; i) {leftMax[i] Math.max(leftMax[i - 1], height[i]);}int[] …

element中file-upload组件的提示‘按delete键可删除’,怎么去掉?

问题描述 element中file-upload组件会出现这种提示‘按delete键可删除’ 解决方案&#xff1a; 这是因为使用file-upload组件时自带的提示会盖住上传的文件名&#xff0c;修改一下自带的样式即可 ::v-deep .el-upload-list__item.is-success.focusing .el-icon-close-tip {d…

SQL基础(关系模型)

目录 SQL及定义域概念 SQL是什么 定义域 关系简介 关系的定义 关系的封闭性 关系模型简介 关系模型 谓词逻辑 运算基础 SQL的加减乘除 SQL的除法1 SQL的除法2 SQL的除法3 三值逻辑 NULL的危害 消除NULL SQL及定义域概念 SQL是什么 Structured Query Languag…

【计算机毕业设计】药品销售系统产品功能介绍——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

Cellebrite Inseyets- 一站式流线型提取

Cellebrite Inseyets - &#xff08;原Cellebrite Premium/ES/SAAS&#xff09;一站式流线型数据提取 Premium现已迎来重大更新升级&#xff0c;简化您的数据处理流程&#xff0c;加快处理速度&#xff01; Cellebrite Inseyets- 提高设备优先级、减少处理时间并增加有意义的数…

用html画一个四叶草

<!DOCTYPE html> <html lang"en" > <head> <meta charset"UTF-8"> <title>四叶草</title> <link href"" rel"stylesheet"> <link rel"stylesheet" href"css/style.css&q…

Barnes-Hut t-SNE:大规模数据的高效降维算法

在数据科学和分析中&#xff0c;理解高维数据集中的底层模式是至关重要的。t-SNE已成为高维数据可视化的有力工具。它通过将数据投射到一个较低维度的空间&#xff0c;提供了对数据结构的详细洞察。但是随着数据集的增长&#xff0c;标准的t-SNE算法在计算有些困难&#xff0c;…

Spring SpringBoot(详解)

1. Spring简介 1.1 Spring 核心设计思想 1.1.1 Spring 是什么&#xff1f; Spring 是包含了众多⼯具⽅法的 IoC 容器。Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;Spring ⽀持⼴泛的应⽤场景&#xff0c;它…

Spring Cloud学习笔记(Ribbon):Ribbon的应用样例

这是本人学习的总结&#xff0c;主要学习资料如下 - 马士兵教育 1、Ribbon简介1.1、架构图1.2、简单实现负载均衡 2、配置负载均衡策略2.1、IRule2.2、使用IRule简单示例2.2.1、Overview2.2.1、注入IRule2.2.2、关联IRule和服务 1、Ribbon简介 我们都知道Ribbon是用于负载均衡…

5-内核开发-/proc File System 学习

5-内核开发-/proc File System 学习 课程简介&#xff1a; Linux内核开发入门是一门旨在帮助学习者从最基本的知识开始学习Linux内核开发的入门课程。该课程旨在为对Linux内核开发感兴趣的初学者提供一个扎实的基础&#xff0c;让他们能够理解和参与到Linux内核的开发过程中。…

Nacos采坑:非集群Nacos不要使用同一个MySQL数据库

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Nacos 致力于帮助您…

第27章 筹集资金

< 回到目录 第六部分 流程 在各关键职能安排好了关键人员之后&#xff0c;公司有效运作&#xff0c;数据系统正常运行&#xff0c;经理和团队成员之间的双向信息交流顺畅。现在&#xff0c;剩下的就是你与外部世界的交流&#xff0c;包括与投资者、招聘者和客户的互动。这些…

银行买的黄金怎么卖出去?了解黄金交易的步骤和注意事项

黄金一直以来都是备受投资者关注的贵金属之一。银行提供了购买黄金的机会&#xff0c;但投资者也需要了解如何卖出银行买的黄金。 选择适合的购买方式 投资者可以通过多种途径购买黄金&#xff0c;其中包括银行提供的黄金交易服务。银行买黄金的方式可以是通过黄金交易账户、黄…