1. 概述

在现代企业应用的软件开发生命周期(SDLC)中,负载测试是一个关键环节。本教程将指导你如何使用Postman集合 来执行一个简单的负载测试活动。

2. 准备工作

你可以下载并安装适用于你系统操作系统的桌面客户端:下载链接。或者,你可以创建一个免费的Postman账户,然后通过Web客户端访问。

现在,我们来创建一个名为“Google Apps - 负载测试”的新集合,通过导入Postman版本2.1中提供的几个样本HTTP请求:

{
  "info": {
    "_postman_id": "ddbb5536-b6ad-4247-a715-52a5d518b648",
    "name": "Google Apps - Load Testing",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name": "Get Google",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              ""
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "https://www.google.com",
          "protocol": "https",
          "host": [
            "www",
            "google",
            "com"
          ]
        }
      },
      "response": []
    },
    {
      "name": "Get Youtube",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              ""
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "https://www.youtube.com/",
          "protocol": "https",
          "host": [
            "www",
            "youtube",
            "com"
          ],
          "path": [
            ""
          ]
        }
      },
      "response": []
    },
    {
      "name": "Get Google Translate",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              ""
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "https://translate.google.com/",
          "protocol": "https",
          "host": [
            "translate",
            "google",
            "com"
          ],
          "path": [
            ""
          ]
        }
      },
      "response": []
    }
  ]
}

导入数据时,请选择“原始文本”选项:
Postman导入集合

完成了!只需点击继续按钮完成导入任务,我们的测试集合就在Postman中准备好了。

3. 使用Postman集合运行器

在这个部分,我们将探讨如何使用Postman的集合运行器来执行“Google Apps - 负载测试”集合中的API请求,并进行基本的负载测试。

3.1. 基本配置

右键点击集合,可以启动集合运行器:

Postman集合运行器

在运行模式下,我们需要指定执行顺序、迭代次数以及连续API调用之间的延迟

Postman运行模式

接着,点击“运行Google Apps - 负载测试”,开始集合中的API请求的基本负载测试:

Postman基础负载测试

随着运行器执行API请求,我们可以看到每个API调用的实时结果,跨多个迭代。

3.2. 使用测试脚本进行高级配置

在Postman图形用户界面中,我们已经能够控制API的执行顺序。然而,通过使用Postman的测试脚本功能,我们可以对执行流程实现更精细的控制

假设我们只想在“Google API”返回HTTP状态码200时,才包含“Google Translate”API。否则,我们将直接调用“YouTube API”:

Postman高级流程

首先,在“获取Google”请求的“测试”部分添加一个简单的条件语句:

if (pm.response.code == 200) {
    postman.setNextRequest("Get Google Translate");
}
else {
    postman.setNextRequest("Get Youtube");
}

接下来,设置“获取YouTube”为在“获取Google翻译”之后执行的请求:

postman.setNextRequest("Get Youtube");

由于“获取YouTube”是流程的最后一个请求,我们在其后设置下一个请求为null

postman.setNextRequest(null);

最后,查看包含测试脚本的完整集合:

{
  "info": {
    "_postman_id": "ddbb5536-b6ad-4247-a715-52a5d518b648",
    "name": "Google Apps - Load Testing",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name": "Get Google",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              "if (pm.response.code == 200) {",
              "  postman.setNextRequest(\"Get Google Translate\");",
              "}",
              "else {",
              "  postman.setNextRequest(\"Get Youtube\");",
              "}"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "https://www.google.com",
          "protocol": "https",
          "host": [
            "www",
            "google",
            "com"
          ]
        }
      },
      "response": []
    },
    {
      "name": "Get Youtube",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              "postman.setNextRequest(null);"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "https://www.youtube.com/",
          "protocol": "https",
          "host": [
            "www",
            "youtube",
            "com"
          ],
          "path": [
            ""
          ]
        }
      },
      "response": []
    },
    {
      "name": "Get Google Translate",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              "postman.setNextRequest(\"Get Youtube\");"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "https://translate.google.com/",
          "protocol": "https",
          "host": [
            "translate",
            "google",
            "com"
          ],
          "path": [
            ""
          ]
        }
      },
      "response": []
    }
  ]
}

像之前一样,我们可以使用集合运行器执行这个自定义流程。

4. 使用Newman运行器

你可以使用Newman命令行工具通过命令行运行Postman集合,这提供了更多的自动化机会。

让我们用它来运行我们现有集合的两个迭代的自定义流程:

newman run -n2 "Custom Flow Google Apps - Load Testing.postman_collection.json"

所有迭代完成后,我们会得到一个统计摘要报告,显示请求的平均响应时间:
Newman结果概要

需要注意的是,我们在演示中故意使用较低的值,因为大多数现代服务都有速率限制和请求阻塞逻辑,对于更高的值或持续时间,这些服务会开始阻止我们的请求。

5. 使用Grafana的k6

虽然Postman是最简单的方式来组织请求集合和执行流程,但它默认是顺序执行请求。在实际场景中,我们需要测试来自多个用户的同时请求。这时,我们可以使用Grafana的k6工具。

首先,我们需要将现有的Postman集合转换为k6兼容的格式。可以使用postman-to-k6库来完成这个步骤:

postman-to-k6 "Google Apps - Load Testing.json" -o k6-script.js

接下来,让我们以两个虚拟用户进行三秒的实时运行:

k6 run --duration 3s --vus 2 k6-script.js

运行结束后,我们将得到一个详细的统计报告,显示平均响应时间、迭代次数等其他指标:
k6

6. 总结

在这篇教程中,我们利用Postman集合和GUI以及Newman运行器进行了基本负载测试。此外,我们还了解了如何使用k6工具对Postman集合中的请求进行更高级的负载测试。