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

2390 篇文章 33 订阅
1785 篇文章 17 订阅

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

现在正在工作的团队是一个新团队,我们正在努力弄清楚我们的流程,并试图尽可能地实现自动化。为此,我承担了 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%免费】

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值