news 2026/4/15 16:22:01

Postman接口测试知识总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Postman接口测试知识总结

🍅点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快

pre-request script 介绍

在过往的工作中,遇到很多测试小伙伴使用 postman 的时候都是直接通过 api 文档的描述请求,检查返回的数据是否正常,很少会用到 pre-request Script 这个功能,甚至也有不少开发的小伙伴也是很少用到这个功能。这个功能类似于 python unittest 里面的 setup 或者是 pytest 里面的 conftest 文件,在执行测试前先执行的函数。

pre-request script 应用

pre-request script 是 postman 执行前的前置条件功能。它能够做到 request 请求前的工作。包括:

  • 对登录验证进行加密或解密
  • 切换环境变量
  • 获取上一个接口的响应值并进行更新

以上都是可以在 pre-request script 功能做的。

postman 执行顺序

首先来讲一下,postman 的执行顺序,其实这个只看一张图就够了。

从 postman 的介绍中,可以知道 postman 执行的顺序会先去到 pre-request script 检查是否有需要执行的前置条件。

pre-request script 场景实践

场景一:登录验证加密

现在有一个我们项目中,登录接口是通过 user token 登录的。前端页面需要填写 username 以及 password,再通过 js 进行 MD5 加密处理,最后请求接口验证返回登录状态。

api : /api/login method : post headers : token: user_token Content-Type: application/json

生成 user_token 方式: username&psaaword 大写

上面就是接口文档说明的,要通过 md5 方式对 username&password 进行加密。那么在 pre-request script 里面,我们可以这样做。

点开环境变量会看到已经生成了 user_token 对应的加密 token 了。

场景二:切换环境变量

可能对应这个场景比较少人会用上,但是不得不说,这个场景确实有用。

平时我们切换测试或者产线环境的时候,都是命名不同的环境名称,然后将对应环境的 HOST 填写到环境变量里面去。经常我们会命名这样的:TEST_HOST,PROD_HOST 这样的方式,当我们切换环境的时候,在 request 中改 HOST 即可。

如果我们可以在请求前,可以自动切换不同的 HOST 就更好。

我们可以这样做,首先在 collection 中定义不同环境的 HOST。

其次,我们在 pre-request script 中定义我们的函数

let varbs = new Set() pm.collectionVariables.values.each(v => { varbs.add(v.key.toUpperCase()) }) pm.collectionVariables.values.each(v => { let envVarbKey = [pm.environment.name, v.key].join("_").toUpperCase() if (varbs.has(envVarbKey)) { pm.collectionVariables.set(v.key, pm.collectionVariables.get(envVarbKey)) } });

这里面的意思,就是根据环境名去 variables 中寻找我们对应的 HOST

最终,我们只需要在不同环境中维护 api-key 等参数即可。

场景三:获取另外接口的响应值并进行更新

在请求的时候,需要获取到另外一个接口的响应值,并将响应值作为当前 request 的参数。在这里,pre-request script 不仅仅能写函数,还能写请求函数。

// Refresh the OAuth token if necessary var tokenDate = new Date(2022,9,3); var tokenTimestamp = pm.environment.get("OAuth_Timestamp"); if(tokenTimestamp){ tokenDate = Date.parse(tokenTimestamp); } var expiresInTime = pm.environment.get("ExpiresInTime"); if(!expiresInTime){ expiresInTime = 300000; // Set default expiration time to 5 minutes } if((new Date() - tokenDate) >= expiresInTime) { pm.sendRequest({ url: pm.variables.get("Auth_Url"), method: 'POST', header: { 'Accept': 'application/json', 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': pm.variables.get("Basic_Auth") } }, function (err, res) { try{ pm.environment.set("OAuth_Token", res.json().access_token); pm.environment.set("OAuth_Timestamp", new Date()); // Set the ExpiresInTime variable to the time given in the response if it exists if(res.json().expires_in){ expiresInTime = res.json().expires_in * 1000; } pm.environment.set("ExpiresInTime", expiresInTime); } catch(e) { console.log('Unable to load access token from response); } }); }

这里面的函数,主要是通过检索 token 是否过期,重新生成 token 的请求方法。比较简单理解。

1、检查 token 是否过期

2、如果过期,就生成新的 token

3、将新的 token 设置到环境变量,然后记录设置的时间

总结

以上就是这篇文章主要讲的内容,主要是讲解 pre-request script 在工作中的应用场景,希望可以帮助到大家。

扩展

前面说到的加密方式,有很多种,不仅仅是 MD5 加密,同时还有 RSA,AES,bash64 SHA1 等等。

这几种加密方式有什么不同,在这里简单讲一下:

  • Base64 是一种用64个字符来表示任意二进制数据的方法,这种编码规则是公开的,基本只要有程序能力都能解开,所以请勿用作加密用途,它的作用不在于安全性,而在于让内容能在网络间无错的传输。(常用语编码特殊字符,编码小型二进制文件等)
  • AES 是对称加密算法,也就是说加密和解密都是采用同一个的密钥。当前最为流行的对称加密算法,这个没有之一。它是如此的常用,以至于很多 CPU 在硬件层面上支持 AES 的加密和解密。AES 是美国政府使用的加密标准,这意味着政府的机密文件大都是用 AES 进行加密的。https 就是使用 AES 来进行数据的加密的,因为 AES 是 TLS 和 SSL 标准的一部分。
  • RSA 公开密钥加密(public-keycryptography),也称为非对称加密,一种密码学算法类型,在这种密码学方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥。这两个密钥是数学相关,用某用户公钥加密后所得的信息,只能用该用户的解密的私钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥。这种通常我们在 github 上会用到。
  • MD5、SHA1 都是不可逆的,防篡改的,用来校验数据真伪的,不是用来加密数据的。

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

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/5 13:10:04

Vuex4:专为 Vue 3 设计,提供完整 TypeScript 支持

Vuex4中组件与Store交互方式对比:Options API通过mapState/mapGetters/mapMutations/mapActions等辅助函数或this.$store直接访问;Composition API则统一使用useStore获取实例,配合computed/watch实现响应式访问。关键区别在于:Op…

作者头像 李华
网站建设 2026/4/8 15:18:02

2026年TOP5口碑背胶供应厂家排行榜揭晓

大家好,我是你们的老朋友小安。今天咱们聊聊一个非常实用的话题——背胶供应厂家。在装修和建筑领域,背胶的质量直接关系到墙面的美观和耐用性。那么,在众多品牌中,哪些厂家的产品最值得信赖呢?今天我们就来揭晓2026年…

作者头像 李华
网站建设 2026/4/11 22:05:33

jquery实现大文件分块上传的解决方案有哪些总结?

【一个.NET程序员的悲喜交加:前端搞定了,后端求包养!】 各位道友好!俺是山西某个人.NET程序员,刚啃完《C#从入门到住院》,就被客户按头要求搞个20G大文件上传下载系统。现在前端用Vue3原生JS硬怼出了半成品…

作者头像 李华
网站建设 2026/4/13 13:17:53

vue2框架下如何优化大文件上传的方案总结?

《一个前端打工人的奇幻外包历险记》 需求分析:这需求是灭霸提的吧? 各位同行大家好!我是一名在福建"苟延残喘"的个人前端开发者。最近接了个外包项目,看到需求文档时我的表情是这样的:😨 → &…

作者头像 李华
网站建设 2026/4/2 2:49:01

jspm基于JSP高校研招考研招生信息共享系统的设计与实现

文章目录研究背景系统目标技术方案核心功能创新点应用价值--nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!以下是关于“基于JSP的高校研招考研招生信息共享系统设计与实现”的摘要内容整理,结合常见学术…

作者头像 李华