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


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

    现在正在工作的团队是一个新团队,我们正在努力弄清楚我们的流程,并试图尽可能地实现自动化。为此,我承担了 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"
    
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    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')})});"
    
            ]
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    下一个将定义的是测试,这是一个同时使用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
    
                    }
    
                }
    
            ]
    
        },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101

    运行 Portman

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

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

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

    总结

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

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

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

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


    资源分享

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

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    相机图像质量研究(32)常见问题总结:图像处理对成像的影响--振铃效应
    【Oracle】Oracle清理日志空间
    揭开神秘面纱,会stream流就会大数据
    WSL 忘记ubuntu的密码
    【码银送书第七期】七本考研书籍
    华为、小鹏大定爆单,智驾苦尽甘来,车主终于愿意买单
    创业开店选择哪一种咖啡机好?不同咖啡机有什么区别?
    UE4/UE5像素流送云推流|程序不稳定、弱网画面糊怎么办?
    上周热点回顾(3.18-3.24)
    vue中使用MINIO将文件上传到指定的bucket库中(vue2和vue3)
  • 原文地址:https://blog.csdn.net/m0_67695717/article/details/127981209