Postman断言与依赖接口测试详解!

在接口测试中,断言是不可或缺的一环。它不仅能够自动判断业务逻辑的正确性,还能确保接口的实际功能实现符合预期。Postman作为一款强大的接口测试工具,不仅支持发送HTTP请求和接收响应,还提供了丰富的断言功能,帮助测试人员验证接口的行为是否符合预期。

POSTMAN的断言

01、断言的基本概念

断言是对接口响应结果的验证,通过检查响应的状态码、正文、头部字段或响应时间等,确保接口返回的数据符合测试预期。在Postman中,断言通常在当前请求发送之后,通过编写测试脚本来实现。

02、响应状态码断言

响应状态码是HTTP协议中用于表示请求处理结果的数字代码。在Postman中,可以使用以下脚本对响应状态码进行断言:

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

这段脚本会检查响应的状态码是否为200,如果不是,则测试失败。

03、响应正文断言

响应正文是接口返回给客户端的数据内容。在Postman中,可以使用以下两种方式对响应正文进行断言:

  • 包含子字符串:检查响应正文中是否包含指定的子字符串。

  • JSON断言:对响应正文进行JSON解析,并检查特定字段的值是否符合预期。

例如,以下脚本用于断言响应正文中包含特定的消息内容:

pm.test("断言响应结果字段是", function () {      var jsonData = pm.response.json();      pm.expect(jsonData.msg).to.eql("操作成功");  });

这段脚本会解析响应正文为JSON对象,并检查msg字段的值是否为“操作成功”。

04、数据格式断言

除了对具体字段的值进行断言外,还可以对响应数据的格式进行断言。例如,可以检查响应正文是否为对象、特定字段是否为字符串或数字等。以下脚本用于断言响应数据的格式:

const jsonData = pm.response.json();  pm.test("测试响应文本的数据类型", () => {      pm.expect(jsonData).to.be.an("object");      pm.expect(jsonData.name).to.be.a("string");      pm.expect(jsonData.age).to.be.a("number");      pm.expect(jsonData.hobbies).to.be.an("array");      pm.expect(jsonData.website).to.be.undefined;      pm.expect(jsonData.email).to.be.null;  });

05、其他断言方式

除了上述常见的断言方式外,还可以使用其他断言方式,如响应时间断言等。这些断言方式可以根据测试需求进行选择和组合。

依赖接口的测试

在实际项目中,接口之间往往存在依赖关系。例如,一个接口可能需要先调用另一个接口获取数据,然后再将获取到的数据作为参数传递给当前接口进行测试。在Postman中,可以通过以下方式实现依赖接口的测试:

1. 使用环境变量

在Postman中,可以使用环境变量来存储依赖接口返回的数据。例如,可以先调用依赖接口获取用户ID,然后将用户ID存储为环境变量,并在后续接口测试中引用该环境变量。

2. 使用Pre-request Script

Pre-request Script是Postman中用于在发送请求之前执行的脚本。可以在Pre-request Script中调用依赖接口,并将返回的数据存储为全局变量或环境变量,供后续请求使用。

3. 使用Collection Runner

Collection Runner是Postman中用于批量运行集合中请求的工具。在Collection Runner中,可以指定依赖关系的顺序,并依次运行集合中的请求。通过这种方式,可以方便地实现依赖接口的测试。

三、实战案例

以下是一个简单的实战案例,展示了如何在Postman中进行断言和依赖接口的测试:

案例背景

假设有两个接口:

  • 接口A:用于获取用户信息,返回用户ID和用户名。

  • 接口B:用于获取用户的订单信息,需要传入用户ID作为参数。

测试步骤

  1. 调用接口A获取用户信息,并将用户ID存储为环境变量。

  2. 在Pre-request Script中或直接在接口B的请求中引用环境变量中的用户ID。

  3. 调用接口B获取用户的订单信息,并对响应结果进行断言。

具体实现

  1. 创建一个新的集合,并添加两个请求,分别对应接口A和接口B。

  2. 在接口A的请求中,编写测试脚本将用户ID存储为环境变量:

pm.test("存储用户ID为环境变量", function () {      var jsonData = pm.response.json();      pm.environment.set("user_id", jsonData.id);  });

3.在接口B的请求中,使用环境变量中的用户ID作为参数:

https://example.com/orders?user_id={{user_id}}

4.在接口B的请求中,编写测试脚本对响应结果进行断言:

pm.test("断言订单数量大于0", function () {      var jsonData = pm.response.json();      pm.expect(jsonData.orders.length).to.be.greaterThan(0);  });

5.使用Collection Runner运行集合中的请求,并查看测试结果。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

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

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

相关文章

百度SEO与SEM到底有什么区别?福建企业老板们需要了解的关键点【百度SEO专家】

大家好,我是林汉文,一名百度SEO专家。最近在与一些企业Boss沟通时,我发现很多人对SEO与SEM的区别并不清楚,有时甚至会混为一谈。SEO和SEM确实都是搜索引擎营销的重要手段,但它们在实现方式、效果和适用场景上都有着明显…

JavaFX WebView + Vue初始化加载数据解决方案

一般WebView加载Vue时,我们需要注入一些数据,而我发现当WebView加载完毕再注入脚本,Vue是无法正确识别注入的脚本函数,也无法正确获取所要注入的数据,因此可以采用以下方法解决Vue无法正确加载数据问题 1、配置WebView…

Ubuntu 安装CUDA, cuDNN, TensorRT(草稿)

文章目录 写在前面一、CUDA, cuDNN, TensorRT 三个库的版本的确定二、解决方法参考链接 写在前面 自己的测试环境: Ubuntu20.04, 本文安装的版本: cuda_11.1.0;cuDNN-8.2.1;TensorRT-8.2.4.2 一、CUDA, cuDNN, TensorRT 三个库…

传输层协议TCP详解(上篇)

目录 一. TCP协议 1.1 什么是TCP协议 1.2 TCP为什么叫传输控制协议 二. TCP协议段格式 三. 确认应答(ACK)机制 3.1 什么是确认应答机制 3.2 推导确认应答机制 四. 超时重传机制 五. 连接管理机制 5.1 六位标志位 5.2 如何…

wps宏代码学习

推荐学习视频:https://space.bilibili.com/363834767/channel/collectiondetail?sid1139008&spm_id_from333.788.0.0 打开宏编辑器和JS代码调试 工具-》开发工具-》WPS宏编辑器 左边是工程区,当打开多个excel时会有多个,要注意不要把…

ffmpeg视频滤镜:膨胀操作-dilation

滤镜介绍 dilation 官网链接 > FFmpeg Filters Documentation 膨胀滤镜会使图片变的更亮,会让细节别的更明显。膨胀也是形态学中的一种操作,在opencv中也有响应的算子。此外膨胀结合此前腐蚀操作,可以构成开闭操作。 开操作是先腐蚀…

【补补漏洞吧 | 02】等保测评ZooKeeperElasticsearch未授权访问漏洞补漏方法

一、项目背景 客户新系统上线,因为行业网络安全要求,需要做等保测评, 通过第三方漏扫工具扫描系统,漏扫报告显示ZooKeeper和 Elasticsearch 服务各拥有一个漏洞,具体结果如下: 1、ZooKeeper 未授权访问【…

C语言进阶之我与指针的爱恨情仇(1)

一.前言 我们在初阶《指针》初阶C语言-指针-CSDN博客已经讲过了一些基础知识,知道了关于指针的一些概念-> 1.指针就是个变量,用来存放地址,地址唯一标识一块内存空间 2.指针的大小是固定的4/8个字节(32位平台/64位平台&#xf…

对象池的作用以及简单示例

在游戏当中,有很多时候需要重复地创建或删除某些游戏对象,此时会耗费系统资源,从而影响性能,利用对象池可以解决这个问题。对象池能够节省内存,优化程序流畅程度。 把对象放在一个集合里,通过集合来管理对象…

java并发编程-volatile的作用

文章目录 volatile的作用1.改变线程间的变量可见性2.禁止指令重排序 参考的学习视频 volatile的作用 1.改变线程间的变量可见性 每个线程都有一个专用的工作集内存,下图里面粉色的表示专用工作集内存,黄色的是共享内存工作区,如果加入了vol…

Netty 组件介绍 - EventLoop

概要 把 channel 理解为数据的通道把 msg 理解为流动的数据,最开始输入是 ByteBuf,但经过pipeline 的加工,会变成其它类型对象,最后输出又变成 ByteBuf把 handler 理解为数据的处理工序 工序有多道,合在一起就是 pi…

oracle 对应的JDBC驱动 版本

下载网址:JDBC and UCP Downloads page

整理 【 DBeaver 数据库管理工具 】的一些基础使用

目录 连接设置切换工作空间SQL编辑器(写sql语句)打开方式新建查询(sql编辑器)打开写的 sql 查询(项目浏览器) 备份sql文件查看历史执行语句自动保存sql语句的文件(编辑器)关闭自动生…

(九)JavaWeb后端开发——Servlet

目录 1.Servlet由来 2.Servlet快速入门 3.Servlet执行原理 4.Servlet生命周期 1.Servlet由来 在JaveEE API文档中对Servlet的描述是:可以运行在服务器端的微小程序,但是实际上,Servlet就是一个接口,定义了Java类被浏览器访问…

LLC Power Switches and Resonant Tank 笔记

1.概述 上面是一个典型的LLC电路。注意Lm是励磁电感,就是次级线圈空载时的主变压器电感,据说在计算谐振频率时无需关心。然后,作为DCDC电源,它通过调整谐振频率,来改变输出的电流。负载越大,频率越低&#…

项目模块十三:Util模块

一、项目设计思路 用于之后协议使用的工具类 二、静态成员函数 1、分割函数 static size_t Split(const string &src, const string &sep, vector<string> *array) string.find(const string &str, size_t pos 0) string.substr(size_t pos 0, size_t…

Chrome与夸克谁更节省系统资源

在当今数字化时代&#xff0c;浏览器已经成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐&#xff0c;我们都依赖于浏览器来访问互联网。然而&#xff0c;不同的浏览器在性能和资源消耗方面存在差异。本文将探讨Chrome和夸克两款浏览器在系统资源消耗方面的表现…

Qt第三课 ----------输入类的控件属性

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

后端:Spring、Spring Boot-实例化Bean依赖注入(DI)

文章目录 1. 实例化Bean2. 使用FactoryBean3. 依赖注入(DI)3.1 AutoWired 属性注入(查找顺序&#xff1a;先类型&#xff0c;后名字)3.2 AutoWired 在构造函数&参数上的使用3.3 Inject和Resource 进行依赖注入3.4 Value 进行注入 1. 实例化Bean 默认使用无参构造函数&…

qt QPicture详解

1、概述 QPicture类是Qt框架中的一个重要图形类&#xff0c;它主要用于记录和回放QPainter的绘图指令。这个类能够跨平台、无分辨率依赖地绘制图形&#xff0c;非常适合用于实现打印预览和图像操作等场景。QPicture可以将绘图操作序列化为一种独立于平台的格式&#xff0c;保存…