Postman | 一分钟掌握Pre-request Script | 入门篇

这篇具有很好参考价值的文章主要介绍了Postman | 一分钟掌握Pre-request Script | 入门篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:Mars酱

声明:文章由作者原创,欢迎转载,转载前请联系我!

Pre-request Script简介

Postman 有一个基于 Node.js 的强大运行时,它允许我们向请求和集合中添加动态行为。允许我们编写 API 测试、构建可以包含动态参数的请求、在请求之间传递数据等等。您可以添加两种情况下的 JavaScript 代码:

  1. 在请求发送到服务器之前,在“Pre-request Script”选项卡中编写预请求脚本;
  2. 收到响应后,在 Test”选项卡中编写测试脚本。

脚本的执行顺序

在 Postman 中,单个请求的脚本执行顺序如下所示:

  • 预请求脚本将在发送请求之前执行;
  • 测试脚本将在发送请求后执行;

postman pre-request script,postman,javascript

对于集合中的每个请求,脚本将按以下顺序执行:

  • 与集合关联的预请求脚本将在集合中的每个请求之前运行。
  • 与文件夹关联的预请求脚本将在文件夹中的每个直接子请求之前运行。
  • 与集合关联的测试脚本将在集合中的每个请求之后运行。
  • 与文件夹关联的测试脚本将在文件夹中的每个直接子请求之后运行。

postman pre-request script,postman,javascript

对于集合中的每个请求,脚本将始终按照以下层次结构运行:

集合级脚本(如果有)、文件夹级脚本(如果有)、请求级脚本(如果有)。

请注意,此执行顺序适用于预请求脚本和测试脚本。

准备工作及操作步骤

依照兄弟篇JMeter | BeanShell入门级编写 - 掘金 (juejin.cn)中的需求,这次使用Pre-request Script来实现,正文开始之前啰嗦一遍需要准备的数据:

  1. 密钥对(accessKeyId、key) 。密钥对由服务端发放,其中包含accessKeyId和key,其中accessKey相当于账号,key相当于密码用来加密使用;
  2. 客户端需要校验的卡号(cardNo) 。卡号我们不能使用同一张卡,因为模拟不同的用户,所以要准备一大批卡号;
  3. 随机数(nonceStr) 。防止伪造,因此在生成签名串的时候加入随机数,随机数可以是任意方式,比如:随机数字 + 随机字母、纯随机数字、纯随机字母等等;
  4. 时间戳(timestamp) 。作用同样是防止伪造,增加防伪造的难度;
  5. 签名(sign) 。发送给服务端用来比对是否合法请求;

1. 发送前的配置

先创建一个Collection,这个是包含多个request请求的集合,本次例子只有1个get请求,但是我们还是创建Collection,也方便和其他request测试作好区分和管理:

postman pre-request script,postman,javascript

再在建立好的Collection下Add一个request:

postman pre-request script,postman,javascript

再配置好请求方式、填写url、请求参数:

postman pre-request script,postman,javascript

这里和JMeter的变量定义方式不同,在JMeter中使用的是${变量名}的格式来声明,而Postman中是使用{{变量名}}的格式。

上图中和JMeter一样,声明了{{nonceStr}}{{timestamp}}{{sign}}三个变量,依次分别表示随机数、时间戳、签名。

2. 编写Pre-request Script

配置准备好了、请求参数也填写好了,变量也声明了,那么我们就需要编写核心的Pre-reqeust Script,把所需的参数填充到之前声明的变量中去:

/** author: Mars酱 */
//1. 随机数的生成函数,随机规则是16位长度的英文字符串
function getRandomString(len) {
      let $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz' 
      let maxLen = $chars.length
      let randomStr = ''
      for (let i = 0; i < len; i++) {
        randomStr += $chars.charAt(Math.floor(Math.random() * maxLen ))
      }
      return randomStr
}
var nonceStr = getRandomString(16);

// 2. 时间戳函数
function getTimestamp(){
    var time = new Date().getTime();
    return time;
}
var timestamp = getTimestamp();

// 3. 获取请求路径中固定的参数,比如:accessKeyId
var params = pm.request.url.query; //获取接口入参
// console.log(params);

// 4. 拼接参数准备好签名字符串
var str = []
params.map(function(item) {
    if(item["key"] == "sign" || item["value"] === ""){ 
        // "==" ==宽松相等,隐性类型转换,值相等,返回true; "===" 严格相等,值和类型都相等,返回true
    } else if(item["key"] == "nonceStr"){
        str.push(item["key"] + "=" + nonceStr);
    } else if(item["key"] == "timestamp"){
        str.push(item["key"] + "=" + timestamp);
    } else {
        str.push(item["key"] + "=" + item["value"]);
    }
})
// console.log(str);
// 5. 声明签名用的私钥key
var key = "e992fdbec7cd1eb2b1c6c8e07d4eea60";
// 6. 补充key到参数串中
var sign = str.sort().join("&")+ "&key=" + key;

// console.log(sign);
// 先清除之前的sign变量值
pm.environment.unset("sign");
// 设置签名
// 填充时间戳给声明的变量
pm.environment.set("timestamp", timestamp);
// 填充随机数给声明的变量
pm.environment.set("nonceStr", nonceStr);
// 7. MD5加密签名规格,并赋值给环境变量`sign`
pm.environment.set("sign", CryptoJS.MD5(sign).toString().toUpperCase());

编写界面完成之后的效果:

postman pre-request script,postman,javascript

ok,配置url、编写Pre-request Script完成,我们准备发送get请求。

发送请求

点击postman pre-request script,postman,javascript按钮,发射!

响应结果

发送之后会有响应结果,展示效果如图:

postman pre-request script,postman,javascript

1区:响应结果。正确请求后服务端返回给调用者的业务数据;

2区:控制台,发送请求拼接的变量是不是正确可以从这里查看到。

好了,看到这里已经完成了发送单个get请求时动态填充变量的方式了。

但是兄弟篇JMeter | BeanShell入门级编写 - 掘金 (juejin.cn)中的需求是不同的用户发送请求的。在JMeter中可以使用xls文件随机抽取卡号,在Pre-request Script怎么随机抽取呢?接着说

入门进阶操作

随机抽取卡号我没花时间寻找怎么做(应该也是可以使用外部文件的),只是简单在在Pre-request Script中增加了一个随机数,随机数用来从脚本的卡号数组中随机抽一张卡,然后填充到卡号变量中,因此,我改造了一下请求:

1. 声明卡号变量

把之前固定写死的卡号,改成{{cardno}}变量,如下:

postman pre-request script,postman,javascript

2. 修改Pre-request Script

在原来的脚本中声明卡号数组,并从中随机选取卡号,最后填充到{{cardno}}变量中,增加的脚本如下:

// 1. 声明卡池数组
var cardnos = [
"4313000039491060",
"4313000021146570",
"4313000021153140",
"4301120069995630",
"4313000024416410",
"4301020029201620",
  // .... 卡池
]

// 2. 随机抽取卡池中的卡片,随机算法忽略,只是简单模拟
function getRandomCardNo(){
    let index = Math.floor(Math.random()*100+1);
    if(index >= 100){
        index = 98;
    }
    return cardnos[index];
}

var cardno = getRandomCardNo();
// 3. 填充到cardno变量
pm.environment.set("cardno", cardno);

发送1000次请求

现在卡片已经是随机抽取了,那么我们用Postman模拟发送1000次。单击创建的Collection节点,在界面中找到run按钮:

postman pre-request script,postman,javascript

鼠标放上去之后会有“Run Collection”的提示语,单击之后界面如下:

postman pre-request script,postman,javascript

Iterations:迭代次数。需要发送多少次请求;

Delay:延迟数。默认即可

配置好之后就开始发送了,完成之后会有结果提示:

postman pre-request script,postman,javascript

我主要关注两个标签:

Passed:表示通过多少个请求;

Failed:表示失败多少个请求;

到此,使用Postman发送get请求已经完成。Postman提供了可以在请求脚本中使用的JavaScript API。pm 对象提供了测试请求和响应数据的功能,以下简单示例一下pm的常用方法。

Pre-request Script中pm对象的常用方法

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.sendRequest("https://postman-echo.com/get", function (err, response) {
  console.log(response.json());
});  // 发送一个请求
pm.globals.set("variable_key", "variable_value");  // 设置环境变量

最后

在Pre-request Script中使用的md5加密是CryptoJS对象,但是并未import进来,其实crypto-js外部库已经被Postman引入,直接按照外部库的官方使用方式使用即可,后续将会介绍Postman的沙盒模式中内置的外部库。

搬运自己的掘金:Postman | Pre-request Script入门级编写文章来源地址https://www.toymoban.com/news/detail-527343.html

到了这里,关于Postman | 一分钟掌握Pre-request Script | 入门篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Postman使用技巧之Pre-request Script[自定义encode请求头]

    postman是web开发人员常用的开发工具, 如果遇到需要对请求头做统一的encode, 我们该如何做到呢? 这就是今天学到的新技能Pre-request Script. postman给我们提供了强大的http请求发起能力的同时, 还提供了请求发起的前置处理能力, 方便我们自定义请求的发起策略, 比如今天遇到的问题

    2024年02月11日
    浏览(44)
  • postman中使用formdata数据获取参数编写pre-request Script获取参数自动生成sign

    postman中header部分变量利用脚本生成相应的数据 timestamp:通过脚本获取生成的变量 sign:通过脚本获取生成的变量 body中的参数是form-data格式: 所有的参数需要根据实际的接口参数填写   程序片段: 由于本人的接口的加密方式是入参的参数按照字母排序然后加密字符串,所以

    2024年02月11日
    浏览(58)
  • 关于Postman Pre-request Script 请求前处理(AES加密以及HMAC-SHA256)

    目录 一 postman前置 处理 设置环境变量如下:  二 编写Postman Pre-request Script Js加密代码 三 Postman 最终参数设置以及结果演示 postman 表单请求 参数设置示例: 设置环境变量如下: params:   AES 加密后的参数 signature:  HMAC-SHA256 加密后的签名 timestamp: 时间毫秒值 secret:     加密秘钥

    2024年02月10日
    浏览(63)
  • Postman/Apifox接口测试——Pre-request自动登录

    Apifox官方使用文档中有关于  全自动登录  的实现:在运行接口用例的时候,自动完成登录,而无需手动登录。 官方教程如下: 1、将用来验证登录态的参数值设置为  {{ACCESS_TOKEN}} 2、 在  前置脚本  里引用前面创建公共脚本: 但实际使用时遇到了一些坑: 1、以 header: {

    2024年02月11日
    浏览(59)
  • postman-请求前参数预处理(pre-request)

    Pre-request 与 Tests 类似,区别在于:Pre-request 中的脚本是在执行请求之前运行,而Tests 中的脚本则是在请求完成之后执行。 Pre-request Script是在请求发送之前通过需要执行的JS代码片段; 请求参数中包含随机数或者请求中包括一个时间戳,或者请求参数需要加密,都需要在该标

    2024年02月11日
    浏览(47)
  • Postman进阶(一):编写预请求脚本(pre-request scripts)

    1.点击集合中的任意一个接口 2.点击Pre-request Script,即可在此下方编写脚本 3.点击send,Pre-request Script下的代码将在Postman将请求发送到API之前执行 Postman中提供一些选项,点击一下,则会在Pre-request Script中生成对应的脚本,可根据自己的需求来编写脚本 点击集合中的任意一个接

    2024年01月25日
    浏览(48)
  • 软件测试——Postman Script脚本功能

    Postman作为软件测试里一款非常流行的调试工具,给我们提供了一个执行JavaScript脚本的环境,所以我们可以使用js语言编写脚本来解决一些接口自动化的问题,比如接口依赖、接口断言等等。Postman有Pre-RequestScript和Tests两个编写js脚本的模块,支持以嵌入脚本的方式动态准备测

    2024年03月23日
    浏览(45)
  • 全方面掌握Requests库的使用

    Requests库是一个常用的Python第三方库,它简化了HTTP请求发送和响应的处理。本文将全方面介绍Requests库的使用,包括基本请求、参数传递、响应处理、会话管理、代理设置以及异常处理等方面。 使用Requests库发送HTTP请求非常简单,只需要调用requests库提供的方法即可。例如,

    2024年02月03日
    浏览(22)
  • Helm Chart三分钟轻松掌握

    ​ 我们的日常工作中需创建、修改和部署Helm Chart,以管理应用程序的部署。Helm是Kubernetes的应用程序包管理器,它负责协调应用程序的下载、安装和部署。 chart就是一个描述Kubernetes相关资源的文件集合。 ​ 那么为什么会有人使用 Helm 呢? Helm 通过模板化方法在 Kubernetes 中更

    2023年04月09日
    浏览(30)
  • 十分钟掌握Java本地缓存

    —————————— Yesterday is history, tomorrow is a mystery, but today is a gift. That is why it’s called the present. —————————— 缓存是Java开发中经常用到的组件,我们会使用缓存来存储一些 不经常改变 的 热点 数据,提高系统处理效率,其根本原因在于内存和硬盘读写速度的

    2024年02月05日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包