Postman预请求脚本、测试脚本(pre-request scripts、tests常用工作总结)

文章目录

  • Postman预请求脚本(pre-request scripts工作常用总结)
    • Postman预请求脚本
    • Postman测试脚本
    • 预请求脚本和测试脚本有什么区别
    • 常用工作总结
      • 登录接口返回的是Set-Cookie标头

Postman预请求脚本(pre-request scripts工作常用总结)

Postman预请求脚本

官网:https://learning.postman.com/docs/writing-scripts/pre-request-scripts/

在这里插入图片描述

You can use pre-request scripts in Postman to execute JavaScript before a request runs. By including code in the Pre-request Script tab for a request, collection, or folder, you can carry out pre-processing such as setting variable values, parameters, headers, and body data. You can also use pre-request scripts for debugging code, for example by logging output to the console.

在Postman中,您可以使用预请求脚本在请求运行之前执行JavaScript。通过在请求、集合或文件夹的“Pre-request Script”选项卡中添加代码,您可以进行预处理,例如设置变量值、参数、标头和正文数据。您还可以使用预请求脚本来调试代码,例如将输出记录到控制台。

Postman测试脚本

官网:https://learning.postman.com/docs/writing-scripts/test-scripts/

Tests confirm that your API is working as expected, that integrations between services are functioning reliably, and that any changes haven’t broken existing functionality. You can write test scripts for your Postman API requests in JavaScript. You can also use test code to aid the debugging process when something goes wrong with your API project. For example, you might write a test to validate your API’s error handling by sending a request with incomplete data or wrong parameters.

测试确认您的API是否按预期工作,服务之间的集成是否可靠,并且任何更改都不会破坏现有功能。您可以使用JavaScript编写Postman API请求的测试脚本。当API项目出现问题时,您还可以使用测试代码来帮助调试过程。例如,您可以编写一个测试来验证API的错误处理功能,方法是发送一个包含不完整数据或错误参数的请求。

预请求脚本和测试脚本有什么区别

预请求脚本是在发送请求之前执行的脚本,它被用来修改请求、添加参数、设置环境变量、添加标头等。预请求脚本可以应用于单个请求、整个集合或整个文件夹,用于在发送请求之前自动处理一些任务。

测试脚本是在接收到响应后执行的脚本,它们用于对响应进行断言、解析和处理。测试脚本可以访问响应的header、body、status code和其他属性,并且可以使用JavaScript编写逻辑来自定义测试结果。

预请求脚本和测试脚本的主要区别在于它们执行的时间点不同。预请求脚本在发送请求之前执行,而测试脚本在接收到响应后执行。

常用工作总结

登录接口返回的是Set-Cookie标头

需求:
登录接口返回的是Set-Cookie标头,需要在预请求脚本中提取它,并将其设置为后续请求的Cookie。

实现思路1:在JS中发送登录请求,在预请求脚本中提取它,并将其设置为后续请求的Cookie

pm.sendRequest({
    url: 'https://your-api.com/login',
    method: 'POST',
    header: {
        'Content-Type': 'application/json'
    },
    body: {
        mode: 'raw',
        raw: JSON.stringify({
            email: 'user@example.com',
            password: 'password123'
        })
    }
}, function (err, res) {
    // 处理登录响应,解析出Set-Cookie标头
    if (err || res.code !== 200) {
        console.error('登录失败', err || res);
        return;
    }

    const setCookieHeader = res.headers.get('set-cookie');
    const sessionId = /sessionid=([^;]+)/.exec(setCookieHeader)[1];

    // 在环境变量中设置Session ID
    pm.environment.set('sessionId', sessionId);
});

// 设置Cookie标头以使用Session ID进行身份验证
const sessionId = pm.environment.get('sessionId');
pm.request.headers.add({
    key: 'Cookie',
    value: `sessionid=${sessionId}`
});

实现思路2:Postman中的POST请求返回中设置Cookie,可以使用Postman的测试脚本。
在Postman中,您可以通过选择要测试的请求,并在请求编辑器中导航到“Tests”选项卡来添加JavaScript测试脚本。当请求返回响应时,这些测试脚本将被自动执行。因此,您可以在测试脚本中编写代码来解析响应并设置Cookie。

// 处理响应
if (pm.response.code === 200) {
    const responseBody = pm.response.json();
    if (responseBody.code !== 0) {
        console.warn('API响应出现错误:', responseBody);
        pm.test("API响应出现错误", function () {
            pm.expect(responseBody.code).to.eql(0);
        });
    } else {

            // 解析Set-Cookie标头
            const setCookieHeaders = pm.response.headers.all().filter(header => header.key === 'Set-Cookie').map(header => header.value);
            if (setCookieHeaders.length > 0) {
                // 遍历所有Set-Cookie标头
                for (let i = 0; i < setCookieHeaders.length; i++) {
                    const setCookieHeader = setCookieHeaders[i];
                    const sessionIdMatch = /sessionid=([^;]+)/.exec(setCookieHeader);

                    if (sessionIdMatch !== null) {
                        const sessionId = sessionIdMatch[1];

                        // 在环境变量中设置Session ID
                        pm.environment.set('sessionId', sessionId);
                        break;
                    }
                }
            } else {
                console.warn('没有找到Set-Cookie标头');
            }

    }
} else {
    console.error(`请求失败: ${pm.response.code} ${pm.response.statusText}`);
    pm.test(`请求失败: ${pm.response.code} ${pm.response.statusText}`, function () {
        pm.expect(pm.response.code).to.eql(200);
    });
}
  • 使用pm.test方法向Test Results面板添加一条消息来指示测试结果

至此,我们的Postman环境变量里面已经有了变量 sessionId。我们需要在其他请求的预请求脚本(我们可以放在整个collection集合中,集合下的所有请求都会执行这个预请求脚本,从而实现所有请求都有需要的标头)设置设置标头。

如果你多次执行同一个请求,并且预请求脚本中添加了sessionId标头,那么每次执行都会添加一个新的sessionId标头,导致标头重复。

为了避免这种情况,可以在添加sessionId标头之前,先删除现有的sessionId标头,然后再添加新的标头。你可以使用以下JavaScript代码来完成操作:

// 删除已存在的 sessionId 标头
pm.request.headers.remove('sessionId');
pm.request.headers.add({key: 'sessionId', value: pm.environment.get('sessionId')});

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2008-2019年主要城市PITI指数

2008-2019年主要城市PITI指数 1、来源&#xff1a;附在文件内 2、时间区间&#xff1a;2008-2019年 3、具体时间分布&#xff1a;、2008、2009-2010、2011、2012、2013-2014、2014-2015、2015-2016、2016-2017、2017-2018、2018-2019、 4、范围&#xff1a;包括110个城市&a…

Afkayas.1(★)

软件运行 要输入正确的Name和Serial 查壳 一个VB程序&#xff0c;没有加壳 载入OD 直接开搜索字符串。 这里看到了错误的提示&#xff0c;“You Get It”应该就是成功的字符串了。 前面的“AKA-”应该是在什么时候拼接的字符串 去成功的字符串附近看看 这个字符串上面…

网络编程 总结三

一、并发服务器模型 【1】 循环服务器 1>一次只能处理一个客户端的请求&#xff0c;等待这个客户端退出后&#xff0c;才能处理下一个客户端 2>缺点&#xff1a;循环服务器所处理的客户端不能有耗时操作 //*****模型****** sfd socket(); bind(); listen(); while(1)…

js 操作数组内容

js 操作数组内容 数组添加元素&#xff08;更改原数组&#xff09; push和unshift会返回添加了新元素的数组长度 push从数组最后加入&#xff0c;unshift从数组最前面加入 const arr ["a", "b", "c"]; arr.push("d"); //返回4…

【高危】泛微 e-cology <10.57 存在 SQL注入漏洞(POC)(MPS-ndqt-0im5)

漏洞描述 泛微协同管理应用平台(e-cology)是一套企业大型协同管理平台。 泛微 e-cology 受影响版本存在SQL注入漏洞&#xff0c;未经授权的远程攻击者可通过发送特殊的HTTP请求来获取数据库的敏感信息。 漏洞名称GeoServer 存在 sql 注入漏洞漏洞类型SQL注入发现时间2023/4/…

解密PyTorch动态计算图:打破深度学习束缚的秘密武器

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

Linux 用户管理与文件权限

Linux 是一个多用户系统&#xff0c;它允许多个用户同时登陆主机&#xff0c;并为他们分配不同的资源和工作环境进行使用。当然&#xff0c;不同的用户都有文件的私有需求&#xff0c;所以设置不同用户文件的权限管理十分重要。 01 用户与用户组 Linux 中一般将文件访问权限的…

2023有哪些适合学生的蓝牙耳机?盘点四款适合学生的无线蓝牙耳机

随着时代的发展&#xff0c;人们更青睐于能够提升生活品质的产品。蓝牙耳机因为摆脱了线的束缚&#xff0c;使用体验会更好。接下来&#xff0c;我来给大家推荐几款适合学生用的无线蓝牙耳机&#xff0c;有需要的朋友可以当个参考。 一、南卡小音舱Lite2蓝牙耳机 参考价&…

【hello Linux】进程间通信——共享内存

目录 前言&#xff1a; 1. System V共享内存 1. 共享内存的理解 2. 共享内存的使用步骤 3. 共享内存的使用 1. 共享内存的创建 查看共享内存 2. 共享内存的释放 3. 共享内存的挂接 4. 共享内存的去挂接 4. 共享内存的使用示例 1. 两进程挂接与去挂接演示&#xff1a; 2. 两进程…

高性能:负载均衡

目录 什么是负载均衡 负载均衡分类 服务端负载均衡 服务端负载均衡——软硬件分类 服务端负载均衡——OSI模型分类 客户端负载均衡 负载均衡常见算法 七层负载均衡做法 DNS解析 反向代理 什么是负载均衡 将用户请求分摊&#xff08;分流&#xff09; 到不同的服务器上…

中移链控制台对接4A平台功能验证介绍

中移链控制台具备单独的注册登录页面&#xff0c;用户可通过页面注册或者用户管理功能模块进行添加用户&#xff0c;通过个人中心功能模块进行用户信息的修改和密码修改等操作&#xff0c;因业务要求&#xff0c;需要对中移链控制台的用户账号进行集中管理&#xff0c;统一由 4…

什么是分布式任务调度?怎样实现任务调度

通常任务调度的程序是集成在应用中的&#xff0c;比如&#xff1a;优惠卷服务中包括了定时发放优惠卷的的调度程序&#xff0c;结算服务中包括了定期生成报表的任务调度程序&#xff0c;由于采用分布式架构&#xff0c;一个服务往往会部署多个冗余实例来运行我们的业务&#xf…

C S S

目录 1.样式定义方式 1.1行内样式表 1.2内部样式表 1.3外部样式表 2.注解 3.选择器 3.1标签选择器 3.2 id选择器 3.3 类选择器 3.4 派生选择器 3.5 伪类选择器 链接伪类选择器&#xff1a; 位置伪类选择器&#xff1a; ​编辑 目标伪类选择器&#xff1a; 复合选…

Winform从入门到精通(37)——FolderBrowserDialog(史上最全)

文章目录 前言1、Name2、Description3、RootFolder4、SelectedPath5、ShowNewFolderButton前言 当需要获取一个可以通过用户自由选择路径的时候,这时候就需要FolderBrowserDialog控件 1、Name 获取FolderBrowserDialog对象 2、Description 用于指示对话框的描述,如下: …

Windows forfiles命令详解,Windows按时间搜索特定类型的文件。

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 forfiles 一、结果输出格式二、按时间搜索三、搜索指定类型文件四、批量删除文件 forfile…

ATTCK v12版本战术介绍——防御规避(四)

一、引言 在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行、持久化、提权战术理论知识及实战研究、部分防御规避战术&#xff0c;本期我们为大家介绍ATT&CK 14项战术中防御规避战术第19-24种子技术&#xff0c;后续会介绍防御规避其他子技术&#xf…

【Unity URP】Rendering Debugger和可视化MipMap方案

写在前面 最近开始学习Unity性能优化&#xff0c;是结合了《Unity游戏优化》这本书和教程《Unity性能优化》第叁节——静态资源优化(3)——纹理的基础概念一起学习。在学习纹理优化部分时候遇到了问题&#xff0c;固定管线下Unity的Scene窗口有一个可视化Mipmap的渲染模式&…

PMP/高项 05-项目进度管理

项目进度管理 概念 项目进度管理&#xff08;Schedule Management) 项目进度管理又叫项目工期管理&#xff08;Duration Management)或项目的时间管理(Time Management) 是一种为管理项目按时完成项目所需的各个过程 进度管理过程 规划进度管理 定义活动 排列活动顺序 估算活…

【LeetCode】 309.最佳买卖股票时机含冷冻期

309.最佳买卖股票时机含冷冻期&#xff08;中等&#xff09; 思路 状态定义 一、很容易想到四种状态&#xff1a; a.今天买入&#xff1b;b.今天卖出&#xff1b;c.昨天卖出&#xff0c;今天处于冷冻期&#xff0c;无法进行操作&#xff1b;d.今天不操作&#xff0c;处于持有…

太酷了,库昊

昨天晚上凌晨3点30&#xff0c;勇士和国王的第7场比赛开打。 在上一局在勇士主场干翻勇士后&#xff0c;国王队的信心倍增&#xff0c;他们用自己的节奏一次次击溃勇士&#xff0c;特别是今天的前两节&#xff0c;国王能能够回应勇士的进球&#xff0c;防守也更有侵略性。今天不…