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中准备好了。
3. 使用Postman集合运行器
在这个部分,我们将探讨如何使用Postman的集合运行器来执行“Google Apps - 负载测试”集合中的API请求,并进行基本的负载测试。
3.1. 基本配置
右键点击集合,可以启动集合运行器:
在运行模式下,我们需要指定执行顺序、迭代次数以及连续API调用之间的延迟:
接着,点击“运行Google Apps - 负载测试”,开始集合中的API请求的基本负载测试:
随着运行器执行API请求,我们可以看到每个API调用的实时结果,跨多个迭代。
3.2. 使用测试脚本进行高级配置
在Postman图形用户界面中,我们已经能够控制API的执行顺序。然而,通过使用Postman的测试脚本功能,我们可以对执行流程实现更精细的控制。
假设我们只想在“Google API”返回HTTP状态码200时,才包含“Google Translate”API。否则,我们将直接调用“YouTube API”:
首先,在“获取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"
所有迭代完成后,我们会得到一个统计摘要报告,显示请求的平均响应时间:
需要注意的是,我们在演示中故意使用较低的值,因为大多数现代服务都有速率限制和请求阻塞逻辑,对于更高的值或持续时间,这些服务会开始阻止我们的请求。
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
运行结束后,我们将得到一个详细的统计报告,显示平均响应时间、迭代次数等其他指标:
6. 总结
在这篇教程中,我们利用Postman集合和GUI以及Newman运行器进行了基本负载测试。此外,我们还了解了如何使用k6工具对Postman集合中的请求进行更高级的负载测试。