Postman Pre-request 使用
Postman 这么强大的工具怎能不写一篇简单的工具应用篇博文呢,本文介绍的是 Pre-request scripts 的使用,是基础使用的进阶版。
一、背景
当我们在对 api 进行测试时,很多时候,请求参数中会涉及一些加密的参数等,比如签名。
当我们使用 Postman 进行测试时,我们希望的是当我们定义好签名的加密算法后,Postman 可以自动帮我们进行计算并作为参数传递。
本文就先围绕签名的自动化生成为例,涉及 Base64编码 和 MD5 加密。
二、使用
1、占位符说明
先举一个请求地址的栗子:http://localhost:9090/apps/task/inWorkList/{{token}}?signed={{signed}}
注意到地址中的 token 和 signed 的占位写法是使用两对花括号进行包裹,然后我们在其它地方进行计算生成后会替换此处的参数,
替换后的地址为:http://localhost:9090/apps/task/inWorkList/1qaz2wsx?signed=1qaz2wsx
注:同样的占位符写法,我们可以应用在 URI、Headers、Body 中。
2、变量介绍
在上文介绍的占位符,其实取值来源是 Postman 的变量。
在 Postman 中变量是有全局变量(global)和环境变量(environment)的区分的,并且都是 k-v 的键值对形式。
注:value 一般都是 string 格式,我们在使用的时候要使用 JSON.stringify() 和 JSON.parse() 来进行序列化和反序列化。
正如名字所示,全局变量是可以在任意一个地方使用的,而环境变量仅在当前环境下使用,当然,如果在两处定义了相同的key,比如在两处都定义了 signed:1qaz2wsx 的k-v键值对,则环境变量具有较高的优先级。
3、变量管理
有两种方式,一是直接在客户端进行操作,如图:
二是在 Pre-request 区域使用代码进行 get 和 set,一看便知:
// 清除全局变量 pm.globals.unset("variable_key");// 清除环境变量pm.environment.unset("variable_key");// 获取全局变量pm.globals.get("variable_key");// 获取变量pm.variables.get("variable_key");// 获取环境变量pm.environment.get("variable_key");// 设置全局变量pm.globals.set("variable_key", "variable_value");// 设置环境变量pm.environment.set("variable_key", "variable_value");
复制代码
其实在客户端有常用操作的提示:
4、代码详解
直接贴代码,说明:此处的 token 和 signed 的生成需要依赖时间戳(形似:20181225224000),该时间戳是采用 JS 的 Date() 慢慢拼接出来的。
token 是 base64 编码。
signed 是 MD5 加密。
// 变量 // uidvar uid = '7777'var api_sig_str = pm.variables.get("api_signed_str");// 时间var d = new Date()var year = d.getFullYear().toString()var month = (d.getMonth() + 1).toString()month = dateLengtgInit(month)var day = d.getDate().toString()day = dateLengtgInit(day)var hour = d.getHours().toString()hour = dateLengtgInit(hour)var minute = d.getMinutes().toString()minute = dateLengtgInit(minute)var second = d.getSeconds().toString()second = dateLengtgInit(second)var time = year + month + day + hour + minute + secondconsole.log(time)// token(base64)var token = CryptoJS.enc.Base64.stringify(uid + time)console.log(token)// postman.setGlobalVariable("token",token)pm.environment.set("token",token)//signed (md5加密)var signed = api_sig_str + '_' + uid + '_' + timeconsole.log(signed)var signedMd5 = CryptoJS.MD5(signed).toString()console.log(signedMd5)// pm.globals.set("signed",signedMd5)pm.environment.set("signed",signedMd5)// 方法定义function dateLengtgInit(num){if (num.length==1){return "0"+num;} else {return num}}
复制代码
5、踩坑
此时执行的时候会报错:
There was an error in evaluating the Pre-request Script: TypeError: r.clamp is not a function
慢慢调试发现,其实是 base64 编码的时候有误,我们需要先进行 Utf8 编码,
即将下段代码:var token = CryptoJS.enc.Base64.stringify(uid + time)
变更成:var token = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(uid + time))
三、参考
官方文档:链接地址
原文地址:www.jetchen.cn/postman-pre…
Postman Pre-request 使用相关推荐
- 如何用Postman组装Request并且查看Response
Postman安装好之后,我们先打开Postman,可以看到界面分成左右两个部分,右边是我们后头要讲的collection,左边是现在要讲的request builder.在request build ...
- Postman使用小技巧 - 用Postman生成Request代码
Postman这款工具可以让你很方便的测试你的Web API,那如果你实在是没办法用Postman,必须手写代码,又或者你有别的需求是Postman没法实现的,你必须写一个特殊的script或App来 ...
- Postman使用技巧之三:用Postman生成Request代码
Postman这款工具可以让你很方便的测试你的Web API,那如果你实在是没办法用Postman,必须手写代码,又或者你有别的需求是Postman没法实现的,你必须写一个特殊的script或App来 ...
- 基于SpringBoot实现文件上传功能(前端使用postman检查request)
这周培训中有一天的作业是使用SpringBoot实现文件上传功能,老师的要求是在他搭好的基础上加上文件上传模块和前端上传的部分,spring工程搭好了,老师写的代码比较多,虽然实现了功能,但是不助于对 ...
- 一文全面解析 Postman 工具
点击关注公众号,Java干货及时送达 postman是一款支持http协议的接口调试与测试工具,其主要特点就是功能强大,使用简单且易用性好 .无论是开发人员进行接口调试,还是测试人员做接口测试,pos ...
- 用了这么多年的 Postman,竟然用错了~
作者 | 雨滴测试 来源 | https://www.toutiao.com/i6913538714060800515/ postman是一款支持http协议的接口调试与测试工具,其主要特点就是功能强 ...
- 东半球最全的 postman 使用教程
点击关注公众号,实用技术文章及时了解 postman是一款支持http协议的接口调试与测试工具,其主要特点就是功能强大,使用简单且易用性好 . 无论是开发人员进行接口调试,还是测试人员做接口测试,po ...
- Postman安装与基本操作
Postman下载安装 Postman下载 Postman分为Postman native app 和Postman Chrome app两个版本. 目前Chrome app已经停止维护,官方也不推荐 ...
- postman实践与运用
postman是一个强大的接口调试工具,可打包.发送http请求,保存响应及断言等 postman是一款REST接口的客户端软件,支持所有http协议的请求方式. 支持的请求数据类型除了表单以外,还支 ...
- 一文带你全面解析 Postman 工具的使用
点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 8:55 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | J ...
最新文章
- 人类无法抗拒的10种心理(转)
- Go实战--也许最快的Go语言Web框架kataras/iris初识三(Redis、leveldb、BoltDB)
- mysql ddl dcl_MySQL常用DDL、DML、DCL语言整理(附样例)
- vijos 1942 [AH 2005] 小岛
- 诺奖奖金为何119年还没发完?
- Mysql 求时间 between 昨天 and 上个月的今天 等时间函数
- python开发自动化创建一个任务下发到手机_django2 +requests+ddt+unittest+HTMLestRunner接口自动化测试平台...
- (学习笔记1)可见光与红外图像的特征融合(Feature Fusion)
- 达梦8基础对象操作管理
- SL4A apk 编译生成
- 水星无线wan服务器无反应,怎么解决水星路由器WAN口获取不到IP地址
- [Jenkins] docker-slim 容器瘦身的使用
- 大写汉字(大写汉字又称什么数码)
- Tagoram: Real-Time Tracking of Mobile RFID Tags to High Precision Using COTS Devices
- IDEA菜单栏Build选项
- 杨元庆:马雪征退休是她的决定 联想很尊重
- java初级程序员简历上不能写,但是不能不会的项目!
- 【python】实现一次指数平滑
- c语言算法:排队打饭
- 公众号文章编辑常见版权问题及避免侵权
热门文章
- 提效80倍!优维CMDB好样的
- 项目和项目管理基本概念
- Ajax网络请求超时处理-timeout
- 【实时数仓】Day04-DWS层业务:DWS设计、访客宽表、商品主题宽表、流合并、地区主题表、FlinkSQL、关键词主题表、分词...
- 酒店民宿如何在小红书上精细化推广?
- 以android模拟器方式下载51CTO视频
- 华为已在欧洲为鸿蒙os提交商标申请,华为已经在欧洲提交鸿蒙OS商标申请:Harmony...
- 无法打开文件“libboost_thread-vc120-mt-gd-1_58.lib
- excel培训机构_中金中国企业跨境并购流程、重点问题和交易架构设计(内部培训)42页...
- 应届生必备简历模板,分享