PostMan笔记(三)自动化测试

news2024/11/24 11:10:19

1. 简介

Postman是一款功能强大的API开发工具,也是一款流行的自动化测试工具。它提供了多种测试功能,包括测试脚本、预请求脚本和测试集合等。

1.1 测试脚本

测试脚本是Postman中用于自动化测试的核心部分。它可以使用JavaScript语言编写,通过发送API请求、获取响应并解析响应,验证API是否正常工作。

测试脚本可以访问请求和响应对象,以及Postman的全局变量和环境变量。可以使用一系列预定义的函数和方法,例如pm.test()、pm.expect()和pm.sendRequest()等。

 1.2 预请求脚本

预请求脚本是在请求被发送之前运行的脚本。它可以用于设置请求头、参数和身份验证,以确保请求被正确设置。它可以访问请求对象和Postman的全局变量和环境变量。

预请求脚本是可选的,但它们对于确保请求的正确性非常有用。

1.3 测试集合

测试集合是一组API测试的集合。可以将测试脚本和预请求脚本组合在一起,以创建测试集合。测试集合可以运行一系列的测试脚本,并报告测试结果。

测试集合可以使用Postman的测试运行器进行执行。测试运行器提供了多个选项,例如选择环境和设置运行参数。它还可以生成报告,以帮助您识别API中的错误和缺陷。

1.4 持续集成

Postman可以与持续集成(CI)工具集成,例如Jenkins、Travis CI和CircleCI等。这样,可以将API测试自动化为CI/CD管道的一部分,以确保代码更改不会破坏API的功能。

通过与CI工具集成,可以自动运行测试集合,并在测试失败时通知开发人员。

总之,Postman提供了强大的API测试自动化功能,包括测试脚本、预请求脚本、测试集合和持续集成。这些功能可以帮助开发人员在开发和部署API时提高测试效率和测试覆盖率。

2.测试脚本功能

2.1 测试脚本的种类

(1)全局测试脚本

全局测试脚本可以在整个Postman应用程序中使用。在Postman中,选择“Settings”菜单,然后选择“General”选项卡。在“General”选项卡中,可以设置全局测试脚本。全局测试脚本可以用于设置所有请求共有的测试脚本。在测试脚本中,可以编写JavaScript代码进行断言、验证、数据处理等操作。

(2)请求测试脚本

请求测试脚本只适用于当前请求。在Postman中,选择一个请求并选择“Tests”选项卡。在测试编辑器中,可以编写请求测试脚本。请求测试脚本可以用于设置当前请求特有的测试脚本。

2.2 测试脚本的使用用例

使用测试脚本功能可以通过编写JavaScript代码来自动化测试API的响应和验证。以下是使用测试脚本的步骤:

1. 打开Postman并创建一个新的请求。

2. 选择“Tests”选项卡,打开测试编辑器。

3. 在测试编辑器中,可以使用JavaScript编写测试脚本。例如,下面是一个使用pm.test()函数验证响应状态码的示例:

    pm.test("Status code is 200", function () {
      pm.response.to.have.status(200);
    });

发起请求的接口及响应码:

根据响应状态码不同, pm.response.to.have.status(状态码) 会执行对应的脚本,在 Test Results 打印设定的脚本内容。

4. 可以使用pm.expect()函数进行其他类型的验证。例如,下面是一个使用pm.expect()函数验证响应JSON中是否包含特定的属性:

    pm.test("Response has property 'data'", function () {
      var jsonData = pm.response.json();
      pm.expect(jsonData).to.have.property('data');
    });

发起请求,接口返回的有 data 属性,

符合脚本中包含特定属性的要求,Test Results打印设定的脚本内容

 5. 在测试脚本中,还可以使用Postman的全局变量和环境变量。例如,可以使用环境变量中的值来验证响应JSON中的属性:

    pm.test("Response has correct name", function () {
      var jsonData = pm.response.json();
      pm.expect(jsonData.name).to.equal(pm.environment.get("expected_name"));
    });

设定脚本

请求接口后,验证环境变量执行脚本内容

6. 编写完成测试脚本后,点击“Send”按钮发送请求并运行测试脚本。
7. 在测试结果面板中,可以查看测试的结果。如果测试失败,可以查看错误信息并进行修复。

总之,使用测试脚本功能可以自动化测试API的响应和验证,以提高测试效率和测试覆盖率。

3. 预请求脚本

3.1 预请求脚本的种类

在Postman中,预请求脚本有两种类型:全局预请求脚本和请求预请求脚本。它们的区别在于它们所在的作用域。

(1)全局预请求脚本

全局预请求脚本可以在整个Postman应用程序中使用。在Postman中,选择“Settings”菜单,然后选择“General”选项卡。在“General”选项卡中,可以设置全局预请求脚本。全局预请求脚本可以用于设置所有请求共有的参数、验证等操作。

(2)请求预请求脚本

请求预请求脚本只适用于当前请求。在Postman中,选择一个请求并选择“Pre-request Scripts”选项卡。在预请求编辑器中,可以编写请求预请求脚本。请求预请求脚本可以用于设置当前请求特有的参数、验证等操作。

总之,全局预请求脚本可以在整个Postman应用程序中使用,而请求预请求脚本只适用于当前请求。在编写预请求脚本时,需要根据请求的特定情况编写相应的预请求脚本。

3.2 预请求脚本使用用例

预请求脚本(Pre-request Scripts)是Postman中一个功能强大的工具,可以在发送实际请求之前运行JavaScript代码。预请求脚本可以用于设置请求头、参数、验证等操作。以下是使用预请求脚本的步骤:

(1)打开Postman并创建一个新的请求。

(2)选择“Pre-request Scripts”选项卡,打开预请求编辑器。

(3)在预请求编辑器中,可以使用JavaScript编写预请求脚本。例如,下面是一个使用pm.environment.set()函数设置环境变量的示例:

pm.environment.set("api_key", "my_api_key");

 (4)可以在预请求脚本中使用Postman的全局变量和环境变量。例如,可以使用全局变量来设置请求头:

pm.request.headers.add({
  key: 'Authorization',
  value: 'Bearer ' + pm.globals.get('access_token')
});

(5)在预请求脚本中还可以使用Postman的其他函数,例如pm.variables.set()、pm.expect()等。例如,可以使用pm.expect()函数验证请求参数:

pm.expect(pm.request.url.query.has("id")).to.be.true;

(6)编写完成预请求脚本后,点击“Send”按钮发送请求。Postman将在发送实际请求之前运行预请求脚本。

总之,使用预请求脚本可以在发送实际请求之前运行JavaScript代码,以设置请求头、参数、验证等操作。在编写预请求脚本时,需要根据请求的特定情况编写相应的预请求脚本。

3.3 怎么使用预请求脚本和SpringBoot接口做测试

要使用预请求脚本和Spring Boot接口进行测试,可以按照以下步骤操作:

(1)打开Postman,创建一个新的请求,并选择请求方法(例如GET、POST、PUT等)。

(2)在请求的“Pre-request Scripts”选项卡中编写预请求脚本。在预请求脚本中,可以设置请求头、请求参数等信息。例如,下面是一个设置Authorization请求头的示例代码:

pm.request.headers.add({
    key: 'Authorization',
    value: 'Bearer ' + pm.environment.get('access_token')
});

(3)在请求的“Body”选项卡中设置请求体。根据请求的类型,可以选择“form-data”、“x-www-form-urlencoded”、“raw”等格式。

(4)在请求的“Tests”选项卡中编写测试脚本。在测试脚本中,可以使用断言函数进行测试结果验证。例如,下面是一个使用pm.expect()函数验证请求结果的示例代码:

pm.test("Response should be 200 OK", function () {
    pm.response.to.have.status(200);
});

(5)发送请求,并查看测试结果。如果测试结果符合预期,则说明接口测试成功。

需要注意的是,预请求脚本和测试脚本都是基于JavaScript编写的。在编写脚本时,需要注意语法和API的使用。此外,需要根据Spring Boot接口的具体情况编写相应的预请求脚本和测试脚本,以确保测试的准确性和可靠性。

4. 测试集合功能

使用测试集合功能可以将多个测试脚本组合在一起,并且可以在单个操作中运行所有测试。以下是使用测试集合功能的步骤:

(1)在Postman中,创建多个请求并设置它们的测试脚本。

(2)在左侧导航栏中,选择“New Collection”创建一个新的测试集合。将所有相关的请求添加到测试集合中,以便它们可以一起进行测试。

(3)在测试集合的“Tests”选项卡中编写测试集合脚本。测试集合脚本可以用于设置所有请求共有的测试脚本。在测试集合脚本中,可以使用JavaScript编写测试脚本和断言函数,对请求结果进行验证。例如,下面是一个测试集合脚本示例,用于验证所有请求的响应时间是否小于200ms:

// Verify that all requests have a response time less than 200ms
pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

(4)保存测试集合并运行测试。在运行测试之前,可以选择一个环境来设置变量和环境参数。测试结果将在Postman的“Tests Results”选项卡中显示。如果所有测试通过,则测试集合将标记为“Pass”。

通过使用测试集合功能,可以将多个测试脚本组合在一起,以便在单个操作中运行所有测试,并且可以更容易地管理和维护测试用例。

5. 持续集成功能

5.1 Postman的持续集成有什么功能?具体怎么使用

Postman的持续集成(Continuous Integration,CI)功能主要包括以下三个部分:

(1)Postman API:Postman API可以与CI工具进行集成,实现自动化测试和持续集成。通过Postman API,可以运行Postman测试集合并获取测试结果。

(2)Newman命令行工具:Newman是Postman的命令行工具,可以在CI工具中使用。通过Newman,可以在命令行中运行Postman测试集合,并将测试结果输出为JUnit XML格式或HTML格式。

(3)Postman代理:Postman代理可以在CI工具中使用,以便在CI工具中设置环境变量和授权头。代理可以确保环境变量和授权头在测试过程中正确地设置。

使用Postman的持续集成功能,可以将Postman测试集合与CI工具集成在一起,实现自动化测试和持续集成。以下是一般的使用步骤:

  1. 将Postman测试集合导出为JSON文件,并将其上传到代码仓库中。

  2. 在CI工具中配置Postman的自动化测试。例如,可以使用Jenkins或Travis CI等工具。配置中需要包括测试集合的路径和环境变量。

  3. 在CI工具中运行Postman测试集合。可以使用Newman命令行工具来运行测试集合,并输出测试结果。例如,在Jenkins中可以使用以下命令运行测试集合:

    newman run my-collection.json -e my-environment.json -r junit,html
    
  4. 分析测试结果并根据需要进行修复和调整。如果测试结果中包含失败的测试用例,则需要修复代码并重新提交到代码仓库中。

使用Postman的持续集成功能可以加快软件开发的速度,并提高代码的质量和稳定性。

5.2 持续集成用例

假设我们有一个Spring Boot应用程序,该应用程序提供了一个REST API,用于获取用户的详细信息。我们想要使用Postman持续集成来测试该API,并在代码仓库中进行自动化测试和持续集成。

(1)创建一个新的Postman测试集合,并添加一个测试用例,以测试Spring Boot应用程序的REST API。测试用例可以使用Postman的请求构建器来创建,包括请求URL、请求方法、请求头、请求体等。

(2)在测试用例中添加测试脚本,以验证API返回的响应是否正确。例如,可以使用JavaScript编写一个测试脚本,检查API返回的用户详细信息是否正确。

pm.test("Response is OK", function () {
    pm.response.to.have.status(200);
});

pm.test("User name is correct", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.name).to.eql("John Doe");
});

pm.test("User age is correct", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.age).to.eql(30);
});

(3)将测试集合导出为JSON文件,并将其上传到代码仓库中。

(4)在CI工具中配置Postman的自动化测试。例如,在Jenkins中可以使用以下步骤:

  • 安装Node.js和Newman命令行工具。
  • 设置环境变量,以便Newman命令行工具可以在CI工具中正确运行。例如,在Jenkins中可以使用以下命令:
export PATH=$PATH:/usr/local/bin
  • 在Jenkins中创建一个新的构建任务,并添加以下构建步骤:
newman run my-collection.json -e my-environment.json -r junit,html

此命令将运行Postman测试集合,并使用my-environment.json文件中定义的环境变量。测试结果将输出为JUnit XML格式和HTML格式。

(5)运行CI工具中的构建任务,以运行Postman测试集合并获取测试结果。如果测试结果中包含失败的测试用例,则需要修复代码并重新提交到代码仓库中。

使用Postman持续集成可以加快软件开发的速度,并提高代码的质量和稳定性。通过使用Postman的自动化测试和持续集成功能,我们可以在代码仓库中进行自动化测试,并确保代码变更不会破坏现有的功能。

6. 断言

6.1 什么是断言

在自动化测试中,断言是一种用于验证测试结果的技术。它是一种检查条件是否满足的机制,如果条件不满足,则测试失败。断言通常用于自动化测试框架中,以确保测试的可靠性和一致性。

在Postman中,可以使用JavaScript编写测试脚本,并使用断言来验证API的响应是否正确。以下是一些常用的断言:

  • pm.expect(value).to.eql(expectedValue):检查value和expectedValue是否相等。

  • pm.expect(value).to.be.above(expectedValue):检查value是否大于expectedValue。

  • pm.expect(value).to.be.below(expectedValue):检查value是否小于expectedValue。

  • pm.expect(value).to.be.ok:检查value是否为真。

  • pm.expect(value).to.have.property(propertyName, expectedValue):检查对象value是否具有属性propertyName,并且该属性的值是否等于expectedValue。

  • pm.expect(value).to.have.length(expectedLength):检查数组value的长度是否等于expectedLength。

  • pm.expect(value).to.match(pattern):检查value是否与指定的正则表达式pattern匹配。

  • pm.expect(value).to.be.oneOf(expectedValues):检查value是否与expectedValues中的任何一个值相等。

可以根据需要使用这些断言,验证API的响应是否正确。在编写测试脚本时,应该根据API的特性和预期结果选择合适的断言,以确保测试结果的可靠性和一致性。

6.2 断言的使用方式

在Postman中使用断言非常简单。您可以按照以下步骤使用断言:

  1. 首先,打开Postman并选择要测试的API。

  2. 然后,在请求的"Tests"选项卡下,可以添加测试脚本。

  3. 在测试脚本中,您可以使用JavaScript编写断言来验证API的响应是否符合预期。

以下是一个简单的示例,展示如何使用断言来验证API的响应是否为JSON格式:

// 获取响应内容
const responseBody = pm.response.json();

// 验证响应是否为JSON格式
pm.test("响应应该是JSON格式", function () {
    pm.expect(responseBody).to.be.an("object");
});

在上面的示例中,我们首先使用pm.response.json()获取API的响应内容,然后使用pm.test()pm.expect()来编写断言。在pm.expect()中,我们使用to.be.an()断言来验证响应是否为JavaScript对象。

除了to.be.an()之外,Postman还提供了许多其他的断言,例如to.eql()to.have.status()等等。您可以根据需要选择合适的断言来验证API的响应是否符合预期。

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

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

相关文章

使用VScode编写C语言程序 环境安装配置 保姆级教程

Visual Studio Code可通过安装插件来支持C、C#、Python、PHP等语言,使用的工程师越来越多,本文介绍如何使用VS Code进行C语言的编译与调试 目录 一 vsCode配置C/C环境 1. vsCode下载和安装 2. 安装vsCode 二 MinGW编译器下载和配置 1. 下载编译器M…

c++积累8-右值引用、移动语义

1、右值引用 1.1 背景 c98中的引用很常见,就是给变量取个别名,具体可以参考c积累7 在c11中,增加了右值引用的概念,所以c98中的引用都称为左值引用 1.2 定义 右值引用就是给右值取个名字,右值有了名字之后就成了普通…

【达摩院OpenVI】基于流感知的视频目标检测网络LongShortNet

论文&代码 论文链接:[arxiv]代码&应用: 开源代码:[github code]开源应用:[modelscope] 背景介绍 传统视频目标检测(Video Object Detection, VOD)任务以一段视频作为输入,利用视频的…

项目上线|慕尚集团携手盖雅工场,用数字化推动人效持续提升

过去十年,中国零售业以前所未有的速度被颠覆、被重塑,数字化则是其中重要的推动要素。 随着数字化转型的深入,零售企业的数字化不再局限于布局线上渠道,且更关乎其背后企业核心运营能力的全链路数字化改造。而贯穿于运营全链路的…

mybatis缓存的详细理解和使用

mybatis缓存的简单理解和使用 mybatis缓存数据的介绍 缓存是存在于内存中的临时数据,使用缓存的目的是减少和数据库的数据进行交互的次数,提高执行效率。像很多持久化框架一样,Mybatis也提供了缓存策略,通过缓存策略来减少数据库…

RflySim平台使用篇 | Coptersim系列教程(三)

# 导读 # CopterSim作为RflySim平台核心仿真软件,其主要实现两部分功能:模型和通信,掌握CopterSim使用方法即可轻松运行多旋翼运动动态模型,并连同其他软件构成软/硬件在环仿真。本篇教程将详细介绍coptersim仿真log数据获取。 Co…

webpack plugin源码解析(六) CompressionWebpackPlugin

文章目录 作用涉及 webpack API处理 asset 钩子compilation.hooks.processAssets返回或新建缓存:compilation.getCache返回 asset 文件信息:compilation.getAsset文件名匹配函数:compiler.webpack.ModuleFilenameHelpers.matchObject模版字符…

科研热点|8本期刊被剔除SCIE,4月最新SCIE/SSCI目录已更新 (附下载)~

2023年4月18日,科睿唯安更新了Web of Science核心期刊目录,此次更新后SCIE期刊目录共包含9505本期刊,SSCI期刊目录共包含3557本期刊。此次4月SCIE & SSCI期刊目录更新,与3月更新相比 (警惕!多达50本SCI/SSCI被剔除…

Kafka中时间轮分析与Java实现

仿kafka实现java版时间轮_java实现时间轮算法_Hekliu的博客-CSDN博客 https://www.cnblogs.com/softlin/p/7426083.html https://blog.csdn.net/happyjacob/article/details/128518700 一、背景 在Kafka中应用了大量的延迟操作但在Kafka中 并没用使用JDK自带的Timer或是Dela…

m3u8转mp4下载,有URL,IV

1、背景 在线m3u8现在是主流加密方式的视频。 2、下载m3u8视频难点 首先需要连接m3u8文件格式,这个自行百度,其次加密方式确定和key以及iv。如果没有加密直接找一个在线的m3u8转mp4就可以,但是问题就是很多带加密,而且key不是m3m8中key URL返回的数据,市面上软件无法直…

基于matlab评估机场监控雷达上 5G 新无线电 (NR) 信号的干扰

一、前言 随着5G NR系统的频率范围超出LTE中使用的频段,频谱管理变得更加复杂。对扩大5G覆盖范围的需求是由更高的数据速率和更低的延迟的好处推动的。新5G基站的实施反过来又推动了了解这些信号如何影响在相同频段上运行的已安装系统的需求。其中一个系统是空中交通…

类对象

一、类初识 类:表示一种事物所具有的共同特征和行为 对象:一个类的实例 如下图,通过狗这个类进行详解 这是一个Dog类 对象:斗牛犬、小猎犬、牧羊犬 类中的属性:breed(品种)、size(大小)、color(颜色)、age(年龄)、 …

OpenCv基础之绘图及几何变换实例

文章目录 OpenCv基础之绘图及几何变换实例创建背景图线段绘制矩形绘制圆绘制椭圆绘制绘制多边形添加文字 几何变换图像平移图像缩放图像旋转仿射变换透视变化 OpenCv基础之绘图及几何变换实例 绘图在图像处理中,主要是在处理完图像后,将图像中的目标进行…

Python算法设计 - 哈夫曼编码

目录 一、哈夫曼树二、哈夫曼编码三、Python算法实现四、作者Info 一、哈夫曼树 上图是根据“this is an example of a huffman tree”中得到的字母频率来建构的哈夫曼树 二、哈夫曼编码 多年来,哈夫曼编码在统计数据压缩方面是非常先进的,应当指出&am…

C# 类库打包推送到nuget

步骤1:注册nuget 账号,可以使用outlook邮箱进行注册 步骤2:建立 apikey 名字自己起,Glob Pattern 填入“*” 步骤3:把程序打包,打包很简单右键vs2022 打包就好 但是注意*.csproj 文件修改,修改目的是为了…

IGS 产品长文件命名方式简介

文章目录 Part.I IntroductionPart.II 文件命名方式Chap.I 官方说明Chap.II 实例 Reference Part.I Introduction 2022 年 11 月 30 日(DOY 331, GPSWD 22380)及以后,IGS 的参考框架从 IGS-14 切换为 用 IGS-20,最新的卫星和地…

vue3中<script setup> 和 setup函数的区别

<script setup> 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖。当同时使用 SFC 与组合式 API 时该语法是默认推荐。相比于普通的 <script> 语法&#xff0c;它具有更多优势&#xff1a; 更少的样板内容&#xff0c;更简洁的代码。能够使用纯 TypeScript…

拿下模板进阶

模板进阶 1. 非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将…

代码随想录训练营day53|1143、最长公共子序列;1035、不相交的线;53、最大子序和动态规划

1143、最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08;也可以不删除任何字符&#xff…

如何在一个中文大模型上,加入招投标字段标注的数据,搭建一个招投标字段解析的Transformer模型?

ChatGPT方案1 在一个中文大模型上加入招投标字段标注的数据&#xff0c;并搭建招投标字段解析的Transformer模型可以通过以下步骤实现&#xff1a; 收集并标注招投标相关的数据。可以使用现有的数据集&#xff0c;也可以通过爬虫技术获取相关数据&#xff0c;然后进行人工标注。…