使用Portman、Postman和Newman自动化API测试

news2024/11/30 9:43:18

几个月前我换了工作和公司,很喜欢这样的变化,但多少会有些不知所措。现在事情已经安排好了一些,我可以回来做一些我喜欢的事情。

现在正在工作的团队是一个新团队,我们正在努力弄清楚我们的流程,并试图尽可能地实现自动化。为此,我承担了 API 自动化测试的工作。

我想遵循与上次相同的方案,即通过 CI/CD 使用 Newman,正如我在“使用 Newman 自动化 API 测试”中所写的那样。但是我遇到了一个有趣的工具,叫做 Portman,想尝试一下。上次所做的工作非常好,但不得不通过 Postman 维护 Postman 中保存的请求集,这有点痛苦。这也将更接近规范驱动的开发,其中 OpenAPI 规范将驱动一切。

使用 Portman,不仅可以生成 Postman 请求集合供 Newman 使用,而且还包括所有的合约、内容和模糊测试以及用于处理身份验证的预请求脚本。

需要的配置文件

Portman 使用了一些需要配置的文件来将所有内容结合在一起。Portman 可以设置为将请求集合与所正在做的Postman Team/Workspace 同步。关键文件可以根据需要更改名称,我的名称是基于我在 GitHub 的 Portman 示例中找到的名称。

portman-cli-options.json

这个文件只是让在调用 Portman 时不必将所有内容添加到命令行。当然也可以将所有内容作为选项传递给 Portman,但是将所有内容指定在一个位置并将其存储在存储库中会更简洁

{

    "local": "./user-api.yaml",

    "baseUrl": "http://portal.example.com",

    "output": "./api.postman.json",

    "portmanConfigFile": "./portman-config.api.json",

    "postmanConfigFile": "./postman-config.api.json",

    "envFile": "./.env-portman",

    "includeTests": true,

    "syncPostman": true,

    "runNewman": false,

    "postmanWorkspaceName":"MyTeam",

    "collectionName": "User"

  }

postman-config.api.json

postman解析值的选项。为了更好地了解选项是什么,请看这里。我将此文件与示例提供的文件保持一致。

.env-postman

如果你正在同步到 Postman 云,则需要把API 密钥放在此文件中。这个文件有一个KVPPOSTMAN_API_KEY=

portman-config.api.json

这是将要配置的主文件,可以在里面定义全局设置,例如预请求脚本、特定测试(内容、合同、模糊测试等)或 Portman 的许多其他功能。

要做的第一件事是设置预请求脚本,该脚本将从登录服务获取 JWT,然后在后续的每一个请求中使用它。有关创建此脚本的更多信息,请查看我之前写的一篇题为“在 Postman / Newman 中自动获取不记名令牌以获取集合”的文章。

这是在“globals”模块中定义。如果在Portman中配置多个前置请求,每个请求应该以“;”结束(这一点有别于Postman),并且每个请求务必在一行内书写,就像下面示例一样:

"globals": {

        "stripResponseExamples": true,

        "collectionPreRequestScripts": [

            "pm.sendRequest({ url: pm.environment.get('baseUrl')+'/user/v1/login',method: 'POST',header: {'Accept': 'application/json','Content-Type': 'application/x-www-form-urlencoded'},body: {mode: 'raw',raw: 'u='+pm.environment.get('username')+'&p='+pm.environment.get('password')}},(err, res) => {pm.environment.set('ACCESS', res.headers.get('x-auth')); pm.environment.set('org', res.json().org); pm.request.headers.add({key: 'x-token',value: res.headers.get('x-auth')})});"

        ]

    }

下一个将定义的是测试,这是一个同时使用Content和Contract tests的示例。这些是非常简单的测试,但可以扩展很多,查看 Portman 实例中的 Contract Tests 和 Content Tests 以便更好地了解可以做什么。

"tests": {

        "contentTests": [

            {

                "openApiOperation": "[GET]::/user/v1/user/whoami",

                "responseBodyTests": [

                    {

                        "key": "username",

                        "value": "testuser@example.com"

                    },

                    {

                        "key": "org",

                        "value": "SpaceX"

                    }

                ]

            }

        ],

        "contractTests": [

            {

                "openApiOperation": "*::/user/*",

                "statusSuccess": {

                    "enabled": true

                }

            }, {

                "openApiOperation": "*::/user/*",

                "responseTime" : {

                    "enabled": true,

                    "maxMs": 300

                }

            }, {

                "openApiOperation": "*::/user/*",

                "contentType": {

                    "enabled": true

                }

            }, {

                "openApiOperation": "*::/user/*",

                "jsonBody": {

                    "enabled": true

                }

            }, {

                "openApiOperation": "*::/user/*",

                "schemaValidation": {

                    "enabled": true

                }

            }, {

                "openApiOperation": "*::/user/*",

                "headersPresent": {

                    "enabled": true

                }

            }

        ]

    },

运行 Portman

现在已经配置了所有文件,可以将 OpenAPI yaml/json 文件转换到postman集合中。
由于设置了 CLI 选项文件,因此,只需将一个选项传递给 portman 命令行,即cliOptionsFile ,Portman 将处理剩下的内容。

portman --cliOptionsFile ./portman-cli-options.json

现在,可以将其添加到CI/CD 管道中以动态创建测试用例,并确保在每次构建时都对API 进行全面测试。

总结

看看Portman examples,里面有很多很好的信息!文档很不错,但不是都在同一个地方,所以可能有点难以找到,但是通过示例将提供很多见解!

拿我的设置来说,先将其同步到 Postman Team,以便可以通过 Postman 应用程序查看 Postman 集合。如果你是这样做,请记住,虽然该选项称为同步,但它实际上只是从 Portman 到 Postman 的覆盖。在刚开始的测试中,这让我踩了好几次坑,因为我没有将我在 Postman 中对集合所做的编辑保存到 portman-config 文件中,然后运行 Portman。

如果你喜欢这篇文章或我之前写的任何文章,请给它一个点个赞或关注我。感谢您的阅读!

如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以加入我们的QQ群:746506216,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。


资源分享

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

编译原理实验一:源程序的预处理及词法分析程序的设计与实现(python)

实验目的 设计并实现一个包含预处理功能的词法分析程序,加深对编译中词法分析过程的理解。 实验要求 1、实现预处理功能 源程序中可能包含有对程序执行无意义的符号,要求将其剔除。 首先编制一个源程序的输入过程,从键盘、文件或文本框输…

[附源码]java毕业设计校园拓展活动管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

论文阅读之Dynamic Routing Between Capsules(2017)

文章目录前言capsule network参考前言 capsule network 可以简单理解为将神经网络的标量计算,赋予了方向,变换成了向量进行计算。 标量只有大小之分。 向量不仅有大小,还有方向之分。 应该可以略微感受到这种思路的魔力了。 capsule 主要是…

IB历史备考,如何拿高分?

邻近期末考,大伙儿是不是十分焦虑不安呢?大家的老师经常发觉学生们本来知识要点都把握得挺不错的,但每到考試便是拿不上满意的考试成绩,让人十分郁闷!因此应对那样的难点,大家的IB历史时间评委为大伙儿筹备…

行业分析| 智慧消防对讲

消防工程关系国计民生,关系到每个公民的人身和财产安全,在每个场所的建设中,消防工程建设是必不可少的一个板块,包括消防应急通道建设和应急设备建设两个方面。其中消防系统设备建设主要分为九大系统的建设:消防水系统…

VectorCAST测试工具环境搭建

**目的:**本文提供VectorCAST使用的实际操作方法,以便项目可以很好的使用VectorCAST工具。 适用范围:VectorCAST是一个专门针对嵌入式软件的C/C代码进行单元测试的工具,它可以自动生成测试用例、评估测试结果并生成测试报告。 **工…

十年来高薪专业变成了它——信息安全

“什么专业好就业?” “什么专业以后赚的钱多?” 确实,专业对应的行业薪资各有不同,选对了专业赢在起跑线也不是没有可能! 麦可思机构分析了近十年大学生就业数据情况,发现从2011年到2020年的大学毕业生高…

Windows简单安装redis

1.去git下载 或者去搜点资源,windows下载是压缩包,找个目录解压进去。 Github下载地址:https://github.com/MicrosoftArchive/redis/releases 2.打开cmd 尝试启动 比如我放在d盘soft下面,windows你直接打开cmd,输入d…

Baklib知识分享|文档生命周期:确保您的文档产出效率

一个多世纪以来,文档一直是任何产品或服务的支柱。它是用户在使用您的产品、应用程序、网站或其他软件服务时所引用的内容。但在现代,随着大多数帮助或支持文档从传统形式转移到数字形式,对效率的需求比以往任何时候都更加明显。此外&#xf…

[附源码]SSM计算机毕业设计基于javaweb电影购票系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【Shell 脚本速成】01、编程语言与 Shell 脚本介绍

目录 一、编程语言介绍 二、shell介绍 1、shell介绍 2、bash shell基本特性 2.1 命令和文件自动补全 2.2 常见的快捷键 3、shell脚本介绍 准确来说: 3.1 案例演示 3.2 什么时候用到脚本? 4、shell脚本语法 4.1 shell脚本组成 4.2 脚本文件命…

Spring事务配置(案例:转账业务追加日志,事务传播行为)

目录 Spring事务配置 案例 事务传播行为 代码实现: 1.文件大致格式: 2.ServiceAdvise(AOP功能包) 3.JdbcConfig(jdbc配置文件,包含了事务管理器) 4.MybatisConfig(mybatis配置…

Unity技术手册-UGUI零基础详细教程-ScrollBar和ScrollView

往期文章分享点击跳转>《导航贴》- Unity手册,系统实战学习点击跳转>《导航贴》- Android手册,重温移动开发 本文约8千字,新手阅读需要20分钟,复习需要12分钟 【收藏随时查阅不再迷路】 👉关于作者 众所周知&…

2022/11/22 [easyx]关于字符和一些背景

#include<stdio.h> #include<graphics.h> //包含图形库头文件 int main() {//创建一个窗口//(show console 显示控制台)&#xff0c;640&#xff0c;480为窗口大小*initgraph(640,480,SHOWCONSOLE);//showconsole可以换成NOCLOSE:程序不能关闭// NOMINIMIZE不能最小…

洛谷 T292115 [传智杯 #5 练习赛] 树的变迁#并查集+逆向思维

一道质量挺高的题&#xff08;个人感觉&#xff09;&#xff0c;题目说了每次要删除一条边&#xff0c;分成两棵树&#xff0c;那么很容易想到用并查集去维护。但是问题在于如果要将原来那棵树分成新的两个树必然不能使用路径压缩&#xff0c;如图所示 如果使用了路径压缩那就…

数据安全法vs国家标准,40+标准助力数据安全保驾护航~(附整理文档及pdf下载)

2021年9月1日&#xff0c;《中华人民共和国数据安全法》生效施行&#xff0c;如何助力数据安全法的贯彻落实&#xff0c;做到数据合法合规的使用需要建设一系列的数据安全标准体系。也就是说&#xff0c;有了数据安全相关标准&#xff0c;就是有了如何践行数据安全法落地实施的…

Oracle LiveLabs实验:Manage and Monitor Autonomous Database

概述 本研讨会中的实验将引导您完成开始使用 Oracle 自治数据库的所有步骤。 首先&#xff0c;您将创建一个 Oracle 自治数据库实例。 然后&#xff0c;您将练习使用自治数据库工具和 API 从不同位置以不同格式加载数据的几种方法。 您将使用 SQL 分析数据并使用 Oracle Analy…

JavaScript构造函数和原型:继承

ES6之前并没有给我们提供 extends 继承。我们可以通过构造函数原型对象模拟实现继承&#xff0c;被称为组合继承。 call() 调用这个函数, 并且修改函数运行时的 this 指向 fun.call(thisArg, arg1, arg2, ...) thisArg &#xff1a;当前调用函数 this 的指向对象 arg1&am…

weapp源码反编译步骤

一、下载解密工具 解密工具下载&#xff1a;地址 二、在微信电脑版&#xff0c;打开目标小程序,在如下的目录中可以找到小程序的目录 这是我自自定义的缓存目录&#xff0c;找不到自己缓存目录在哪儿的&#xff0c;手机给自己的文件助手发个文档&#xff0c;打开所在目录&…

高标准企业级安全性,华为云会议为线上沟通保驾护航

如今&#xff0c;全球企业正在以办公室为主的工作环境向混合型工作环境转变&#xff0c;线上会议逐渐成为企业的刚需。事实上通过云会议的形式进行的远程沟通协作&#xff0c;如线上招聘、培训、课堂等也已非常普及&#xff0c;不过随之而来的网络安全风险也愈发引起各界关注。…