View a markdown version of this page

MCP 工具规范 - AWS 上的分布式负载测试

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

MCP 工具规范

分布式负载测试解决方案提供了一组 MCP 工具,使 AI 代理能够与测试场景和结果进行交互。这些工具提供了与 AI 代理处理信息的方式相一致的高级抽象功能,使他们能够专注于分析和见解,而不是详细的 API 合同。

MCP 服务器支持两种访问模式,由 MCPServerAccessMode AWS CloudFormation 参数控制:

  • ReadOnly(默认)-仅注册读取工具。代理可以通过以下方式查看 7 种工具tools/list。没有可用的变异操作。

  • ReadWrite— 读取和写入工具均已注册。代理可以查看所有工具(读取+写入),tools/list并且可以创建测试、触发运行、管理计划和上传脚本。

访问模式是在部署时设置的。要在初始部署后更改访问模式,请使用新MCPServerAccessMode参数值执行 CloudFormation 堆栈更新。此更改将在堆栈更新完成时生效,无需其他手动步骤。

在 ReadOnly 模式下,写入工具根本没有注册,代理永远看不到它们tools/list。针对 MCP 服务器的 AWS Lambda 函数的 AWS 身份和访问管理 (IAM) 策略规定了相应的范围。 ReadOnly 仅允许向 API 发出 GET 请求。 ReadWrite 允许 GET、POST、PUT 和 DELETE。

阅读工具

列表_场景

说明

该list_scenarios工具使用基本元数据检索所有可用测试场景的列表。

端点

GET /scenarios

参数

无

响应

Name 说明

testId

测试场景的唯一标识符

testName

测试场景的名称

status

测试场景的当前状态

startTime

创建测试或上次运行测试的时间

testDescription

测试场景的描述

获取场景详情

说明

该get_scenario_details工具检索单个测试场景的测试配置和最近运行的测试。

响应会报告场景的流量形态模式。nativeRunMode对象表示原生模式,不存在则表示标准模式。对于原生方案,concurrencyrampUp、和holdFor字段不反映运行生成的负载。相反,负载来自脚本。有关更多信息,请参阅交通形态模式。

端点

GET /scenarios/<test_id>?history=false&results=false

请求参数

test_id
  • 测试场景的唯一标识符

    类型:字符串

    是否必需:是

响应

Name 说明

testTaskConfigs

每个区域的任务配置

testScenario

测试定义和参数

status

当前测试状态

startTime

测试开始时间戳

endTime

测试结束时间戳(如果已完成)

list_test_runs

说明

该list_test_runs工具检索特定测试场景的测试运行列表,按从新到旧排序。最多返回 30 个结果。只能提供其中limit一个,不能同时提供。start_timestamp

端点

GET /scenarios/<testid>/testruns/?limit=<limit>

或者

GET /scenarios/<testid>/testruns/?start_timestamp=<start_timestamp>

请求参数

test_id
  • 测试场景的唯一标识符

    类型:字符串

    是否必需:是

limit
  • 要返回的最大测试运行次数。不能与 start_timestamp 一起使用。

    类型:整数

    默认值:20

    最大值:30

    必需:否

start_timestamp
  • 返回所有可追溯到该时间戳的测试运行。不能与 limit 一起使用。

    类型:字符串(例如 ISO 8601 日期时间格式)2024-01-15T14:30:00.000Z

    必需:否

响应

Name 说明

testRuns

包含每次运行的性能指标和百分位数的测试运行摘要数组

get_test_run

说明

该get_test_run工具会检索包含区域和终端故障的单次测试的详细结果。

端点

GET /scenarios/<testid>/testruns/<testrunid>

请求参数

test_id
  • 测试场景的唯一标识符

    类型:字符串

    是否必需:是

test_run_id
  • 特定测试运行的唯一标识符

    类型:字符串

    是否必需:是

响应

Name 说明

results

完整的测试运行数据,包括区域结果细分、特定终端指标、性能百分位数(p50、p90、p95、p99)、成功和失败次数、响应时间和延迟以及用于运行的测试配置

get_latest_test_run

说明

该get_latest_test_run工具检索特定测试场景的最新测试运行。

端点

GET /scenarios/<testid>/testruns/?limit=1

注意

使用全球二级索引 (GSI) 按时间对结果进行排序,以便返回最新的测试运行。

请求参数

test_id
  • 测试场景的唯一标识符

    类型:字符串

    是否必需:是

响应

Name 说明

results

最新的测试运行数据,其格式与 get_test_run

get_baseline_test_run

说明

该get_baseline_test_run工具检索特定测试场景的基准测试运行。基准用于性能比较目的。

端点

GET /scenarios/<test_id>/baseline

请求参数

test_id
  • 测试场景的唯一标识符

    类型:字符串

    是否必需:是

响应

Name 说明

baselineData

用于比较目的的基准测试运行数据,包括指定基准运行中的所有指标和配置

get_test_run_artifacts

说明

该get_test_run_artifacts工具检索 Amazon S3 存储桶信息以访问测试项目,包括日志、错误文件和结果。

端点

GET /scenarios/<testid>/testruns/<testrunid>

请求参数

test_id
  • 测试场景的唯一标识符

    类型:字符串

    是否必需:是

test_run_id
  • 特定测试运行的唯一标识符

    类型:字符串

    是否必需:是

响应

Name 说明

bucketName

存储对象的 S3 存储桶名称

testRunPath

当前对象存储的路径前缀(版本 4.0+)

testScenarioPath

传统项目存储的路径前缀(4.0 之前的版本)

写作工具

写入工具仅在设置MCPServerAccessMode为时可用ReadWrite。它们使代理能够创建、修改和执行测试场景。

创建_测试

说明

该create_test工具无需执行即可创建新的负载测试场景。测试已保存,以后可以使用start_run。对于基于脚本的测试(jmeter、k6、locust),请upload_test_script先调用并通过返回的测试。test_id

参数

test_id
  • 测试场景的唯一标识符。省略简单的 HTTP 测试(系统生成一个)。基于脚本的测试是必需的 — 使用test_id返回的。upload_test_script

    类型:字符串

    必需:否(基于脚本的测试为必填项)

test_name
  • Human-readable 测试场景的名称

    类型:字符串

    是否必需:是

test_description
  • 此测试验证内容的描述

    类型:字符串

    是否必需:是

test_type
  • 测试类型。simple用于内联配置的 HTTP 端点测试。jmeterk6、或者locust用于引用上传的脚本文件的基于脚本的测试。

    类型:字符串

    是否必需:是

test_task_configs
  • 区域任务配置。每个条目都指定一个区域、AWS Fargate 任务的数量以及每项任务的并发虚拟用户。一个区域的并发用户总数 = task_count × concurrency。

    类型:对象数组(每个都带有region、task_count、concurrency)

    是否必需:是

test_scenario
  • 定义负载配置文件和目标端点的测试执行场景。包含execution(升级、hold-for、场景名称)和scenarios(命名场景定义,其中包含用于简单测试的requests数组或用于基于脚本的测试的script字符串)。

    类型:对象

    是否必需:是

show_live
  • 是否在测试执行期间启用实时监控。

    类型:布尔值

    默认值:false

    必需:否

tags
  • 用于组织测试场景的标签。最多 5 个标签。

    类型:字符串数组

    必需:否

native_run_mode
  • 选择交通形状模式的对象。在标准模式下将其省略,在该模式下,解决方案控制负载。将其包括在原生模式下,您上传的脚本控制负载。有关更多信息,请参阅交通形态模式。

    类型:对象

    必需:否

本机模式与标准模式的不同之处如下:

  • 该对象需要一个字段max_test_duration_seconds,最长 24 小时。

  • 只有基于脚本的测试(jmeterk6、或locust)接受原生模式。

  • 简单的 HTTP 端点测试始终在标准模式下运行。

  • test_task_configs仍然是必填项,每个条目仍然需要concurrency。

  • 设置concurrency为的请求native_run_mode返回成功。

  • 测试生成的负载是您的脚本声明的负载。

  • 每个区域的总负载是脚本的负载乘task_count以。

响应

Name 说明

testId

创建的测试的唯一 ID

testName

测试的名称

status

测试的状态(例如,created)

更新测试

说明

该update_test工具更新现有测试场景的配置。这是一次全面的替代——必须提供整个测试配置,而不仅仅是更改的字段。该测试当前必须未运行。

参数

与create_test,但必填test_id项除外,必须引用现有测试。

响应

Name 说明

testId

更新后的测试的唯一 ID

testName

测试的名称

status

测试状态

delete_test

说明

该delete_test工具永久删除测试场景和所有相关数据,包括测试运行历史记录、计划和亚马逊 CloudWatch 控制面板。并且无法撤消。该测试当前必须未运行。

参数

test_id
  • 测试场景的唯一标识符

    类型:字符串

    是否必需:是

响应

Name 说明

status

确认删除

start_run

说明

该start_run工具开始执行测试场景。MCP 服务器获取测试的存储配置并触发执行。立即以状态返回queued。用于投票get_latest_test_run以完成投票。

参数

test_id
  • 测试场景的唯一标识符

    类型:字符串

    是否必需:是

响应

Name 说明

testId

测试的唯一 ID

status

测试的状态(例如,queued)

stop_run

说明

该stop_run工具会停止当前正在运行的测试。向所有正在运行的 Fargate 任务发送取消信号。测试状态转换为cancelled。部分结果可通过以下方式获得get_latest_test_run。

参数

test_id
  • 测试场景的唯一标识符

    类型:字符串

    是否必需:是

响应

Name 说明

status

确认取消

创建_简单_时间表

说明

该create_simple_schedule工具创建一次性预定测试,该测试在指定的日期和时间自动运行。需要所有标准测试配置字段以及计划字段。

参数

所有create_test参数(可test_id选,规则相同),以及:

schedule_date
  • 计划运行的日期。将来一定如此。

    类型:字符串(格式:YYYY-MM-DD)

    是否必需:是

schedule_time
  • 是时候计划运行了。

    类型:字符串(格式:HH:MM,24 小时)

    是否必需:是

schedule_timezone
  • 用于时间表解释的 IANA 时区(例如,America/New_York,UTC)。

    类型:字符串

    默认:UTC

    必需:否

响应

Name 说明

testId

测试的唯一 ID

status

测试的状态(例如,scheduled)

nextRun

下次预定执行时间

创建 cron_schedule

说明

该create_cron_schedule工具会创建一个定期的计划测试,该测试根据 cron 表达式自动运行。需要所有标准测试配置字段以及 cron 计划字段。

参数

所有create_test参数(可test_id选,规则相同),以及:

cron_value
  • 循环计划的 Cron 表达式。标准 5 字段格式(0 9 * * *例如,每天上午 9:00)。

    类型:字符串

    是否必需:是

recurrence
  • Human-readable 重复标签(例如,daily,weekly)。

    类型:字符串

    是否必需:是

cron_expiry_date
  • 循环计划停止执行的日期。

    类型:字符串(格式:YYYY-MM-DD)

    必需:否

schedule_timezone
  • 用于时间表解释的 IANA 时区。

    类型:字符串

    默认:UTC

    必需:否

响应

Name 说明

testId

测试的唯一 ID

status

测试的状态(例如,scheduled)

nextRun

下次预定执行时间

更新_简单_时间表

说明

该update_simple_schedule工具更新现有一次性预定测试的时间表配置。完全替换测试配置,包括计划字段。测试必须处于scheduled状态。

参数

与create_simple_schedule,但必填test_id项除外,必须参考现有的预定测试。

响应

与 create_simple_schedule 相同。

更新cron_schedule

说明

该update_cron_schedule工具更新现有定期预定测试的时间表配置。完全替换测试配置,包括 cron 计划字段。测试必须处于scheduled状态。

参数

与create_cron_schedule,但必填test_id项除外,必须参考现有的预定测试。

响应

与 create_cron_schedule 相同。

上传测试脚本

说明

该upload_test_script工具上传基于脚本的测试所需的脚本文件(JMeter .jmx、k6 .js、Locust .py 或.zip)。必须在基于脚本的测试之前create_test或update_test进行基于脚本的测试之前调用。返回 a test_id 和script_filename,用于后续的工具调用。

参数

test_id
  • 测试场景的唯一标识符。省略新测试(系统生成一个)。规定将现有测试上传到正确的位置。

    类型:字符串

    必需:否

test_type
  • 测试类型:jmeterk6、或locust。

    类型:字符串

    是否必需:是

file_extension
  • 文件扩展名:jmxjs、py、或zip。

    类型:字符串

    是否必需:是

file_content
  • Base64-encoded 文件内容。

    类型:字符串

    是否必需:是

响应

Name 说明

test_id

测试 ID(生成或提供)

script_filename

S3 中的文件名(格式:<test_id>.<extension>)。请参考这个test_scenario.scenarios。

工作流程指南

工作流程指南是多步配方,可帮助代理将多个工具链接在一起以进行常见操作。该get_workflow_guides工具为每个工作流程返回结构化的分步指南。

获取工作流程指南

说明

该get_workflow_guides工具返回常见多工具 DLT 操作的分步工作流程方案。返回有关调用哪些工具、按什么顺序调用以及如何在步骤之间解释结果的结构化指南。

参数

workflow
  • 检索指导的工作流程。其中之一:run_and_monitor,baseline_comparison,schedule_test,create_and_run, update_and_run。

    类型:字符串

    是否必需:是

响应

Name 说明

workflow

工作流程标识符

description

工作流程用途的简要描述

steps

步骤对象数组,每个对象都有step(数字)、action(要做什么)、tool(要调用哪个 MCP 工具,对于非工具步骤,则为 null)和details(特定指令)

可用工作流程

运行并监控

开始现有的测试运行和投票直至完成。

  1. 使用list_scenarios或查找测试 get_scenario_details

  2. 使用开始测试运行 start_run

  3. 使用进行轮询以确定是否完成get_latest_test_run(建议间隔:30 秒;在亚马逊弹性容器服务 (Amazon ECS) 任务启动期间处理初始 404 1 到 3 分钟)

  4. 达到终端状态(completefailed、或cancelled)后报告结果

基线比较

运行测试并将结果与存储的基准进行比较。

  1. 使用list_scenarios或查找测试 get_scenario_details

  2. 使用开始测试运行 start_run

  3. 使用轮询完成时间get_latest_test_run(建议间隔:30 秒)

  4. 使用检索基线get_baseline_test_run(如果未设置基线,则跳过比较)

  5. 比较指标(平均响应时间、延迟、吞吐量、百分位数、错误率)

schedule_test

使用定期或一次性计划创建测试。

  1. 确定时间表类型(一次性 →create_simple_schedule,重复 →create_cron_schedule)

  2. 如果基于脚本使用,则上传测试脚本 upload_test_script

  3. 使用完整配置和计划字段创建预定测试

  4. 使用get_scenario_details(选中status: scheduled和nextRun)验证计划是否已创建

限制:两次循环运行之间至少间隔 1 小时,间隔必须超过测试持续时间,cron 必须精确指定一分钟值。

创建并运行

从头开始创建一个新测试并立即执行它。

  1. 如果基于脚本使用,则上传测试脚本 upload_test_script

  2. 使用创建测试 create_test

  3. 使用start_run返回的开始测试运行 test_id

  4. 使用轮询完成时间get_latest_test_run(建议间隔:30 秒)

  5. 报告结果

更新并运行

修改现有测试的配置并立即重新执行它。

  1. 使用检索当前配置 get_scenario_details

  2. 如果使用更改脚本,请上传新脚本 upload_test_script

  3. 使用更新测试配置update_test(完全替换 — 包括所有字段)

  4. 使用开始测试运行 start_run

  5. 使用轮询完成时间get_latest_test_run(建议间隔:30 秒)

  6. 报告结果

注意

所有 MCP 工具都利用现有的 API 端点。无需修改底层 API 即可支持 MCP 功能。