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

2022-11-04   出处: ITNEXT  作/译者:Tyler Owen/Yilia


几个月前我换了工作和公司,很喜欢这样的变化,但多少会有些不知所措。现在事情已经安排好了一些,我可以回来做一些我喜欢的事情。
现在正在工作的团队是一个新团队,我们正在努力弄清楚我们的流程,并试图尽可能地实现自动化。为此,我承担了 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=<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 <options file>,Portman 将处理剩下的内容。

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

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

总结

看看Portman examples,里面有很多很好的信息! 文档很不错,但不是都在同一个地方,所以可能有点难以找到,但是通过示例将提供很多见解!
拿我的设置来说,先将其同步到 Postman Team,以便可以通过 Postman 应用程序查看 Postman 集合。如果你是这样做,请记住,虽然该选项称为同步,但它实际上只是从 Portman 到 Postman 的覆盖。 在刚开始的测试中,这让我踩了好几次坑,因为我没有将我在 Postman 中对集合所做的编辑保存到 portman-config 文件中,然后运行 Portman。
如果你喜欢这篇文章或我之前写的任何文章,请给它一个点个赞或关注我。 感谢您的阅读!


声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
261° /2615 人阅读/0 条评论 发表评论

登录 后发表评论