搞定 Postman 接口自动化测试,看这篇文章就够了!

postman

本文适合已经掌握Postman基本用法的读者,即对接口相关概念有一定了解、已经会使用Postman进行模拟请求等基本操作。

工作环境与版本:

Window 7(64位)

Postman (Chrome App v5.5.3)

P.S. 不同版本页面 UI 和部分功能位置会有点不同,不过影响不大。

首先我们来思考一下,如果要达到自动化接口测试效果,在基本的模拟请求上还需要做哪些呢?

我粗略概括为 3 个问题(欢迎在评论区留言更多补充建议):

1. 如何判断接口是否请求成功?

2. 如何进行接口批量、定期测试?

3. 如何处理依赖接口问题(比如商品下单的接口必须要求先登录)?

所以,接下来就主要分为 3 个部分,介绍如何解决这 3 个问题。

二、接口结果判断

首先,既然是自动化测试,那么我们肯定需要通过工具Postman或者代码,帮我们直接判断结果是否符合预期。那么在接口测试上,大体就两个思路:

1. 判断请求返回的 code 是否符合预期

2. 判断请求返回的内容中是否包含预期的内容(关键字)

接下来我们看看如何利用Postman来解决上述的问题:

1.1 功能区

在Postman中相关的功能在非常显眼的地方,Tests功能的使用需要我们有一定的编程语言基础,目前支持的脚本语言即为JavaScript。但比较好的一点是,我们不需要再去考虑上下文问题以及运行环境的问题 ,也就是说我们只需要在这边完成结果逻辑判断的代码块即可。

而Postman还为我们提供了一些常用的代码模板,在Tests面板右边的SNIPPETS功能区中,所以对JavaScript不大了解问题也不大。代码编写相关将在下文进行具体介绍。

1.2 脚本相关

先看上图的代码部分,我们可以发现responseCode、responseBody和tests三个变量(可直接使用) :

responseCode :包含请求的返回的状态信息(如:code)。

responseBody:为接口请求放回的数据内容(类型为字符串)。

tests :为键值对形式,用于表示我们的测试结果是成功与否,最终展示在 Test Results 中。

key :(如:code 200)我们可以用来当做结果的一个描述。

value:其值为布尔型,ture 表示测试通过, false 表示测试失败。

所以上述代码应该不难理解了,而有了返回结果的数据以及表示结果成功与否的方式,那么我们“接口结果判断”的问题也就基本解决了。

另外还有几个比较常用的:

responseTime :请求所耗时长

postman :可以做的比较多,比如

获取返回数据的头部信息:

`postman.getResponseHeader("")`

设置全局变量:

`postman.setGlobalVariable("variable_key", "variable_value");`

更多功能可以查看官方文档。

1.3 代码模板

Postman在SNIPPETS功能区中为我们提供的代码模板已经能解决大部分情况了,以下先挑几个跟结果判断相关的进行讲解:

Status code : Code is 200

//根据返回的 Code 判断请求情况

tests["Status code is 200"] = responseCode.code ===200;

Response body: Contains string

//判断返回的内容中是否存在“关键字”。(tests 的 key 可修改,将不再强调)

tests["Body matches string"] = responseBody.has("这里可以改为你要判断的关键字内容");

//如上文提到的:

//判断结果中是否存在 access_token 关键字

tests["has access_token"] = responseBody.has("access_token");

Response body: is equal to string

//判断返回内容是否跟预期完全相等。

tests["Body is correct"] = responseBody ==="这里可以改为你的预期内容";

Response body: JSON value check

//上文提到,responseBody 为字符串类型,支持转为 Json 格式

varjsonData = JSON.parse(responseBody);

tests["Your test name"] = jsonData.value===100;

Response time is less than 200ms

//判断请求时长是否小于200ms ,具体时长按情况自定义

tests["Response time is less than 200ms"] = responseTime <200;

以上介绍的这些基本已经足够完成对单一接口的测试了,但我们知道如果没有批量、定时任务, 那么这些都将毫无意义,所以继续 …

三、集合(批量)测试

想要进行接口的批量测试、管理,那么我们需要将待测试的接口全部都保存到同一个集合(Collections)中,你可以认为就是保存到同一个文件夹中。先看看Postman中的操作步骤:

通过以上步骤,我们得到一个待测的接口集合,为了简化情况,我这边每个接口成功与否的条件都是用code是否为 200 来判断:

tests["Status code is 200"] = responseCode.code === 200;

2.1 批量执行

以上准备就绪后,我们就可以开始批量运行接口进行测试了:

点击Run后,会新打开一个页面:

Environment :用于切换接口运行的环境,这里先不管,后面再讲

Iteration :用于设置接口一共要运行的次数。

Delay : 设置每次运行接口之间的时间间隔,单位为毫秒。

Data File : 上传测试数据文件 (下文单独讲)

2.2 变化的参数数据

我们已经了解了,如何让多个接口循环运行多次,但是现在有个问题,按目前这个步骤,每次运行时接口的参数都是一样的,那么就算我们运行个100次、1000次意义也不大。

先看看我们写好的一个登录功能的接口:

使用变量

现在登录的账号和密码参数都是写死的,也就是不过我们执行多少次,都是拿这个账号去测试。那么如果想要测试账号密码参数使用其它值有没有异常怎么办呢?( 想要每次都手动改的可以跳过这部分 /手动滑稽)这里我们先简单讲一下在Postman中使用如何“变量”,如下图:

引用一个变量的语法:{{变量名}}, 图中可以看到,我们将账户和密码字段的参数值都设置为变量:{{username}} 、{{password}}。修改完直接点击运行(Send)当然是不行的,因为目前这两个变量还未被赋值,不过我们可以在Pre-request Script面板中进行赋值操作:

Pre-request Script

Pre-request Script与Tests类似,区别在于:Pre-request Script中的脚本是在执行请求之前运行,而Tests中的脚本则是在请求完成之后执行。所以,我们可以在Pre-request Script功能区中用脚本先个上面两个变量进行赋值,如:

//设置全局变量

postman.setGlobalVariable("username","test1");

postman.setGlobalVariable("password","123456");

但是用Pre-request Script进行赋值操作仍然不能解决我们的问题,因为按照这种写法,不论运行多少次其实都还是用固定(写死)的数据进行测试。当然既然是脚本语言,也会有更灵活的用法,这边先不将。

测试数据集

接下来我们讲讲Data File, 在运行集合前的这个选项就是用来上传测试数据(文件)以赋值给相应变量的。我们先以CSV格式的测试数据为例:

username,password

test1,123456

test2,222222

test3,123456

test4,444444

数据格式类似表格,第一行表示对应的变量名,下面 4 行表示 4 组账号密码数据(其中两组为正确数据) ,我们保存一份内容为上述示例数据后缀名为.csv的文件后,再次开始测试看看效果,我们选择运行次数为 4 (对应 4 组测试数据)、选择对应的CSV文件运行后,可以看到我们的结果确实如我们的预期。接口Request运行的结果为两次成功两次失败,也就是每一次运行都赋值了不同的账号密码的测试数据 (在最新的桌面客户端版本中可以看到每次具体的请求情况,这边就不再细说了)。

如果使用Json文件的话,那么格式如下:

[

{

"username":"test1",

"password":"123456"

},

{

"username":"test2",

"password":"222222"

},

{

"username":"test3",

"password":"123456"

},

{

"username":"test4",

"password":"444444"

}

]

2.3 定期任务

Postman提供了一个Monitors(监视器)功能,支持我们提交一个测试任务,按照设置的定时器进行运行,如每小时测试一次,具体操作如下:

四、请求依赖问题

讲完接口结果判断和集合批量测试后,我们再来看看比较复杂的情况,即依赖请求问题,比如我们的购物下订单接口要求必须先登录后才可访问。但大部分依赖问题其实本质上就是一个接口间数据传递的问题,比如调用登录接口后返回一个标识,假设为token,那么我们请求下订单接口时只要一起携带token参数进行请求即可。所以,问题变为:

保证接口调用顺序

将接口A返回的数据传递给后续的接口B、C、D

3.1 接口执行顺序

首先,说明一下,接下来说的接口都是默认属于同一个集合(Collections)中的。

还是以我们上文中创建好接口集合为例,如果你有注意我们执行批量测试的结果,就会发现接口的执行顺序其实就是按照这边目录中的顺序(从上到下),即:Request1 -> Request2 -> Request3。

这边接口名字可能有点误导性,所以再强调一下:按目录中从上到下的顺序执行 (与字典排序无关)

所以有了这个默认的执行顺序后,那么我们便可以把需要优先执行的接口放前面即可,比如把“登录接口”放在第一个。

3.1.2 自定义执行顺序

当然,如果只有默认的一个执行顺序的话,通常没法满足我们复杂的业务需求,所以Postman为我们提供了一个函数:postman.setNextRequest("填写你要跳转的接口名"),支持我们跳转到指定接口继续执行,举个例子:

我们在运行完Request1接口成功后,不需要再运行Request2而是直接跳至Request3,那么我可以在Request1接口的Tests功能区中执行跳转代码,如:

这里需要注意几点:

1. postman.setNextRequest() 只在运行集合测试的时候生效,也就是说我们单独运行 (Send) 接口Request1时,函数是不起作用的。

2. 当我们运行集合测试成功从

Request1 -> Request3 后,如果 Request3 后面还有接口,那么后面的接口仍然继续按默认顺序执行,即图中的接口 Request4仍会被执行。

3. 指定的跳转接口必须属于同一个集合中。

4.

setNextRequest() 函数不管在 Tests 脚本中何处被调用,它都只在当前脚本最后才被真正执行。比如我们将图中的第二行与第一行互调后,那么在运行跳转函数后第二行代码仍会被执行。

所以,利用setNextRequest()函数,我们便可以按照条件跳过不必要的接口,或者建立我们自己的一个逻辑测试。

3.2 数据传递

在讲数据传递前,先聊聊Postman中全局变量、环境切换的使用。

3.2.1 全局变量

全局变量的概念其实我们在上文中讲Pre-request Script时有简单提到,也就是说我们可以通过脚本代码来设置全局变量,我们可以看看运行上文的脚本后的效果:

我们可以看到运行后,username和password两个变量已经被成功保存下来,那么我们在任意接口中便都可以通过变量引用的语法如:{{username}}来使用它们。

另外,Postman不仅支持代码设置全局变量的方式,它还支持可视化操作:

进入对应界面后,便可直接进行管理:

3.2.2 多环境区分与切换

通常情况下,我们的接口都会分为测试版本和线上版本(或者更多),而他们的区别可能仅是ULR不同,那么全局变量便不大合适解决这个问题。

参数的创建

可能你已经注意到,上图中我已经建有几个不同环境的参数“集合”了,再看一下:

我在每个环境中都创建了一个host参数,如:

当然,我们的环境参数也可以通过脚本的方式来进行设置,函数为:

//注意,该参数只添加到你当前选择的环境的“参数集”中

postman.setEnvironmentVariable("variable_key","variable_value");

使用与切换

环境“参数集” 中的参数使用方式和全局变量一致,如图中{{host}},不同环境的切换见下图:

3.3 解决依赖问题

掌握以上的预备知识后,我们开始看看如何用Postman解决存在依赖关系的接口测试。

假设场景

我们的接口Request1为登录接口,登录成功将会返回一个access_token字段作为标识(已实现)。那么假设接口Request3为一个下订单的接口,需要携带登录返回的access_token才能正常访问。

思路

1. 保证 Request1 在 Request3 之前被运行

2. 将 Request1 返回的 access_token 的值添加到环境变量"参数集"中。

3. Request3 在请求时引用 access_token 的值

将返回值存在 “全局变量” 或者 “环境变量” 中,视具体业务情况而定,该例中access_token的值是与环境有关的,所以这里选择使用环境变量集存储。

Postman 中的操作

1. 我们目录中已保证Request1接口优先执行

2.Request1中Tests的代码情况:

if(responseCode.code ===200&& responseBody.has("access_token")){

//如果 code 为 200, 并且返回的数据中存在 access_token 关键字,则认为登录成功

tests["login"] =true;

//将返回的内容转为 json 格式,并且取到 access_token 内容,添加到环境变量中

varjsonData =JSON.parse(responseBody);

//access_token的取值方式视具体的 json 数据结构而定

postman.setEnvironmentVariable("token",jsonData.result.access_token);

//跳转到 Request3 接口

postman.setNextRequest("Request3")

}else{

tests["login"] =false;

//登录失败,可以选择跳转到对应失败后的处理接口进行测试

//postman.setNextRequest("Other Request")

}

3. 在接口Request3中使用变量token:

> 我这边是将`token`放在头部信息中, 具体使用方式时接口参数规则而定。

运行并查看结果

运行集合测试,可以看到我们结果符合我们的预期,Request1和Request3通过测试,Request2被跳过,Request4仍被执行。

 总结

如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入我们,加入方式在文章的最后面

  自动化测试相关教程推荐:

2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili

测试开发相关教程推荐

2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili

postman/jmeter/fiddler测试工具类教程推荐

讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili

2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili

2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili

  总结:

 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

​​​

​​​

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!

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

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

相关文章

添加 常用校验方法,校验常见数据格式

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、相关回顾 基于 Valid…

Tomcat基础升华学习

01 What is Tomcat 1.1 Tomcat官网 官网 &#xff1a;https://tomcat.apache.org 1.2 Understand 为什么说Tomcat是Servlet之类技术的实现&#xff1f; 在我们的理解中&#xff0c;Tomcat可以称为Web容器或者Servlet容器 不妨通过手写一个Tomcat来推导一下 1.2.1 创建Tomc…

从Scroll怒喷社区用户事件,看L2龙头ZKFair的做事格局

这两天&#xff0c;随着美国SEC正式批准所有11只比特币现货ETF的消息公布&#xff0c;吸引了传统主流增量资金的入场&#xff0c;比特币多头一举将比特币干到了48000刀的位置&#xff0c;并随时向着前高发起了冲击。比特币的强势带动了其他加密资产的保障&#xff0c;整个加密市…

【计算机毕业设计】基于springboot的校园跑腿任务管理系统java+vue

校园跑腿管理系统又称“效率鸭”跑腿系统&#xff0c;是在学校进行现代化的信息管理和提供信息服务的基础&#xff0c;引导人们快速、准确地获取快递资源、预约洗浴并对外卖资源进行有效管理的保证。疫情当下&#xff0c;为了减少人员的聚集&#xff0c;因此&#xff0c;迫切需…

家用洗地机哪个品牌质量比较好?高配置洗地机推荐

近年来&#xff0c;科技飞速发展&#xff0c;推动了多个新兴行业的崛起&#xff0c;其中洗地机行业也在不断扩大。然而&#xff0c;随着市场的蓬勃发展&#xff0c;洗地机市场的产品质量参差不齐。在众多品牌中&#xff0c;真正致力于深入研究和创新的品牌相对较少。洗地机的问…

js封装根据年月日获取星座效果demo(整理)

//根据年月日获取星座 function getZodiacSign(dateString) {// 用法:const dateStr 2024-01-11;// const zodiacSign getZodiacSign(dateStr);const date new Date(dateString);const month date.getMonth() 1;const day date.getDate();if ((month 1 && day &…

32个图片素材库网站,有些直接免费商用!

划到最后“阅读原文”——领取工具包&#xff08;超过1000工具&#xff0c;免费素材网站分享和行业报告&#xff09; Hi&#xff0c;我是胡猛夫~&#xff0c;专注于分享各类价值网站、高效工具&#xff01; 更多内容&#xff0c;更多资源&#xff0c;欢迎交流&#xff01; 公 …

揭秘HTTP协议:深入了解互联网通信的核心!

文章目录 HTTPHTTP的消息结构HTTP 常用请求方法HTTP 状态码 HTTP HTTP 是超文本传输协议&#xff0c;HTTP是缩写&#xff0c;全称是 HyperText Transfer Protocol 超文本指的是 HTML、css、JavaScript和图片等&#xff0c;HTTP的出现就是为方便接收和发布超HTML页面&#xff0c…

多模态大模型

一、图文匹配 二、Stable-Diffusion(稳定扩散) 图片生成器 Stable-Diffusion(稳定扩散)组成模块: CrossAttention模块:将文本的语义信息与图像的语义信息进行Attention机制&#xff0c;增强输入文本Prompt对生成图片的控制。SelfAttention模块:SelfAttention模块的整体结构与C…

ES分词器

Analysis&#xff1a;文本分析是把全文本转换一系列单词的过程&#xff0c;也叫分词。Analysis是通过Analyzer(分词器)来实现的。 1.Analyzer组成 注意&#xff1a;在ES中默认使用标准分词器&#xff1a;StandardAnalyzer。特点是&#xff1a;中文是单字分词&#xff0c;英文是…

社区嵌入式服务设施建设为社区居家养老服务供给增加赋能

近年来&#xff0c;沈阳市浑南区委、区政府牢记在辽宁考察时的重要指示精神&#xff0c;认真践行以人民为中心的发展思想&#xff0c;聚集“一老一小”民生关切&#xff0c;统筹推进以社区为骨干结点的养老服务探索实践。围绕“品质养老”民生服务理念&#xff0c;针对社区老年…

验证端口连通性的工具 telent nc

验证端口连通性的工具 telent nc 1、怎么验证端口连通性的工具2、telnet3、nc 1、怎么验证端口连通性的工具 telent nc这2个工具都可以验证端口连通性 2、telnet 命令格式 默认是验证tcp端口连通性 telnet ip port如果需要验证udp端口连通性 需要加上 -u telnet -u ip por…

经典算法-模拟退火算法求解旅行商问题TSP

经典算法-模拟退火算法求解旅行商问题TSP 旅行商问题&#xff08;Traveling Salesman Problem, TSP&#xff09;是组合优化中的经典问题。简单地说&#xff0c;一个旅行商需要访问N个城市&#xff0c;并返回到出发城市&#xff0c;问题是找到最短的可能路线&#xff0c;使得每…

1045 - Access denied for user ‘root @223.98.184.126‘ (using password: YES)

Mysql 1045错误 1 知识小课堂1.1 Mysql 1045错误1.2 mysql 常见的错误代码 2 问题呈现3 问题解决3.1 开始前的准备3.1.1 防火墙开端口3.1.2 宝塔管理控制 3.2 问题解决步骤 Navicat 连接数据库的时候报错&#xff0c;本文就是解决此问题。 1 知识小课堂 1.1 Mysql 1045错误 …

sectigo通配符dv证书400元买一年送1月实际签发13个月

Sectigo就是众多颁发数字证书的CA认证机构之一&#xff0c;旗下的DV通配符SSL证书作为一种加密通信工具&#xff0c;广泛应用于保护网站数据的安全。其中&#xff0c;SectigoDV通配符SSL证书是一种受欢迎的产品&#xff0c;它不仅能够提供强大的加密功能&#xff0c;还可以提高…

OpenGl L6坐标系统

一.标准化设备坐标 我们在L5谈到了对顶点着色器中的点进行变换&#xff0c;而变换的范围必须在 -1.0到1.0 之间&#xff0c;否者将不可见。只有将所有的点转换为标准化设备坐标后&#xff0c;才能全部传入光栅器&#xff0c;再转换为屏幕上的像素。 将坐标变换为标准化设备坐标…

【C语言小游戏】贪吃蛇

文章目录 1.引言2.运行图2.涉及知识3 Windows API3.1 控制台3.2 控制台屏幕坐标3.3 操作句柄3.4 控制台屏幕光标3.5 监视按键 4. 设计说明5. 完整代码 1.引言 使⽤C语⾔在Windows环境的控制台中模拟实现经典⼩游戏贪吃蛇 实现基本的功能&#xff1a; 贪吃蛇地图绘制蛇吃⻝物的…

基于SpringBoot的洗衣店管理系统

基于SpringBoot的洗衣店管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 可视化展示 用户界面 管理员界面 摘要 洗衣店管理系统基于Spring Boot框…

LeetCode 38 外观数列

题目描述 外观数列 给定一个正整数 n &#xff0c;输出外观数列的第 n 项。 「外观数列」是一个整数序列&#xff0c;从数字 1 开始&#xff0c;序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列&#xff1a; countAndSay(1) "1…

09Bean的生命周期/作用域不同管理方式不同/自己new的对象纳入Spring容器管理

Spring其实就是一个管理Bean对象的工厂。它负责对象的创建&#xff0c;对象的销毁等。 所谓的生命周期就是&#xff1a;对象从创建开始到最终销毁的整个过程。 Bean的生命周期之5步 ● 第一步&#xff1a;实例化Bean(无参构造方法执行) ● 第二步&#xff1a;Bean属性赋值(注…