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

news2024/11/23 1:01:48

文章目录

  • 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')});

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot配置文件及日志信息

目录 前言&#xff1a; Spring Boot优点 配置文件 配置文件格式 读取配置文件 properties配置文件格式 properties优缺点分析 yml配置文件格式&#xff08;另一种标记语言&#xff09; yml优缺点分析 Spring Boot 不同平台配置文件规则 日志信息 日志的功能 Sprin…

Springboot +Flowable,设置任务处理人的四种方式(一)

一.简介 学习下UserTask 设置用户的三种方式&#xff0c;至于如何设置用户组&#xff0c;下篇文章再聊。 现在&#xff0c;假设我有如下一个简单的流程图&#xff1a; 那么该如何设置这个用户节点的处理人&#xff1f; 二.第一种&#xff1a;指定具体用户 第一种方式&…

电路中噪声来源

电路包括不同的部件和芯片&#xff0c;所有都有可能成为噪声的来源。例如&#xff0c;电阻会带来热噪声&#xff0c;这个噪声为宽频噪声&#xff0c;几乎涵盖所有频率范围&#xff1b;运算放大器其芯片内部会产生噪声&#xff1b;而 ADC产生的量化噪声相较于其他器件&#xff0…

【】右值引用完美转发

文章目录 右值引用和左值引用左值和右值概念左值引用 && 右值引用右值引用使用场景和意义左值引用的使用场景**左值引用的短板:**右值引用和移动语义STL容器增加的接口move函数右值引用的其他使用场景 完美转发万能引用完美转发保持值的属性完美转发的使用场景 右值引用…

【Linux】进程信号 --- 信号产生 信号递达和阻塞 信号捕捉

&#x1f34e;作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;Linux系统编程 文章目录 一、预备知识二、信号产生1. 通过终端按键产生信号1.1 signal()1.2 core dump标志位、核心存储文件 2.通过系统调用向进程发送信号3.由软件条件产生信号3.1 alarm函数和SIGALRM信号…

vue3通过ref拿element弹框中的组件问题

写在<el-dialog>中的组件&#xff0c;在一开始&#xff0c;弹框没有弹出来的时候&#xff0c;<el-dialog>中的组件是没有被渲染出来的&#xff0c;因此在<el-dialog>中使用ref标记某个组件&#xff0c;在el-dialog没有被渲染出来之前去拿的话&#xff0c;是拿…

ml常见代码片段

常用ML代码片段 变换一列 new_df[brand] new_df[prod_name].apply(lambda x: x.split()[0])变换2列 new_df[chip_total_sales] new_df.apply(lambda x: x[total_sales] * x[is_chip], axis 1) # 重要的是axis1groupby 计数&#xff0c;求和&#xff0c;取第一个值&#x…

C语言起源、特性和发展历程

本文从ALGOL 60语言谈起&#xff0c;简述C语言的起源和发展历程&#xff0c;然后对C语言的一些特性做了探讨&#xff0c;最后说说C语言为什么在众多编程语言中&#xff0c;起到了承上启下的作用。 本文介绍以下内容&#xff1a; C语言的起源C语言的发展C语言的特性C语言的重要…

外卖项目优化-01-redis缓存短信验证码、菜品数据

文章目录 外卖项目优化-01课程内容前言1. 环境搭建1.1 版本控制解决branch和tag命名冲突 1.2 环境准备 2. 缓存短信验证码2.1 思路分析2.2 代码改造2.3 功能测试 3. 缓存菜品信息3.1 实现思路3.2 代码改造3.2.1 查询菜品缓存3.2.2 清理菜品缓存 3.3 功能测试3.4 提交并推送代码…

AutoGPT安装教程

最近安装AutoGPT时遇到了一些问题&#xff0c;写下这篇文章记录一下 1 下载AutoGPT AutoGPT链接&#xff1a;https://github.com/Significant-Gravitas/Auto-GPT/tree/v0.2.2 下载AutoGPT 推荐下载stable 版本 2 申请openai 的api key 获取api的key&#xff0c;这里就不介…

【超算/先进计算学习】日报8

目录 今日已完成任务列表遇到的问题及解决方案任务完成详细笔记阶段一阶段二阶段三阶段四 对自己的表现是否满意简述下次计划其他反馈 今日已完成任务列表 超算/高性能计算总结 遇到的问题及解决方案 无 任务完成详细笔记 阶段一 在学习的第一阶段&#xff0c;我们首先对需要…

ChatGPT+智能家居在AWE引热议 OpenCPU成家电产业智能化降本提速引擎

作为家电行业的风向标和全球三大消费电子展之一&#xff0c;4月27日-30日&#xff0c;以“智科技、创未来”为主题的AWE 2023在上海新国际博览中心举行&#xff0c;本届展会展现了科技、场景等创新成果&#xff0c;为我们揭示家电与消费电子的发展方向。今年展馆规模扩大至14个…

【pytest里的参数化:看几个例子就够了!】

参数化多个参数&#xff1a;可以使用多个参数来参数化测试。例如&#xff1a; import pytestpytest.mark.parametrize("x, y, expected", [(1, 2, 3),(3, 4, 7),(5, 6, 11), ]) def test_addition(x, y, expected):assert x y expected参数化列表&#xff1a;可以…

轻叶H5营销单页,让你的营销更加清爽高效

网络营销就是营销企业品牌形象、产品信息发布、优惠促销活动&#xff0c;最终目的就是争抢流量和客户。现在为了吸引流量&#xff0c;各种营销方式、广告玩法层出不穷&#xff0c;成本投入大&#xff0c;带来的转化不一定好。今天&#xff0c;我们要来讲一讲H5营销单页。 H5营销…

项目管理软件project下载安装配置图文教程

目录 前言 配置安装过程 总结 前言 Project是一种计划、组织和管理任务的工具&#xff0c;通常用于团队协作和项目管理。它可以帮助用户创建任务列表、分配任务、设置截止日期、跟踪进度、分析数据等。Project还可以生成各种报告&#xff0c;如甘特图、资源使用情况、任务分…

稀疏矩阵存储格式总结

稀疏矩阵是指矩阵中的元素大部分是0的矩阵&#xff0c;实际问题中大规模矩阵基本上都是稀疏矩阵&#xff0c;很多稀疏度在90%甚至99%以上,大规模的稀疏造成了大量无效数据的计算和存储资源占用&#xff0c;也无法有效的载入有限内存计算。因此我们需要有高效的稀疏矩阵存储格式…

SpringCloud:ElasticSearch之数据同步

elasticsearch中的酒店数据来自于mysql数据库&#xff0c;因此mysql数据发生改变时&#xff0c;elasticsearch也必须跟着改变&#xff0c;这个就是elasticsearch与mysql之间的数据同步。 1.思路分析 常见的数据同步方案有三种&#xff1a; 同步调用异步通知监听binlog 1.1.同…

Nacos配置中心的详解与搭建

Namespace 简介 用于进行租户粒度的配置隔离&#xff0c;不同的命名空间下&#xff0c;可以存在相同的 Group 或 Data ID 的配置 配置Namespace 点击nacos的命名空间——点击新建命名空间 开发环境【dev】测试环境【test】正式环境【prod】 DataID 简介 Data ID 通常用于…

Node.js 下载与安装教程

文章目录 Node.js 下载Node.js 安装npm 配置配置node_path修改用户变量更换npm源为淘宝镜像全局安装基于淘宝源的cnpm Node.js 下载 1.进入nodejs官网&#xff1a;https://nodejs.org/en 2.单击downloads 3.此时滑动滚动条&#xff0c;找到并单击 previous release 4.在此页…

<C++>lesson1.C++入门上

文章目录 1. C关键字(C98)&#x1f49a;2. 命名空间&#x1f90e;2.1 命名空间定义2.2命名空间的使用 3. C输入/输出&#x1f5a4;4.缺省参数&#x1f499;4.1 缺省参数概念4.2 缺省参数分类 5. 函数重载❤️5.1 函数重载的概念5.2 C支持函数重载的原理 6. 引用&#x1f49c;6.…