Postman接口测试学习之常用断言

什么是断言?

断言——就是结果中的特定属性或值与预期做对比,如果一致,则用例通过,如果不一致,断言失败,用例失败。断言,是一个完整测试用例所不可或缺的一部分,没有断言的测试用例仅仅是测试步骤。​

在介绍Postman断言之前,我们先测试接口:

接口地址:

postman接口测试视频教程:2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV16L41117wB/?spm_id_from=333.999.0.0

 

使用 GET 方法:

Postman学习之常用断言

那么这个接口我们如何用Postman来进行断言呢?也很简单,用到Postman tests 这个模块。

Postman学习之常用断言

要执行断言脚本以验证请求返回的数据,使用pm.test函数定义断言,他提供一个名称和函数,该函数返回一个布尔值(true或false)来指示测试是通过还是失败。并结合使用pm.response对象和pm.expect来测试响应详细信息。

那么上面的接口我们如何断言呢?很简单,从响应内容做断言。

比如我们可以断言 id=90,url = "https://www.v2ex.com/go/python",响应状态码等于200

我们在tests输入框填写:

pm.test("Status code is 200", function () {pm.response.to.have.status(200);
});   //断言响应状态码是200var jsonData = JSON.parse(responseBody);
tests["Check respose id value"] = jsonData.id === 90; //断言id是90
tests["Check respose url value"] = jsonData.url === "https://www.v2ex.com/go/python"; //断言url

操作步骤:1、填写断言 2、点击send

Postman学习之常用断言

查看断言结果:

Postman学习之常用断言

图中,Test Results(3/3)表示3条断言都执行成功

错误:运行报错 There was an error in evaluating the Pre-request Script: pm is not defined

解决办法:出现此问题是在使用Chrome的应用程序时,安装完整的独立版本后,pm对象可以正常工作。(安装包官网下载地址:https://www.postman.com/downloads/)

当然上面断言是比较简单的断言,如果返回的数据如下所示,我们应该如何断言呢?

{
"status": 1,
"message": "success",
"data": [{"id": 1,"title": "乡愁","author": "余光中","content": "小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头"},{"id": 5,"title": "乡愁","author": "余光中","content": "小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头"}
]
}

跟上面断言不同的是,data里面可能有多个json格式的数据,如果我们想断言data里面第一个json应该如何断言呢?其实也非常简单,我们在tests输入框填写:

var jsonData = JSON.parse(responseBody);
tests["Check respose status value"] = jsonData.status === 1;
pm.test("判断data里面第一个json数据的id为1", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.data[0].id).to.eql(1);});

Postman学习之常用断言

 postman接口测试视频教程:2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV16L41117wB/?spm_id_from=333.999.0.0

Postman常见断言方法介绍:

设置一个环境变量

pm.environment.set("variable_key", "variable_value");

将嵌套对象设置为环境变量

var array = [1, 2, 3, 4];
pm.environment.set("array", JSON.stringify(array, null, 2));var obj = { a: [1, 2, 3, 4], b: { c: 'val' } };
pm.environment.set("obj", JSON.stringify(obj));

获取环境变量

//variable_key代表某一变量名,下同
pm.environment.get("variable_key");

获取一个环境变量(其值是一个字符串化的对象)

// These statements should be wrapped in a try-catch block if the data is coming from an unknown source.var array = JSON.parse(pm.environment.get("array"));
var obj = JSON.parse(pm.environment.get("obj"));

清除一个环境变量

pm.environment.unset("variable_key");

设置一个全局变量

//variable_value为设置变量的值
pm.globals.set("variable_key", "variable_value");

获取一个全局变量

pm.globals.get("variable_key");

清除全局变量

pm.globals.unset("variable_key");

获取一个变量

该函数在全局变量和活动环境中搜索变量。

pm.variables.get("variable_key");

检查响应主体是否包含字符串

//string_you_want_to_search为需要匹配的字符串
pm.test("Body matches string", function () {pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});

检查响应主体是否等于一个字符串

//response_body_string 为需要匹配的响应主体
pm.test("Body is correct", function () {pm.response.to.have.body("response_body_string");
});

检查JSON值

pm.test("Your test name", function () {var jsonData = pm.response.json();pm.expect(jsonData.key).to.eql(100); //key为返回json一字段名,如开头接口的 stars
});

内容类型存在

pm.test("Content-Type is present", function () {pm.response.to.have.header("Content-Type");
});

响应时间小于200ms

pm.test("Response time is less than 200ms", function () {pm.expect(pm.response.responseTime).to.be.below(200);
});

响应状态码是200

pm.test("Status code is 200", function () {pm.response.to.have.status(200);
});

代码名称包含一个字符串

pm.test("Status code name has string", function () {pm.response.to.have.status("Created");
});

成功的POST请求状态码

pm.test("Successful POST request", function () {pm.expect(pm.response.code).to.be.oneOf([201,202]);
});

对于JSON数据使用TinyValidator

var schema = {"items": {"type": "boolean"}
};
var data1 = [true, false];
var data2 = [true, 123];pm.test('Schema is valid', function() {pm.expect(tv4.validate(data1, schema)).to.be.true;pm.expect(tv4.validate(data2, schema)).to.be.true;
});

解码base64编码的数据

var intermediate,base64Content, // 假设它有一个base64编码值rawContent = base64Content.slice('data:application/octet-stream;base64,'.length);intermediate = CryptoJS.enc.Base64.parse(base64content); // CryptoJS 是一个内置对象, 文档说明: https://www.npmjs.com/package/crypto-js
pm.test('Contents are valid', function() {pm.expect(CryptoJS.enc.Utf8.stringify(intermediate)).to.be.true; //非空检查
});

发送异步请求

该功能既可以作为预先请求,也可以作为测试脚本使用。

pm.sendRequest("https://postman-echo.com/get", function (err, response) {console.log(response.json());
});

将XML正文转换为JSON对象

var jsonObject = xml2Json(responseBody);

 postman接口测试视频教程:2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV16L41117wB/?spm_id_from=333.999.0.0

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

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

相关文章

MySql8.0 + Qt 对数据库操作 - 初窥篇1

一、开发背景 32 位程序连接 64 位的数据库实例 二、开发环境 QtCreator4.8.2 Qt5.12.2 MySql8.0.33 三、实现步骤 1、测试驱动代码 测试结果 int main(int argc, char *argv[]) {QSqlDatabase db QSqlDatabase::addDatabase("QMYSQL");db.setHostName("…

温故知新:dfs模板-843. n-皇后问题

n−n−皇后问题是指将 nn 个皇后放在 nnnn 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 nn,请你输出所有的满足条件的棋子摆法。 输入格式 共一行,包含整数 n…

【全网最详细的OSPF原理总结,看这篇就够了!】

OSPF是一种基于链路状态的路由协议,也是专为 IP 开发的路由协议,直接运行在 IP 层上面。它从设计上保证了无路由环路。除此之外,IS-IS也是很常见的链路状态协议。 为什么会出现OSPF? 作为目前主流的IGP协议,OSPF主要…

PyQt5配置踩坑

安装步骤比较简单,这里只说一下我踩的坑,以及希望一些大佬可以给点建议。 一、QtDesigner 这个配置比较简单,直接就能用,我的配置如下图: C:\Users\lenovo\AppData\Roaming\Python\Python311\site-packages\qt5_app…

VR模拟鸡胚培养接种实验,打造沉浸式的学习环境

在医学教育领域,传统的鸡胚接种实验一直是教学的重要组成部分。然而,这种实验方法存在一定的局限性,如操作难度大、成本高、安全隐患等。为了解决这些问题,越来越多的教育机构开始尝试引入虚拟现实(VR)技术,以模拟鸡胚…

SpringCloudGateway实现数字签名与URL动态加密

文章目录 对称加密非对称加密什么是数字签名HTTPS与CA⭐Gateway网关的过滤器链如何对自己的路径传输设定一个数字签名?前端获取RSA公钥发送加密后对称密钥后端接收当前会话对称密钥并保存前端发送AES加密请求验证请求 如何实现URL的动态加密? 再网络传递…

京东数据分析平台:9月中上旬白酒消费市场数据分析

9月份,围绕白酒的热点不断。9月5日,瑞幸咖啡官微发布消息称,瑞幸与贵州茅台跨界合作推出的酱香拿铁刷新单品纪录,首日销量突破542万杯,销售额破1亿元。9月14日,贵州茅台官微发布消息称与德芙推出联名产品“…

【MySQL】基本查询(三)聚合函数+group by

文章目录 一. 聚合函数二. group by子句结束语 建立如下表 //创建表结构 mysql> create table exam_result(-> id int unsigned primary key auto_increment,-> name varchar(20) not null comment 同学姓名,-> chinese float default 0.0 comment 语文成绩,->…

NPM 常用命令(九)

目录 1、npm link 1.1 使用语法 1.2 描述 2、npm login 2.1 描述 3、npm logout 3.1 描述 4、npm ls 4.1 使用语法 4.2 描述 5、npm org 5.1 使用语法 5.2 示例: 6、npm outdated 6.1 使用语法 6.2 描述 6.3 示例 7、npm owner 7.1 使用语法 7.2…

BUUCTF-WEB-刷题记录

题目地址 https://buuoj.cn/challenges[HITCON 2017]SSRFme 代码理解 进入主页后发现是代码审计/ escapeshellarg — 把字符串转码为可以在 shell 命令里使用的参数— 抑制错误输出 mkdir — 创建目录 chdir 更改目录 shell_exec — 通过 shell 环境执行命令&#x…

关于JDK于JRE路径配置问题

今天在配置tomcat时发现,无法找到jre的路径,在网上找了半天,才知道,JDK11版本之后,jre的路径默认和JDK路径一致,JDK11之后的文件夹中不再包含jre文件夹,由此在配置JRE环境变量时,只需…

多个excel合并

目的:将同一个文件下的多个 “京东差评.xlsx” 合并为一个:“京东汇总.xlsx" 代码如下: # -*- coding: utf-8 -*- """ Created on Wed Oct 4 12:52:32 2023author: 64884 """import pandas as pd impor…

2023年中国喷头受益于技术创新,功能不断提升[图]

喷头行业是一个专注于生产和供应各种类型喷头的产业。喷头是一种用于将液体、气体或粉末等物质喷射或喷洒的装置,广泛应用于不同领域,包括工业、农业、家用、医疗等。 喷头行业分类 资料来源:共研产业咨询(共研网) 随…

stm32之手动创建keil工程--HAL库

用CubeMx创建了好多stm32的工程,这里记录下手动创建keil工程的过程。完整工程在最后。 一、准备工作 1.1、下载对应的HAL库, 这里使用的是stm32f103c8t6, 下载地址stm32HAL库 在页面中输入对应型号点击进行二级页面进行下载 下载的之后的目录如下&am…

阿里云ECS服务器无法发送邮件问题解决方案

这篇文章分享一下自己把项目部署在阿里云ECS上之后,登录邮件提醒时的邮件发送失败问题,无法连接发送邮箱的服务器。 博主使用的springboot提供的发送邮件服务,如下所示,为了实现异步的效果,新开了一个线程来发送邮件。…

蔡司光学:儿童近视眼镜的匠心之选

如今我们正处于“信息爆炸”的时代,生活的方方面面都离不开手机、平板和电脑等各种电子设备,加上不正确的用眼习惯,也使青少年及儿童的近视率呈现逐年攀升的态势,为了及时预防儿童近视,业内著名眼视光品牌蔡司光学积极…

基于复旦微JFM7K325T FPGA的高性能PCIe总线数据预处理载板(100%国产化)

PCIE711是一款基于PCIE总线架构的高性能数据预处理FMC载板,板卡采用复旦微的JFM7K325T FPGA作为实时处理器,实现各个接口之间的互联。该板卡可以实现100%国产化。 板卡具有1个FMC(HPC)接口,1路PCIe x8主机接口&#x…

Linux安装 spark 教程详解

目录 一 准备安装包 二 安装 scala 三 修改配置文件 1)修改 workers 文件 2)修改 spark-env.sh文件 四 进入 spark 交互式平台 一 准备安装包 可以自行去 spark 官网下载想要的版本 这里准备了 spark3.1.2的网盘资源 链接: https://pan.baidu.com…

OpenCV 13(模版匹配和霍夫变换)

一、模版匹配 所谓的模板匹配,就是在给定的图片中查找和模板最相似的区域,该算法的输入包括模板和图片,整个任务的思路就是按照滑窗的思路不断的移动模板图片,计算其与图像中对应区域的匹配度,最终将匹配度最高的区域…

html 高性能 简易轮播图

目标 实现简易轮播图动画效果 设计理念 无论有多少个轮播图,仅使用常数个轮播图tab,通过js替换更新dom内容,实现性能优化;使用bfc避免回流,(重绘是基本上无法避免,不在考虑)&#…