使用Postman进行自动化集成测试

news2024/10/5 20:28:03

1 前言

笔者在使用Node开发HTTP接口的过程中,发现当接口数量越来越多,且接口之间互相依赖时,接口测试流程就会变得十分繁琐,且容易出错。那如何才能高效且全面地对接口进行测试呢?

通过实践,笔者发现可以使用Postman进行自动化集成测试,并将实践过程记录下来。

2 Postman配置

Postman 是一个用于构建和使用 API 的 API 平台,它 简化了 API 生命周期的每个步骤并简化了协作,可以让用户更快地创建更好的 API。以下简单介绍一下它的使用流程。

2.1 项目配置

一个完整的系统往往拥有许多模块和接口,因此推荐建议一个集合(Collection)来方便管理。同理,我们还可以通过文件夹(Folder)的方式对模块进行划分,来让整个项目结构更加清晰。并且这样的设置还有利于接下来的集成测试。

如果这个项目是多人开发,还可以创建一个团队空间(Team Workspace),把项目放到这个团队空间里,这样团队成员就可以一起使用了。需要注意的是,免费版的团队空间仅限3人使用,如果团队成员很多,就需要付费使用了。

 2.2 环境配置

Postman支持设置环境变量(environment variables)和全局变量(global variables)。区别在于,环境变量仅作用于当前环境(environment)下,全局变量作用于整个工作空间(workspace)。笔者自己一般使用环境变量。

环境变量最常见的场景就是设置URL前缀。一般开发接口都会有三个环境,三个环境有不同的URL:

  • 本地环境(local):http://127.0.0.1:xxxx(端口号)
  • 预发环境(beta):https://beta-api.xxx.com
  • 正式环境(production):https://api.xxx.com

 

在不使用环境变量的情况,假设需要测试一个接口:/user/info,三个环境就需要创建三个请求(request),比如本地环境就写成:http://127.0.0.1:xxxx/user/info。

使用环境变量怎么做呢?首先创建一个本地测试环境(local),在里面创建一个BASE_URL的变量,然后修改请求的URL为:{{BASE_URL}}/user/info,在发起请求的时候,Postman会对模版语法替换,把该位置换成变量的值。这样,一个请求就能对应多个环境。

 

除了环境设置,有时候接口可能还接了第三方统一登录,需要设置Cookie值。这个可以在单个接口的header上设置,不过一般都放在全局去做。在Save按钮的底下有行写着Cookie橙色的小字,点开之后就能进行设置。

众所周知,Cookie的作用域是domain本身以及domain下的所有子域名。因此,我们需要先设置域名(domain),然后在域名下面设置对应的Cookie。因为子域名能调用父域名的Cookie,因此这里需要设置本地环境(local)和线上(beta + production)环境两个域名的Cookie即可。

2.3 接口配置

一切准备就绪,我们就可以配置接口请求(Request)。这个也是大家最常用的界面。上部为请求信息,底下为响应数据。

具体来讲,请求可以设置多种请求方式(method),可以设置路由参数(Params),一些请求方式,还需要设置请求内容(body)。请求内容(body)也支持多种数据格式,我这边使用的是JSON格式,对应的content-type为application/json。

除以上通用配置外,Postman还支持设置请求脚本(Pre-request Script)和测试脚本(Tests Script)

 

3 集成测试

上面章节介绍了如何使用Postman去发起一个请求并获取响应,在开发阶段,这些功能可以满足大部分的需求。但进入测试阶段,涉及到多接口联动,如B接口依赖A接口的响应数据,C接口依赖B接口的响应数据,这个时候,就需要测试人员自己手动将A接口的响应数据复制到B接口的请求中去,测试流程十分繁琐。接下来,介绍一个方法来将这些接口请求串联起来。

3.1 测试脚本

基本思路其实还是设置环境变量。比如展示通知接口(/notice/show/:id)依赖创建通知接口(/notice/create),可以把展示通知接口的URL改为{{BASE_URL}}/notice/show/{{notice_id}},只要设置notice_id,就可以调用不同的ID了。区别在于,上面使用的BASE_URL的值是一个确定的常量,而notice_id是随着创建接口动态变化的值,如何动态设置环境变量是关键。

这里就需要用到Postman请求脚本(Pre-request Script)和测试脚本(Tests Script)。

从字面意思理解,请求脚本(Pre-request Script)触发时机是在请求之前,常见的使用场景比如给接口设置一个当前时间戳的参数。测试脚本(Tests Script)触发时机是在请求之后,常用的使用场景比如测试当前接口结果是否正确。这两种脚本都使用JavaScript进行编写,对于前端工程师来说,无任何学习成本,十分赞。

不光是请求(Request)可以设置脚本,集合(Collection)和文件夹(Folder)也能设置脚本,并且它们的脚本可以在内部的所有请求中生效。笔者用console.log测试了这几者的执行顺序,结果如下:

  1. 集合的请求脚本(Pre-request Script)
  2. 文件夹的请求脚本(Pre-request Script)
  3. 请求的请求脚本(Pre-request Script)
  4. 执行请求
  5. 集合的测试脚本(Tests Script)
  6. 文件夹的测试脚本(Tests Script)
  7. 请求的测试脚本(Tests Script)

 

回到需求,在请求之后,动态设置环境变量,因此可以在测试脚本(Tests Script)做这事。

首先我们解析响应数据,转换成JSON对象,然后对返回接口进行判断,如果请求正常,则通过pm.environment.set设置环境变量。同时,这里还可以增加测试点,这一部分可以在响应的Tests Result中看到。另外,在界面右侧有许多代码片段(snippet),可以帮助新手快速上手。

有创建,就有删除,我们可以在删除接口的测试脚本中调用pm.environment.unset("variable_key")来清除该环境变量,这样就完成了闭环。

3.2 全流程测试(Runner)

接口联动的问题解决了,但还是需要测试人员一个个点过去,还是不够智能。

这里,我们用Postman的Runner功能来自动化执行全流程测试。

在执行测试之前,最好对业务流程进行一遍梳理,以便发现问题。

 

流程整理完之后,我们就可以进行配置了。

在Ruuner界面,我们可以在左侧设置测试环境,运行次数等,在右侧可以选择需要测试的接口和调整调用顺序。调用顺序也可以在测试脚本中使用pm.setNextRequest("request_name")进行调整。

点击Run按钮,等待片刻,我们就能得到一个测试结果页面,由于我们之前设置测试点,根据左上角的0 FAILED ,就可以知道这次测试结果通过。

至此,自动化集成测试就完成了。

4 更多

以上步骤,我们都是在Postman的可视化界面下完成的,其实Postman还有命令行工具:newman。配合jenkins等持续集成工具,可以真正实现自动化测试。

该命令行工具可以通过NPM进行安装:

  1. npm install -g newman

  2. 复制代码

具体方法详见官方文档。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:


这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

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

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

相关文章

程序员的职业连续性就那么重要吗?

大家好,我是风筝,微信搜「古时的风筝」,更多干货 年初的时候时候一个同学跟我聊天说起最近面试的经历。说投了不少简历,但是面试的机会不多,而且有的负责照片的 HR 直接跟他说:“你的工作连续性不达标&…

AI专题报告:AI多模态提升商业化价值,应用多点开花验证景气度

今天分享的AI系列深度研究报告:《AI专题报告:AI多模态提升商业化价值,应用多点开花验证景气度》。 (报告出品方:太平洋证券) 报告共计:21页 1 一周行情回顾 上周上证综指、深证成指、创业板指…

两个月软考-高项上岸

文章目录 前言结缘软考功亏一篑有始有终2个月计划资料部分计划截图 总结 前言 我们看小说或者电视剧电影都会看到这样的情节,主角一开始锦衣玉食,突然家道中落,啥都没了,主角再一路奋起重新找回了属于自己的一切;还有…

视频汇聚/音视频流媒体视频平台/视频监控EasyCVR分享页面无法播放,该如何解决?

国标GB28181安防视频监控/视频集中存储/云存储EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统…

数据库系统概论期末经典大题讲解(范式提升、求闭包、求主码)

上一次我们介绍了数据库中关系代数查询,从选择、投影到连接等操作符,探索了数据库查询 大家可以移步我的文章:数据库系统概论期末经典大题讲解(用关系代数进行查询)-CSDN博客 今天,我们将继续沿着数据库系统…

111.am40刷机折腾记4-firefly镜像-dp正常显示

1. 平台: rk3399 am40 4g32g 2. 内核:firefly的内核(整体镜像) 版本: linux4.4.194 3. 交叉编译工具 :暂时不编译 4. 宿主机:ubuntu18.04 5. 需要的素材和资料:boot-am40-202…

14、SQL注入——HTTP文件头注入

文章目录 一、HTTP Header概述1.1 HTTP工作原理1.2 HTTP报文类型1.3 较重要的HTTP Header内容 二、HTTP Header注入2.1 HTTP Header注入的前提条件2.2 常见的HTTP Header注入类型 一、HTTP Header概述 1.1 HTTP工作原理 1.2 HTTP报文类型 (1)请求报文 …

CrystalDiskInfo中文版(硬盘检测工具) v9.1.1.0 绿色汉化版-供大家学习研究参考

更新内容 重新支持三星SATA SSD寿命报告 增加对ZHITAI SC001的支持 新增SK hynix Gold S31支持 增加了KLEVV NEO N610的支持。 改进的Micron/Crucial SATA SSD支持 已更改 卸载程序将显示一个确认对话框,用于删除设置。 强大功能 1.拥有多国语言,…

element中el-select多选v-model是对象数组

文章目录 一、问题二、解决三、最后 一、问题 element中的el-select的v-model一般都是字符串或者字符串数组,但是有些时候后端接口要求该字段要传对象或者对象数组,如果再转换一次数据,对于保存配置和回显都是吃力不讨好的事情。如下所示&am…

Linux--学习记录(2)

解压命令: gzip命令: 参数: -k:待压缩的文件会保留下来,生成一个新的压缩文件-d:解压压缩文件语法: gzip -k pathname(待压缩的文件夹名)gzip -kd name.gz(待解压的压缩包名&#x…

数据库版本管理框架-Flyway(从入门到精通)

一、flyway简介 Flyway是一个简单开源数据库版本控制器(约定大于配置),主要提供migrate、clean、info、validate、baseline、repair等命令。它支持SQL(PL/SQL、T-SQL)方式和Java方式,支持命令行客户端等&am…

SpringIOC之@Configuration

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

手机的隐私空间的相关知识

一、删除: 进入隐私空间: 打开手机的设置,找到隐私空间(或类似名称)选项,然后输入密码或验证方式进入隐私空间。浏览内容: 在隐私空间中,您可以浏览存储在其中的照片、视频、文件等内容。选择删除: 选择您想要删除的内容,通常可以通过长按或选中复选框的方式进行多选…

孩子都能学会的FPGA:第二十六课——用FPGA实现CIC抽取滤波器

(原创声明:该文是作者的原创,面向对象是FPGA入门者,后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门,作者不光让大家知其然,还要让大家知其所以然!每个工程作者都搭建了全自动化的仿…

第二次上机测试:Javascript. (第一组)

需求:(注意在规定的时间,在自己的博客提交作品,便于统计测试的完成情况。博客题目《第二次上机测试:Javascript.》) 1、点击按钮,将图片加上边框 2、点击按钮,将图片缩小为长和宽都…

windows安装protoc、protoc-gen-go、protoc-gen-go-grpc

文章目录 一、 protoc二、protoc-gen-go三、protoc-gen-go-grpc 一、 protoc 1,下载:https://github.com/google/protobuf/releases 下载对应的protoc,注意选择windows 2,下好之后解压就行,然后把bin目录加入到环境…

无损放大神器,Topaz Gigapixel AI,让你的图像更清晰!

无论是摄影爱好者、设计师还是专业摄影师,我们都希望能够拍摄到最清晰、最细腻的图像。然而,在现实生活中,我们往往会面临图像放大后模糊失真的问题。为了解决这一难题,我们推荐一款强大的图像无损放大工具——Topaz Gigapixel AI…

2020年第九届数学建模国际赛小美赛B题血氧饱和度的变异性解题全过程文档及程序

2020年第九届数学建模国际赛小美赛 B题 血氧饱和度的变异性 原题再现: 脉搏血氧饱和度是监测患者血氧饱和度的常规方法。在连续监测期间,我们希望能够使用模型描述血氧饱和度的模式。   我们有36名受试者的数据,每个受试者以1 Hz的频率连…

对python自动生成接口测试的示例讲解

在python中Template可以将字符串的格式固定下来,重复利用。 同一套测试框架为了可以复用,所以我们可以将用例部分做参数化,然后运用到各个项目中。 代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2…