day08 接口测试(3)——postman工具使用

 下载 postman 的历史版本:Postman 历史版本下载 - 简书

我自己根据我的电脑,安装的地址为:https://dl.pstmn.io/download/version/9.31.32/osx_64

今天开始学习 postman 这个测试工具啦。

【没有所谓的运气🍬,只有绝对的努力✊】

目录

1、postman简介

2、postman的安装

3、给postman安装插件——newman

3.1 环境安装

3.1.1 安装nodejs

3.1.2 给postman安装 newman插件

3.1.3 给newman安装  newman-reporter-html插件

3.2 案例——使用postman请求

​编辑

3.3 免费的接口用来做测试

4、postman应用

4.1 管理测试用例

(1)创建collections

(2)修改用例集名称

(3) 添加请求

(4)请求+保存

(5)添加子目录 add folder

4.2 导出用例集 

(1)导出

(2)默认即可

(3)导出的文件

4.3 导入

5、postman断言

5.1 断言响应状态码

5.2 断言响应体是否包含某个字符串

5.3 断言响应体是否等于某个字符串(对象)

5.4 断言JSON数据

5.5 断言响应头

5.6 断言小结

5.7 postman断言工作原理

6、小结

7、全局变量与环境变量

7.1 全局变量设置与获取

7.2 环境变量设置与获取

8、postman 请求前置脚本

8.1 时间戳介绍

8.2 请求前置脚本——案例

step1:在Pre-request Script标签页中,添加代码。

step2:点击send按钮,

step3: 在请求界面中,使用全局变量。

step4:在postman的控制台查看请求

8.3 请求前置脚本工作原理

9、postman的关联

9.1 案例——天气接口获取城市名称

【step1】获取天气接口,提取响应结果中的城市。 

【step2】将全局变量给 百度搜索

10、postman执行批量测试用例

11、postman生成测试报告(完成3.1的安装)

12、小结


1、postman简介

2、postman的安装

下载安装包,下一步下一步即可安装成功。

注册邮箱,进行登录。

3、给postman安装插件——newman

3.1 环境安装

3.1.1 安装nodejs

3.1.2 给postman安装 newman插件

npm install -g newman

使用淘宝镜像安装超级快(强烈推荐):NewMan安装报错 npm install rollbackFailedOptional: verb npm-session 解决办法_newman安装失败-CSDN博客 

验证newman是否安装成功:newman -v

3.1.3 给newman安装  newman-reporter-html插件

npm install -g newman-reporter-html

3.2 案例——使用postman请求

3.3 免费的接口用来做测试

# get https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=%E6%8E%A5%E5%8F%A3&pos_id=mgpNYnIy
http://v1.yiketianqi.com/api?version=v10&appid=55983455&appsecret=4vK6wEW0


4、postman应用

4.1 管理测试用例

(1)创建collections

(2)修改用例集名称

(3) 添加请求

(4)请求+保存

(5)添加子目录 add folder

4.2 导出用例集 

(1)导出

  

(2)默认即可

(3)导出的文件

4.3 导入

5、postman断言

 postman 断言借助javascript 编写代码,自动判断预期结果与实际结果是否一致。

5.1 断言响应状态码

// 断言响应状态码是否为200
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

pm :代表postman 的一个实例

test() :是pm实例的一个方法。有两个参数。

        参数1:在断言结束后,给出的文字提示,可以修改"Status code is 200"

        参数2:匿名函数。

                        pm.response.to.have.status(200);

                        postman的响应结果中应该包含状态码200。

5.2 断言响应体是否包含某个字符串

pm.test("断言响应体包含指定字符串", function () {
    pm.expect(pm.response.text()).to.include("101230501");
});

5.3 断言响应体是否等于某个字符串(对象)

pm.test("Body is correct", function () {
    pm.response.to.have.body(
        {
            "update_time": "10:00",
            "cityid": "101230501",
            "city": "泉州市",
            "cityEn": "",
            "country": "",
            "countryEn": "",
            "air": "23",
            "air_level": "优",
            "air_tips": "空气质量令人满意,基本无空气污染。",
            "pm25": "15",
            "pm25_desc": "优",
            "pm10": "23",
            "pm10_desc": "优",
            "o3": "41",
            "o3_desc": "",
            "no2": "16",
            "no2_desc": "",
            "so2": "2",
            "so2_desc": "",
            "co": "0.5",
            "co_desc": "",
            "kouzhao": "不用佩戴口罩",
            "yundong": "适宜运动",
            "waichu": "适宜外出",
            "kaichuang": "适宜开窗",
            "jinghuaqi": "不需要打开",
            "uvIndex": "6",
            "uvDescription": "强"
}
    );
});

5.4 断言JSON数据

pm.test("断言结果code为1", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.code).to.eql(1);
});

/**
 * var jsonData = pm.response.json(); 
 * jsonData取到的结果为:
 * {
 *      'code':1,
 *      'data':{}
 * }
 * 
 * jsonData.code  一般选择不会变化的。
 * jsonData.data  每次都会变化。
 */

5.5 断言响应头

pm.test("断言响应头", function () {
    pm.response.to.have.header("Content-Type");
});


// 或者

pm.test("断言响应头", function () {
    pm.response.to.have.header("Content-Type","text/html,application/json; charset=utf-8");
});

5.6 断言小结

5.7 postman断言工作原理

6、小结

7、全局变量与环境变量

7.1 全局变量设置与获取

【设置】        

        代码设置:pm.globals.set('var_name', value);

【获取】

        代码中获取变量:pm.globals.get('var_name');

        请求参数中获取:{{var_name}}

7.2 环境变量设置与获取

【设置】

        代码设置:pm.environment.set('var_name', value);

【获取】

        获取变量:pm.environment.get('var_name');

        请求参数中获取:{{var_name}}

8、postman 请求前置脚本

8.1 时间戳介绍

时间戳:对应绝对时间——从1970年1月1日00:00:00 到现在所经历的秒数。

8.2 请求前置脚本——案例

案例:调用百度首页,传时间戳给服务器。

step1:在Pre-request Script标签页中,添加代码。

拿到时间戳,写入全局变。

// 获取时间戳
var timestamp = new Date().getTime();

// 将时间戳 设置全局变量
pm.globals.set('global_timestamp', timestamp);

step2:点击send按钮,

发送请求,请求发送前,执行上述 代码。写入全局变量。

 

step3: 在请求界面中,使用全局变量。

step4:在postman的控制台查看请求

8.3 请求前置脚本工作原理

9、postman的关联

应用于多个http请求之间,有数据关联,或依赖关系。

9.1 案例——天气接口获取城市名称

 

【step1】获取天气接口,提取响应结果中的城市。 

【step2】将全局变量给 百度搜索

10、postman执行批量测试用例

点击→Run collection→ Run

11、postman生成测试报告(完成3.1的安装)

step1:批量执行测试用例集

step2:导出用例集 export(得到啊xxx.json文件)

step3:在终端中执行命令,生成测试报告

newman run 2024年.postman_collection.json -r html

运行在xxx.json同级文件里面生成文件夹,如下所示:

12、小结


今天主要学习关于postman相关的知识点,发现自己之前用的postman,只会执行。原来里面有好多好多要学习的内容,还可以写断言、有前置脚本、有全局变量、环境变量等等。

【没有所谓的运气🍬,只有绝对的努力✊】

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

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

相关文章

C++游戏开发探秘【3】

成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C游戏开发的相关内容! …

python基础:(七)类

目录 一.创建和使用类二.使用类和实例2.1给属性指定默认值2.2修改属性的值2.2.1直接修改属性的值2.2.2通过方法修改属性的值2.2.3通过方法对属性的值进行递增 三.继承3.1子类的方法__init__()3.2给子类定义属性和方法3.3重写父类的方法 四.导入类4.1语法--1:4.2语法--2 前言 p…

TortoiseGit的下载、安装和配置

一、TortoiseGit的简介 tortoiseGit是一个开放的git版本控制系统的源客户端,支持Winxp/vista/win7.该软件功能和git一样 不同的是:git是命令行操作模式,tortoiseGit界面化操作模式,不用记git相关命令就可以直接操作,读…

Avalonia实战实例一:使用Prism创建项目,并创建窗口

文章目录 一、安装Avalonia的项目模板二、安装Prism框架三、简单更改App.axaml为Prism基类四、创建窗口一、安装Avalonia的项目模板 这里安装的是Avalonia 11.2.1,.Net 6.0 安装完成,创建Avalonia项目。 二、安装Prism框架 打开Nuget,搜索Prism: 不要安装Prism.Core: …

【Spark】Spark的两种核心Shuffle工作原理详解

Spark 的shuffle机制 一、Spark ShuffleManager 发展历程 Spark 1.1.0 之前 在 Spark 1.1.0 之前,Spark 使用 BlockStoreShuffleFetcher 来处理 Shuffle 操作。这个实现主要依赖于直接从 BlockManager 获取 Shuffle 数据,并通过网络进行交换。 Spark …

Y3编辑器文档4:触发器1(对话、装备、特效、行为树、排行榜、不同步问题)

文章目录 一、触发器简介1.1 触发器界面1.2 ECA语句编辑及快捷键1.3 参数设置1.4 变量设置1.5 实体触发器1.6 函数库与触发器复用 二、触发器的多层结构2.1 子触发器(在游戏内对新的事件进行注册)2.2 触发器变量作用域2.3 复合条件2.4 循环2.5 计时器2.6…

Scala递归中求汉罗塔游戏的步骤

记:f(n,"A","B","C")表示n个盘子从A柱子上移动到C柱子上,借用B柱子的过程 f(要移动的盘子的个数,起点,辅助柱子,终点) 1.基本情况(直接能求的):f(1,"A","B&…

UE5制作简单水材质

首先准备一张水材质法线贴图,也可以去 爱给网 和 花瓣网 找一张 导入后创建一个材质,如图所示 根据 Unreal 文档,吸收系数设置为红色 0.0033、绿色 0.0016、蓝色 0.0011。水看起来会更真实 然后放到一块平面上,就成功了&#xf…

【Web】2024“国城杯”网络安全挑战大赛题解

目录 Ez_Gallery 法一:shell盲注 法二:反弹shell 法三:响应钩子回显 Easy Jelly 法一:无回显XXE 法二:Jexl表达式RCE signal 法一:SSRF 法二:filterchain RCE Ez_Gallery 用这个bp验证…

【Rust 学习笔记】Rust 基础数据类型介绍——数组、向量和切片

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 博客内容主要围绕: 5G/6G协议讲解 高级C语言讲解 Rust语言讲解 文章目录 Rust 基础数据类型介绍——数组、向量和切片一、数组、向量和…

【软件工程】一篇入门UML建模图(状态图、活动图、构件图、部署图)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

BGP路由优选

BGP是一个应用广泛的边界网关路由协议,定义了多种路径属性,拥有丰富的路由策略工具 BGP路由的各种属性的操作会影响路由的优选,从而对网络流量产生影响,BGP路由的优选规则十分重要 BGP路由优选的规则 当到达同一个目的网段存在…

路径规划之启发式算法之十四:蜘蛛蜂优化算法(Spider Wasp Optimizer, SWO)

蜘蛛蜂优化算法(Spider Wasp Optimizer, SWO)是一种受自然界中蜘蛛蜂行为启发的元启发式智能优化算法。由Mohamed Abdel-Basset等人于2023年提出,算法模拟了雌性蜘蛛蜂的狩猎、筑巢和交配行为,具有独特的更新策略,适用于具有不同探索和开发需求的广泛优化问题。 一、算法背…

在 Ansys Q3D 中求解直流和交流电感

提取电缆的电感对于确保电气和电子系统的性能和可靠性至关重要。本篇博客文章将介绍使用 Ansys Q3D 求解直流和交流电感的过程。 概述 在这个例子中,我们将考虑一个由两组电缆组成的简单几何:正极和负极,如下所示: 可以使用“自…

算法日记 47 day 最小生成树(prim,kruskal)

今天主要是针对最小生成树的两种算法。 用题目来举例 题目:寻宝 53. 寻宝(第七期模拟笔试) (kamacoder.com) 题目描述 在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这…

三、nginx实现lnmp+discuz论坛

lnmp l:linux操作系统 n:nginx前端页面 m:mysql数据库,账号密码,数据库等等都保存在这个数据库里面 p:php——nginx擅长处理的是静态页面,页面登录账户,需要请求到数据库&#…

“, ”逗号分隔打印序列不显最后一个(Python)

可以if条件语句过滤,更可以’, .join()拼接序列省却循环打印。 (笔记模板由python脚本于2024年12月10日 19:03:54创建,本篇笔记适合学过Python基本数据类型的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Fr…

初阶2 顺序表

本章重点 线性表顺序表 1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构&#xff0…

破局沉寂的区块链市场:未来之路与战略思考

近年来,区块链行业经历了高速增长、泡沫破裂和市场低谷。如今,尽管技术发展仍在持续,市场热度却明显降温。无论是公链项目、去中心化金融(DeFi),还是NFT和GameFi,许多领域都陷入了创新瓶颈和用户…

leetcode-289.生命游戏-day3

时间复杂度O(Mn) public void gameOfLife(int[][] board){if(board.length 0 || board[0].length0) return;int m board.length, n board[0].length;int[] neighbor {0, 1, -1};for(int i 0; i < m; i)for(int j 0; j < n; j)if(board[i][j] % 10 1)for(int k 0…