使用 Postman 的预请求脚本实现自动刷新接口凭证

发表于:2021-7-12 10:00

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:K8sCat    来源:掘金

  Postman 是一个可以帮你甚至你的团队快速开发 API 的工具。
  近期,在 Postman 上发现一个非常不错的功能 - 预请求脚本(Pre-request Script),即在一个 Request 请求之前可以写 JavaScript 脚本做自动化的任务。
  本文将主要介绍如何使用预请求脚本实现自动刷新接口凭证。
  关于 Postman
  Postman 是一个为接口开发的可以多人协作的平台。Postman 的各种功能可以很好地简化构建一个接口的步骤和提高团队协作的效率,从而以更快的速度去创造更好的接口!
  预请求脚本
  在预请求脚本里,由 pm 这个对象提供大部分重要的功能,包括 pm.environment、pm.sendRequest 等,可以用于测试我们的请求内容和响应结果。
  在 Postman 中,你可以创建一个 Environment 的集合,使用 Environment 可以统一设置一些变量,比如 baseUrl,然后在 Request 的地址栏像下面这样使用:
  {{baseUrl}}/user/get
  这时,在预请求脚本里,我们可以通过下面的方式获取和设置 Environment 的内容:
  // 获取 token 环境变量
  const token = pm.environment.has('token')
  // 设置 token 环境变量
  pm.environment.set('token', 'xxx')
  自动刷新接口凭证
  现在有一个场景:某个接口服务要求请求是需要带上凭证 token,而且这个 token 的有效期只有两小时,如果没有预请求脚本,我们需要每隔两小时重新获取一次 token,这个动作是手动,所以显得十分繁琐。
  但是有了预请求脚本,我们可以在接口集合 Collections 下设置预请求脚本,让接口集合下的所有请求 Request 执行前都会先执行预请求脚本,这个预请求脚本会自动获取接口凭证 token,并设置到环境变量中,此时,接口请求就是正确的了!
  下面是我写的预请求脚本:
  const d = new Date();
  const t = d.getTime();
  const lastRefreshTokenTime = parseInt(pm.environment.get("lastRefreshTokenTime"));
  if (t-lastRefreshTokenTime < 3600000) {
      return
  }
  const url = pm.environment.replaceIn("{{baseURL}}/api/refreshToken")
  const req = {
      url: url,
      method: 'POST',
      header: {
          'Content-Type': 'application/json'
      },
      body: {
          mode: 'raw',
          raw: JSON.stringify({
              appId: pm.environment.get('AppID'),
              appSecret: pm.environment.get('AppSecret')
          })
      }
  };
  pm.sendRequest(req, function (err, response) {
      if (response.code === 200) {
          const data = response.json()
          pm.environment.set('token', data.token)
          pm.environment.set('lastRefreshTokenTime', t)
          return
      }
      console.log(`Error: ${response}`)
  });
  上面的预请求脚本除了会自动刷新 token 外,还会通过环境变量 lastRefreshTokenTime 判断上一次获取 token 的时间,如果时间间隔超过一个小时,才会刷新 token 并设置 lastRefreshTokenTime 为当前时间戳,否则说明 token 仍有效,不会去刷新 token。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号