接口测试--Postman变量

news2024/11/16 21:21:23

Postman是我们做接口测试的常用工具之一,然而对于刚接触Postman的小伙伴们来说,往往对这款工具支持的各类变量感到迷茫,傻傻分不清这些不同级别的变量都有哪些区别、分别适用于哪些场景。

本次分享将对Postman各类变量的创建,执行请求时该变量的作用域,以及不同变量的适用场景,进行详细讲解。

关于变量那些事

Postman中的变量并没有什么神奇之处,和任何编程语言一样,变量就是一个占位符,用来保存执行过程中的初始值,中间值或结果值,这些值也可以通过表达式来生成。我们以简洁的python为例:

a = "hello" 
b = input() 
c = a +" "+ b 
print(c)

(左右滑动查看完整代码)

以上代码运行后,首先通过input() 函数,从控制台获取一个字符串,假设我们给到的字符串是“51testing”,那么这个时候b指代的内容就是“51testing”。

通过a +" "+ b表达式进行字符串拼接后,c指代的内容就是“hello 51testing”,如此,最后通过print(c)运行后,打印输出的内容也就是“hello 51testing”。

我们可以看到以上代码中的 “a,b,c” 三个都是变量,在程序执行过程中指代着不同的内容:

  • 变量a对应的是初始值;
  • 变量b对应的是运行中实时赋予的值;
  • 变量c对应的是一串表达式运算后的结果值。

这就是变量及其在程序执行中的普遍应用。

Postman中的变量

Postman中的变量常用于设置请求前的初始值,请求中用于替换固定参数值,请求后用于相关断 言的处理等。

此外,不同级别的变量,有着各自所负责的作用域(即访问范围的限定)。总而言之,这些变量都起到了承上启下,关联上下文接口业务的作用。

Postman一共提供了5种不同类型的变量,对应5个作用域:

  1. Global —— 全局变量

  2. Collection —— 集合变量

  3. Environment —— 环境变量

  4. Data —— 数据变量

  5. Local —— 局部变量,也有称本地变量

下面我们就这5个变量逐一介绍。

Global —— 全局变量

1、Postman全局变量及其作用域

全局变量,即通用变量,在Postman中所有请求(request)所有用例集合(Collections)等都能访 问到。

正因为如此,我们需要慎重使用全局变量,因为每一个请求(request),每一个断言脚本(Postman中设置断言的地方:Tests),每一个前置处理(Postman中前置处理:Pre-request Script),每一个集合(Postman用于管理一组业务或上下文相关的接口:Collections),这些地方都能随意访问且更改全局变量的值。

一般而言,全局变量仅适用于快速创建原型设计的需求,非必要,不轻易使用。

2、Postman全局变量的创建

在Postman中可以通过界面和脚本两种方式来创建全局变量。

【通过界面创建全局变量】

  • 创建全局变量

  • 初始化全局变量

 

输入变量名称,并给一个初始值,这样一个新的全局变量就创建好了。

注意:

  • 创建完成后不要忘记 “Ctrl+S” 进行保存;
  • 初始值是该变量的默认值。

【通过Script脚本创建全局变量】

创建全局变量并赋值:

pm.globals.set("g_value", "51testing测试圈");

(左右滑动查看完整代码)

在Postman前置处理中创建全局变量:

注意:创建完成后不要忘记 “Ctrl+S” 进行保存。

3、Postman全局变量应用Demo

为了演示全局变量的实现效果,我们这里简单以51testing测试圈首页为例,发送一个请求,在该请求的前置处理中,设置如上全局变量g_value,且更改之前通过界面创建的全局变量g_test的值,通过执行后,将日志打印输出到控制台,一起看一下效果。

构建51testing测试圈首页请求,在前置处理中创建全局变量:

 

在请求后将全局变量值打印输出到日志。

Tests区域专门用于处理请求后的一系列操作,例如断言等,这里我们仅在控制台输出全局变量的值。

//控制台输出全局变量值
console.log(pm.globals.get("g_test"));
console.log(pm.globals.get("g_value"));

执行“Send”后,在控制台查看日志输出。

 

4、其他关于全局变量的常用脚本

这里再给大家汇总一下常用的全局变量脚本,感兴趣的都可以尝试一下:

//创建全局变量并赋初始值
pm.globals.set("全局变量名", "全局变量初始值");
//给全局变量赋值
pm.globals.get("全局变量名");
//通过脚本删除一个全局变量
pm.globals.unset("全局变量名");
//通过脚本清除当前Postman中的所有全局变量
pm.globals.clear();

Collection —— 集合变量

1、Postman集合变量及其作用域

Postman中的Collection集合包含了一组Postman请求,所以该变量的作用域就是该集合范围。集合变量只能由该集合内部的请求才能访问,不属于该集合的请求是访问不到的。

2、Postman集合变量的创建

Postman中Collection集合变量只能通过界面创建,创建步骤如下。

选择你要创建集合变量的那个Collection,点击该集合旁边的 “。。。”,点击 “Edit”:

在界面中选择 “Variables” ,创建一个Collection集合变量,变量名为hot_id,可以不给初始值。

 

这样,我们就创建了一个名为 “hot_id” 的集合变量。

3、Postman集合变量应用Demo

我们以51testing测试圈的搜索为例,展示集合变量的应用。经过接口分析得出如下信息:

请求方式:POST

请求地址:quan.51testing.com/searchAll

请求参数:type=XX;search=X;hotId=X;page=X

请求样例:quan.51testing.com/searchAll?t…

可以看到,虽然是POST请求,但这里的请求参数还是以“?”形式拼接在url后面,类似于GET请求方式。其中type值固为是2,page代表页数。

搜索关键字search,对应的hotId如下:

我们以搜索 “性能测试” 测试为例,且当前接口中的参数hotID引用已经设置好的集合变量“hot_id”:

在Pre-request Script中设置集合变量的值为“9”:

 

执行请求后,相应结果如下:

 

可以发现响应的结果,和我们直接通过网页搜索返回的页面信息一致(以下为直接网页搜索”性能 测试“的结果)。

 

Environment —— 环境变量

1、 Postman环境变量及其作用域

环境变量是Postman中最为频繁使用的变量之一,环境变量的常见使用场景主要有两个:

1、通常情况下,在软件研发过程中,对于被测对象往往有几套环境:例如测试环境、研发环境、客户现场环境等。

而对于接口测试而言,环境变化所引起的仅仅是域名的不同,根据不同的环境会对应不同的域名。

2、上下游关联业务的接口,即A接口请求的响应值中,有一部分作为请求参数,作为B接口请求参数的一部分。

也就是说后一个接口的请求参数依赖于前一个接口的响应参数。

当需要将数据从一个请求传递到另一个请求时,环境变量是一个不错的选择,环境变量的作用域 小于全局变量。

2、Postman环境变量的创建

在Postman中可以通过界面和脚本两种方式来创建环境变量。

【通过界面创建环境变量】

通过界面创建环境变量的方式和之前创建全局变量类似。

分别创建两套环境变量,一套为test环境(用于测试环境),一套为dev环境(用于研发环境)

 

【通过脚本创建环境变量】

在Postman的Pre-request Script和Tests中,可以通过如下语句创建访问环境变量:

//创建环境变量num, 赋值为10
pm.environment.set("num",10)
//获取环境变量num
pm.environment.get("num")

需要注意:这里使用的是pm.environment而不是pm.variables,环境变量 “num” 的作用域仅 限于当前设置的环境,Postman仅在选定的环境中对变量进行操作。

3、Postman环境变量应用Demo

要将环境变量应用到接口测试用例中,非常方便。假设我们当前是在测试环境下,紧接着上面 51testing测试圈搜索案例,选择对应的测试环境后,将域名替换成环境变量即可。

选择test环境并将域名替换成环境变量:

执行请求后,相应结果如下:

 

可以看到和我们在2.2中获取的结果是一致的,说明环境变量已经成功使用了。

大家也可以将test 环境替换成另一套dev环境,自行练习体会一下,加深对环境变量的理解。

Data —— 数据变量

1、Postman数据变量及其作用域

提到数据变量,不得不说数据驱动。对于一个被测接口而言,我们需要准备的测试数据往往不仅 限于一组。

例如最简单的登录,基于等价类边界值的测试设计,我们势必会设计出一系列被测登录账号,难 不成针对每一个登录账号,都构建一个接口请求用例?

这明显是不合逻辑的冗余设计,这时就需要用到数据驱动,即多个相同类型的测试数据,应用于同一个接口测试用例。

在Postman中,这些测试数据是通过测试用例集合(Collections)中的集合运行器添加到接口测试用例中去。

需要注意的是,Data数据变量的来源是用户提供的JSON、CSV或TXT等Postman中支持的数据文件格式。

2、Postman数据变量的创建

以之前 “Collection—— 集合变量”小节提到的搜索接口为例,假设当前有如下待测数据(共7组):

请求方式:POST

请求地址:quan.51testing.com/searchAll

请求参数:type=XX;search=X;hotId=X;page=X

请求样例:quan.51testing.com/searchAll?t…

通过TXT文件创建并保存测试数据:

 

当然,这里的测试数据也可以是CSV、JSON等Postman支持的其他文件格式。

【实现参数化】

对于51testing测试圈的搜索请求,请求参数是拼接在请求地址中的,我们只需要将对应的请求参数进行参数化即可。

参数化后如下,将数据文件中对应的名称列表替换请求中的固定数据:Postman中的参数化表现形式为{{参数名}}。

 

3、Postman数据变量应用Demo

在完成了以上参数化,及数据文件的准备后(别忘记保存),我们就可以投入应用了。

首先,点击这个接口归属的Collections集合,选择Run Collection:

选择待测接口,并添加测试数据文件:

 可以预览一下当前的数据文件:

执行:

 

【执行结果】

从Console控制台可以看到,一共执行了7次,每次都代入了不同的测试数据,由于在请求过程 中,中文字符进行了编码,所以看到的是编码后的效果,英文字符依旧保持原始数据效果不变。

 

Local —— 局部变量

局部变量,又称本地变量,仅在特定请求执行的上下文中运用。如果你熟悉其他编程语言(Java、C、python等),局部变量等同于编程语言中,函数级别的变量。

局部变量的优先级小于全局变量,小于集合变量,小于环境变量。

如果全局/集合/环境变量名,局部变量名相同的情况下,那么将默认使用局部变量。和局部变量创建,需要通过脚本编程的方式,例如:pm.variables.get / pm.variables.set

//jsonData 是一个局部变量,Postman中的脚本是JS,通过var来说声明一个变量
var jsonData = pm.response.json();
//token 是一个局部变量
var token = jsonData.msg.token;
//Postman中创建局部变量 'testVar ',并赋值
pm.variables.set( 'testVar ',token);
//Postman中获取局部变量 'testVar '的值
pm.variables.get( 'testVar ');

总结

以上我们就Postman中不同类型变量的概念,以及各自使用方式、作用域做了详细梳理,配合Demo演示进行应用介绍。

此外有这样几点需要大家注意:

  1. Postman不具备自动保存功能,所以在其中的每一步操作/编辑/更改后,必须记得保存,否则无法生效;

  2. 建议在不同的范围内使用不同的变量名称,以避免混淆;

  3. 对于环境变量,只有在选定的环境区域中才有效,即在解析变量时,Postman 只会查看选定的环境。

最后,希望通过本文的学习,能够有助于你对Postman中变量及其应用的深入理解,有效落实到今后的接口测试项目中去。

最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!【100%无套路免费领取】

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

8小时传疯!大厂面试真题全被大佬整理在这个小程序上了!【软件测试,建议收藏】

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础 

  全套资料获取方式:点击下方小卡片自行领取即可

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

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

相关文章

门店私域流量系统:打开营销新世界的大门

当前,门店私域流量系统已经成为了企业营销的重要利器。通过建立属于自己的私域流量平台,可以让门店更好地了解客户需求,提高营销效果,实现精细化营销闭环。门店私域流量系统有哪些重点功能? 1. 用户画像:通…

【黑产攻防道03】利用JS参数更新检测黑产的协议破解

任何业务在运营一段时间之后都会面临黑产大量的破解。验证码和各种爬虫的关系就像猫和老鼠一样, 会永远持续地进行博弈。极验根据十一年和黑产博弈对抗的经验,将黑产的破解方式分为三类: 1.通过识别出验证码图片答案实现批量破解验证,即图片…

浏览器下载视频插件使用

AIX智能下载器(图片/视频/音乐/文档) - Microsoft Edge Addons软件介绍: AIX智能下载器可高效实现下载管理,网页图片,视频,音频等内容的嗅探和下载,同时扩展集成多个网站的智能脚本,快速提取你想要的内容。…

【zip密码】7-zip分卷压缩方法

想要压缩的文件过大,想要在压缩过程中将文件拆分为几个压缩包并且同时为所有压缩包设置加密应该如何设置? 想要分卷压缩文件并加密一起操作就可以完成了,设置方法如下: 打开7-zip,选中需要压缩的文件,选择…

基于Java的财务管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

毕业论文Word文档中排版各种问题(持续更新中)

目录 封面信息信息对齐 快捷键使用公式公式编号并右对齐 表格续表并自动添加表头和标题 参考文献添加参考文献一篇文献交叉引用多篇文献交叉引用 参考文章链接 这个是在目前正在写论文过程中遇到一些问题,然后边解决边记录的,有些混乱,主要是…

【开源】基于SpringBoot的森林火灾预警系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 系统基础模块2.3 烟雾传感器模块2.4 温度传感器模块2.5 历史记录模块2.6 园区数据模块 三、系统设计3.1 用例设计3.1.1 森林园区基础系统用例设计3.1.2 森林预警数据用例设计 3.2 数据库设计3.2.1 烟雾…

性能测试工具——Jmeter的安装【超详细】

目录 1、性能测试工具:JMeter和LoadRunner对比 2、为什么学习JMeter? 3、JMeter环境搭建 3.1、安装JDK 3.2、下载安装JMeter 3.3、配置环境变量 2.4、启动验证JMeter是否安装成功 4、认识JMeter的目录结构 1)bin目录:存放…

接口自动化测试工具,Postman使用详解

一、概念 1、Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件,Postman分为Postman native app和Postman Chrome app两个版本。目前Chrome app已经停止维护,官方也不推荐使用该版本。 2、官网下载地址:http://www.getpostman…

便利连锁:如何增加收益?教你一招轻松搞定!

自动售货机,作为零售行业的一项颠覆性技术,正逐渐改变着我们的购物方式和商业格局。这一创新技术不仅重新定义了零售业务模式,还为企业提供了更多的机会来满足不断演变的消费者需求。 客户案例 便利连锁店 成都某便利连锁店面临一系列挑战&am…

input 输入中文,高频触发 onchange和oninput事件(CompositionEvent API解决)

问题描述: input onchange和oninput 事件输入中文时高频触发。 输入字母,数字,符号都没问题: 输入中文时问题就出来了: 每个拼音字母都触发了change,甚至输入法里的nin’hao 把拼音分开的字符也会触发。…

git clone 遇到了 early EOF index-pack failed 问题

问题 由于仓库包含了很多文件,仓库过大,导致clone的时候一直报错: 解决方案 注意:过程中需要耐心等待,如果遇到失败,可以多尝试几遍。 压缩目标仓库文件 compression 是压缩的意思,从 clo…

javaweb请求

1.给类加上RestController表示该类是请求处理类 2.判断类里面的hello()方法处理哪个请求,需在方法上加上注解RequestMapping("/hello"),表示浏览器请求localhost:8080/hello这个地址时,会调用此方法,

使用boost.mysql来操作mysql 数据库

准备条件 1. visual studio 2019 2. boost库 3. 安装本地的mysql 服务器,boost.mysql对mysql有版本要求最好8.0,具体参考官方文档 安装 使用Nuget安装boost 要安装 openssl,否则的话编译其他项目会产生依赖ssl的错误 安装mysql 省略 …

“数聚瑞安·创新未来”中国·瑞安第四届创新创业大赛圆满举办!

10月26日,“数聚瑞安 创新未来”中国瑞安第四届创新创业大赛决赛在瑞安东新科创园举行。本次大赛旨在挖掘优质的创新创业项目激活本地创新创业氛围,激发创新创业活力,数字科创赛道吸引了来自全国20多个省市自治区的50多个城市的100多家企业和…

IP地址与代理ip在网络安全中的关键作用

目录 前言 一、IP地址在网络安全中的作用 1、网络流量监视和分析 2、网络安全事件响应 3、网络安全检测和防御 二、代理IP在网络安全中的作用 1、流量过滤和清洗 2、匿名访问和保护隐私 3、实现全球化业务 三、IP地址和代理IP在网络安全中的应用案例 1、DDoS攻击 2…

U盘RAW格式无法格式化怎么办?

我们在使用U盘时候,有时会碰到U盘RAW格式无法格式化的情况。当U盘变为RAW格式时,无论是双击还右键选择打开U盘,Windows系统都会提示无法完成格式化。那遇到RAW格式U盘无法格式化怎么办? 什么是RAW格式? 在开始格式化之…

学编程如何提高自己的编程能力

以下是一些建议,帮助你提高编程能力: 掌握基础知识。了解编程语言的基本语法、数据类型、控制结构等基础知识,是提高编程能力的基础。多写代码。编程需要实践,多写代码才能提高编程能力。可以从简单的练习项目开始,逐…

SpringCloudAlibaba实战-nacos集群部署

写在前面:在学习阶段,我们想快速学习SpringCloudAlibaba功能,但总是花费大量时间跟着视频或博客做组件配置。由于版本的更迭,我们学习时的组件版本很可能和作者的不一致,又或者是各自环境不一,只能一坑又一…

C++前缀和算法的应用:统计得分小于K的子数组数目

本文涉及的基础知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 一个数组的分数定义为数组之和 乘以 数组的长度。 比方说,[1, 2, 3, 4, 5] 的分数为 (1 2 3 4 5) * 5 75 。 给你一个正整数数组 nums 和一个整…