k6-cloud-investigate-test
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinesek6 Cloud test investigator
k6 Cloud测试调查工具
Structured 9-step workflow for investigating a Grafana Cloud k6 test or run.
This skill is workflow-only. All API calls go through against the plugin proxy, using v6 for REST and v5 for metrics. For the underlying mechanics (gcx auth, path conventions, endpoint discovery, log queries, script editing, threshold semantics, gotchas), see the skill — every step below references it.
gcx apik6-manageThe content unique to this skill is:
- the ordered investigation flow (Steps 1-9 below)
- the date-alignment check ("last 7 days" ≠ "last 7 runs")
- the 3-layer pass/fail determination (vs
resultvs per-checkstatusquery)checks - a worked example with realistic numbers ()
references/worked-example.md
针对Grafana Cloud k6测试或运行的结构化9步调查工作流。
本技能仅包含工作流。所有API调用均通过对接插件代理,REST接口使用v6版本,指标接口使用v5版本。关于底层机制(gcx认证、路径约定、端点发现、日志查询、脚本编辑、阈值语义、常见陷阱),请查看技能——以下每一步都会引用该技能的内容。
gcx apik6-manage本技能独有的内容包括:
- 有序的调查流程(下文第1-9步)
- 日期对齐检查(“最近7天”≠“最近7次运行”)
- 三层通过/失败判定机制(vs
resultvs 基于status查询的逐检查判定)checks - 带有真实数据的示例()
references/worked-example.md
Core principles
核心原则
- Read before write. Always GET the script before any PUT. is a write that replaces the live script with whatever file you pass — running it "just to see the URL it hits" has cost users their production scripts. If you need to learn URLs, run any non-mutating command with
gcx k6 load-tests update-scriptinstead.-vvv --log-http-payload - Paginate when enumerating runs. The endpoint caps at 1000 rows and
/test_runsdoes not auto-followgcx k6 runs list --limit 0. Use the@nextLinkloop documented ingcx api§3.k6-manage - Verify date framing. When the user says "last 7 days", "this week", "recent runs" — confirm the most-recent run's actually falls in that window. Surface the gap if not.
created - doesn't fail runs; only
check()do. And thresholds with zero observations are reported as ✓ pass. See "Threshold semantics" below for the full deep dive; the per-checkthresholdsmetric query in Step 5 catches both cases.checks
- 先读再写。执行任何PUT操作前务必先获取(GET)脚本。是一个写入操作,会用你传入的文件替换线上脚本——仅仅为了查看它请求的URL而运行该命令曾导致用户丢失生产环境脚本。如果需要了解请求的URL,请在任何非变更命令后添加
gcx k6 load-tests update-script参数来运行。-vvv --log-http-payload - 枚举运行时需分页。端点最多返回1000条数据,且
/test_runs不会自动跟进gcx k6 runs list --limit 0。请使用@nextLink第3节中记录的k6-manage循环方式。gcx api - 验证时间范围。当用户提到“最近7天”“本周”“近期运行”时——确认最新运行的时间确实落在该范围内。如果不符合,需向用户说明这一差异。
created - 不会导致运行失败;只有
check()会。且没有观测数据的阈值会被标记为✓通过。下文的“阈值语义”部分会详细说明;第5步中基于thresholds指标的逐检查查询可以同时捕捉这两种情况。checks
Prerequisites
前置条件
gcxk6-managebash
gcx --context <stack> config check # expect "✔ Connectivity: online"已安装并针对用户的栈完成认证。请查看第1节。可通过以下命令验证:
gcxk6-managebash
gcx --context <stack> config check # 预期输出:"✔ Connectivity: online"Investigation workflow
调查工作流
Step 1: Identify the test and target run(s)
步骤1:确定测试及目标运行实例
From the user's URL:
- → load test (parent of many runs)
/a/k6-app/tests/<id> - → a specific run
/a/k6-app/runs/<id>
To go run → test: fetch the run via , see §2 for the path-shape rules:
gcx apik6-managebash
gcx --context <stack> api /api/plugins/k6-app/resources/cloud/cloud/v6/test_runs/<run_id>and read from the response. To list runs for a test, see Step 3.
.test_id从用户提供的URL中识别:
- → 负载测试(多个运行实例的父资源)
/a/k6-app/tests/<id> - → 特定的运行实例
/a/k6-app/runs/<id>
若要从运行实例关联到测试:通过获取运行实例信息,路径规则请查看第2节:
gcx apik6-managebash
gcx --context <stack> api /api/plugins/k6-app/resources/cloud/cloud/v6/test_runs/<run_id>然后从响应中读取字段。若要列出某个测试的所有运行实例,请查看步骤3。
.test_idStep 2: Fetch test metadata and script
步骤2:获取测试元数据及脚本
bash
gcx --context <stack> k6 load-tests get <test_id> -o jsonFor the script, follow the GET half of the safe-edit recipe in §5 — save a backup if you'll be editing later.
k6-manageTwo script endpoints exist, and the difference matters for investigation. §5 documents both: the current load-test script and the per-run snapshot that was actually executed. They drift apart whenever the script is edited after a run. Whenever the question involves "what changed", "why did this run fail", or you're examining a run more than a few days old, also fetch the run-bundled snapshot(s) via §5's run-script endpoint and diff against the current load-test script (or against another run's snapshot). The current load-test script is the wrong artifact to reason about a past run.
k6-managek6-managebash
gcx --context <stack> k6 load-tests get <test_id> -o json获取脚本时,请遵循第5节中安全编辑流程的GET部分——如果后续需要编辑,请先备份脚本。
k6-manage存在两个脚本端点,二者的差异对调查至关重要。第5节记录了这两个端点:当前负载测试脚本,以及实际执行的运行实例快照脚本。每当运行实例执行后脚本被编辑,二者就会产生差异。当问题涉及“发生了什么变化”“为什么这次运行失败”,或者你正在检查的是几天前的运行实例时,还需通过第5节中的运行实例脚本端点获取该运行的快照脚本,并与当前负载测试脚本(或其他运行实例的快照脚本)进行对比。当前负载测试脚本并非分析过去运行实例的正确依据。
k6-managek6-manageStep 3: List runs WITH pagination
步骤3:列出所有运行实例(含分页)
Use the + loop pattern documented in §3 against . After collecting :
gcx api@nextLinkk6-manage/cloud/v6/load_tests/<test_id>/test_runsall_runspython
print(f"Total: {len(all_runs)}")
runs_sorted = sorted(all_runs, key=lambda r: r['created'], reverse=True)
for r in runs_sorted[:10]:
print(f" {r['created']:30s} id={r['id']:>8} status={r['status']:<10} result={r.get('result','?')}")Report to user: total run count, date range, latest run date. If "latest run" is more than a day old, call it out — they may believe the schedule is firing when it isn't.
使用第3节中记录的 + 循环方式,对接端点。收集完后:
k6-managegcx api@nextLink/cloud/v6/load_tests/<test_id>/test_runsall_runspython
print(f"Total: {len(all_runs)}")
runs_sorted = sorted(all_runs, key=lambda r: r['created'], reverse=True)
for r in runs_sorted[:10]:
print(f" {r['created']:30s} id={r['id']:>8} status={r['status']:<10} result={r.get('result','?')}")向用户报告:总运行次数、时间范围、最新运行时间。如果“最新运行”已超过一天,需特别指出——用户可能以为定时任务仍在正常执行。
Step 4: Verify date alignment with user's intent
步骤4:验证时间范围与用户意图一致
If the user asked for "last 7 days" / "this week" / "recent": filter by date range, not by row count — "7 most recent runs" could span a day or a year depending on how often the test runs.
python
last7 = [r for r in all_runs if r['created'] >= '<today_minus_7_days_iso>']If : surface this to the user immediately. Don't proceed with stale data.
len(last7) == 0如果用户要求查看“最近7天”“本周”“近期”的运行:请按日期范围过滤,而非按行数过滤——“最近7次运行”可能仅间隔一天,也可能跨越一年,取决于测试的执行频率。
python
last7 = [r for r in all_runs if r['created'] >= '<today_minus_7_days_iso>']如果:需立即告知用户。不要继续使用过期数据进行分析。
len(last7) == 0Step 5: Determine pass/fail status
步骤5:判定通过/失败状态
For each run examine three independent layers:
| Layer | Field | Meaning |
|---|---|---|
| Run-level outcome | | Whether thresholds breached |
| Run-level status | | Whether the run finished orderly |
| In-script checks | v5 | Per-check success rate |
For a run that the user thinks is "failing" but reports : check the third layer. Common pattern: every iteration's returns false but the run still "passes" because no threshold is defined on . See "Threshold semantics" below for the full deep dive (zero-observation trap, cloud delay, operator support).
result: passedcheck()checksabortOnFailQuery the per-check breakdown via v5 (see §7 for shape):
k6-manage/references/metrics.mdquery_aggregate_k6bash
gcx --context <stack> api \
"/api/plugins/k6-app/resources/cloud/cloud/v5/test_runs/<run_id>/query_aggregate_k6(query='ratio by (check)',metric='checks')"Each result entry in the response carries a label with the check name and a single value: the success ratio (0.0–1.0). For raw success/fail counts, also query (successes) and (failures).
checkincrease_nz by (check)increase_z by (check)针对每个运行实例,检查三个独立维度:
| 维度 | 字段 | 含义 |
|---|---|---|
| 运行级结果 | | 是否有阈值被违反 |
| 运行级状态 | | 运行是否正常完成 |
| 脚本内检查 | v5版本的 | 逐检查的成功率 |
如果用户认为某个运行“失败”但显示为:请检查第三个维度。常见情况:每次迭代的都返回false,但由于未针对定义阈值,运行仍显示“通过”。下文的“阈值语义”部分会详细说明(零观测陷阱、云端延迟、运算符支持)。
resultpassedcheck()checksabortOnFail通过v5接口查询逐检查的详细情况(的格式请查看第7节):
query_aggregate_k6k6-manage/references/metrics.mdbash
gcx --context <stack> api \
"/api/plugins/k6-app/resources/cloud/cloud/v5/test_runs/<run_id>/query_aggregate_k6(query='ratio by (check)',metric='checks')"响应中的每个结果条目都带有标签(包含检查名称)和一个数值:成功率(0.0–1.0)。若要获取原始的成功/失败次数,还需查询(成功次数)和(失败次数)。
checkincrease_nz by (check)increase_z by (check)Step 6: Fetch metrics for a run
步骤6:获取运行实例的指标
Use the v5 metrics endpoints documented in . Typical workflow:
k6-manage/references/metrics.mdbash
undefined使用中记录的v5版本指标端点。典型工作流如下:
k6-manage/references/metrics.mdbash
undefined6a. List metrics available for the run (metrics.md §1)
6a. 列出该运行实例可用的指标(metrics.md第1节)
gcx --context <stack> api /api/plugins/k6-app/resources/cloud/cloud/v5/test_runs/<run_id>/metrics
gcx --context <stack> api /api/plugins/k6-app/resources/cloud/cloud/v5/test_runs/<run_id>/metrics
6b. List labels for a metric to know what's available to filter/group by (metrics.md §4)
6b. 列出某个指标的标签,了解可用于过滤/分组的维度(metrics.md第4节)
gcx --context <stack> api
"/api/plugins/k6-app/resources/cloud/cloud/v5/test_runs/<run_id>/labels?match[]=http_req_duration"
"/api/plugins/k6-app/resources/cloud/cloud/v5/test_runs/<run_id>/labels?match[]=http_req_duration"
gcx --context <stack> api
"/api/plugins/k6-app/resources/cloud/cloud/v5/test_runs/<run_id>/labels?match[]=http_req_duration"
"/api/plugins/k6-app/resources/cloud/cloud/v5/test_runs/<run_id>/labels?match[]=http_req_duration"
6c. Time-series — pick a query method that matches the metric's type (metrics.md §6)
6c. 时间序列数据——根据指标类型选择合适的查询方式(metrics.md第6节)
gcx --context <stack> api
"/api/plugins/k6-app/resources/cloud/cloud/v5/test_runs/<run_id>/query_range_k6(query='histogram_quantile(0.95) by (name,status)',metric='http_req_duration',step=10)"
"/api/plugins/k6-app/resources/cloud/cloud/v5/test_runs/<run_id>/query_range_k6(query='histogram_quantile(0.95) by (name,status)',metric='http_req_duration',step=10)"
gcx --context <stack> api
"/api/plugins/k6-app/resources/cloud/cloud/v5/test_runs/<run_id>/query_range_k6(query='histogram_quantile(0.95) by (name,status)',metric='http_req_duration',step=10)"
"/api/plugins/k6-app/resources/cloud/cloud/v5/test_runs/<run_id>/query_range_k6(query='histogram_quantile(0.95) by (name,status)',metric='http_req_duration',step=10)"
6d. Scalar aggregate over the whole run (metrics.md §7)
6d. 整个运行周期内的标量聚合数据(metrics.md第7节)
gcx --context <stack> api
"/api/plugins/k6-app/resources/cloud/cloud/v5/test_runs/<run_id>/query_aggregate_k6(query='increase',metric='http_reqs')"
"/api/plugins/k6-app/resources/cloud/cloud/v5/test_runs/<run_id>/query_aggregate_k6(query='increase',metric='http_reqs')"
Picking the right query method per metric type matters — see the "Query methods" tables in `k6-manage/references/metrics.md`. For browser tests, the URL/status breakdown comes from `labels` + `label/{name}/values` (metrics.md §4/§5), not from a separate tags endpoint.gcx --context <stack> api
"/api/plugins/k6-app/resources/cloud/cloud/v5/test_runs/<run_id>/query_aggregate_k6(query='increase',metric='http_reqs')"
"/api/plugins/k6-app/resources/cloud/cloud/v5/test_runs/<run_id>/query_aggregate_k6(query='increase',metric='http_reqs')"
根据指标类型选择正确的查询方式至关重要——请查看`k6-manage/references/metrics.md`中的“查询方式”表格。对于浏览器测试,URL/状态的细分信息来自`labels` + `label/{name}/values`(metrics.md第4/5节),而非单独的标签端点。Step 7: Fetch logs for a run
步骤7:获取运行实例的日志
Follow the Loki recipe in §4 ( against , selector, mandatory header, scope / to /). Save the response to and summarise from the file as described there.
k6-managegcx api/api/plugins/k6-app/resources/logs/...{test_run_id="<id>"}X-K6TestRun-Idstartendrun.createdrun.ended/tmp/run_<id>_logs.json遵循第4节中的Loki操作指南(通过对接,使用选择器,必须添加请求头,将时间范围限定在/之间)。将响应保存到,并按照该指南中的说明从文件中提取摘要。
k6-managegcx api/api/plugins/k6-app/resources/logs/...{test_run_id="<id>"}X-K6TestRun-Idrun.createdrun.ended/tmp/run_<id>_logs.jsonStep 8: (If asked) edit the script safely
步骤8:(若用户要求)安全编辑脚本
Use the full safe-edit recipe in §5 (GET → backup → edit → → 1-iter smoke → PUT with → sha256 verify).
k6-managek6 inspectContent-Type: application/octet-streamWhen the edit involves thresholds, also read "Threshold semantics" below for the zero-observation trap, the cloud delay, and operator support (/ work despite docs).
abortOnFail==!=使用第5节中的完整安全编辑流程(GET → 备份 → 编辑 → → 单次迭代冒烟测试 → 以为请求头执行PUT → sha256校验)。
k6-managek6 inspectContent-Type: application/octet-stream当编辑涉及阈值时,请同时阅读下文的“阈值语义”部分,了解零观测陷阱、云端延迟以及运算符支持(/可正常使用,尽管文档中未提及)。
abortOnFail==!=Step 9: Report
步骤9:生成报告
Pick a template based on the question shape.
For single-run investigations ("what's going on with run X"):
Test: <name> (id <test_id>)
Run: <run_id> @ <created> → <ended>, load_zone=<zone>, result=<result>
Logs (<n> streams, <m> lines):
- <stream summary>
Metrics (key indicators):
- <metric>: <method> = <value> (n=<count>)
...
Per-check breakdown:
- <check name>: <success_rate> (succ=<n>, fail=<n>)
...
Diagnosis: <one-paragraph>For multi-run comparisons ("what's different between passing and failing runs", "did this change cause the failures"):
Question: <one-line restatement of what the user is trying to attribute>
Run timeline (relevant window):
| Run ID | Created (UTC) | Result | exec_duration | processing_duration | k6 build | error code | key check ratios |
|---|---|---|---|---|---|---|---|
| ... | ... | passed | 60s | 195s | <build> | — | 1.0/1.0/1.0 |
| ... | ... | failed | 27s | 193s | <build> | — | 0.0/n=0/n=0 |
| ... | ... | error | 51s | 3601s aborted | <build> | 8016 | 1.0/1.0/1.0 |
Differences that matter:
- <field>: <value-in-passing> vs <value-in-failing> — <interpretation>
...
Script diff (if relevant): <bundled-script diff between a representative passing and failing run, summarised>
Diagnosis: <one-paragraph attributing the change to test-side, SUT-side, or platform-side, with the supporting evidence>The table makes side-by-side anomalies obvious (e.g. a column that's identical across passing and failing rules out that dimension as the cause; a column that flips between them is your candidate).
If the user asked for raw data dumps, also save them to and tell them the paths.
/tmp/k6inv/run<id>/根据用户的问题类型选择合适的模板。
针对单运行实例调查(“运行X发生了什么”):
测试:<名称>(ID <test_id>)
运行实例:<run_id> @ <created> → <ended>,负载区域=<zone>,结果=<result>
日志(<n>个流,<m>行):
- <流摘要>
指标(关键指标):
- <指标>: <统计方法> = <数值>(样本数=<count>)
...
逐检查详情:
- <检查名称>: <成功率>(成功=<n>,失败=<n>)
...
诊断结论:<一段文字>针对多运行实例对比(“通过和失败的运行实例有什么不同”“这次变更是否导致了失败”):
问题:<用户试图确认的问题的一行概括>
运行时间线(相关时间范围):
| 运行ID | 创建时间(UTC) | 结果 | 执行时长 | 处理时长 | k6构建版本 | 错误码 | 关键检查成功率 |
|---|---|---|---|---|---|---|---|
| ... | ... | passed | 60s | 195s | <build> | — | 1.0/1.0/1.0 |
| ... | ... | failed | 27s | 193s | <build> | — | 0.0/n=0/n=0 |
| ... | ... | error | 51s | 3601s aborted | <build> | 8016 | 1.0/1.0/1.0 |
关键差异:
- <字段>: <通过运行的数值> vs <失败运行的数值> — <解读>
...
脚本差异(若相关):<选取一个代表性的通过运行和失败运行的快照脚本差异,进行摘要>
诊断结论:<一段文字,将变更归因于测试端、被测系统端或平台端,并提供支持证据>表格可以清晰展示并排的异常情况(例如,通过和失败运行中数值完全相同的字段可排除为原因;数值在二者间切换的字段是重点排查对象)。
如果用户要求原始数据导出,请将数据保存到并告知用户路径。
/tmp/k6inv/run<id>/Threshold semantics
阈值语义
Thresholds, not calls, are what determine a run's . The behaviour has several non-obvious corners that mislead first-time investigators, so they're collected here. Step 5 ("Determine pass/fail status") and Step 8 ("edit the script safely") both depend on this section.
check()result决定运行实例的是阈值,而非调用。其行为存在一些不明显的细节,容易误导首次进行调查的人员,因此在此汇总。第5步(“判定通过/失败状态”)和第8步(“安全编辑脚本”)均依赖本节内容。
resultcheck()What result
means
resultresult
字段的含义
result | Meaning |
|---|---|
| All thresholds passed (or none defined) |
| At least one threshold failed |
| Either the script crashed before finishing (e.g. browser wouldn't launch) or k6 Cloud aborted the run platform-side. To tell which, check |
| User or system aborted the run |
check()resultcheckschecksresult | 含义 |
|---|---|
| 所有阈值均通过(或未定义任何阈值) |
| 至少有一个阈值未通过 |
| 脚本在完成前崩溃(例如,浏览器无法启动)或k6 Cloud平台端终止了运行实例。要区分这两种情况,请检查运行实例的 |
| 用户或系统终止了运行实例 |
check()resultcheckschecksresultThe "zero observations = pass" trap
“零观测数据=通过”陷阱
k6 reports a threshold as ✓ pass when the underlying metric has zero samples — even if the threshold expression would otherwise evaluate to false:
checks{check:response is 200}
✓ 'rate==1.0' rate=0.00% ← ✓ pass!?This bites when the script throws before reaching the relevant call. Force a check observation in a block to make the threshold see something:
check()catchjavascript
try {
const r = await page.goto(URL);
check(r, { "response is 200": x => x.status() === 200 });
// ... rest of iteration body
check(true, { "script completed without exception": () => true });
} catch (e) {
console.error(e);
check(null, { "script completed without exception": () => false });
} finally {
await page.close();
}Then add to thresholds. This catches both navigation failures AND later-stage exceptions.
'checks{check:script completed without exception}': ['rate==1.0']当底层指标没有样本数据时,k6会将阈值标记为✓通过——即使阈值表达式在正常情况下会评估为false:
checks{check:response is 200}
✓ 'rate==1.0' rate=0.00% ← ✓ 通过?当脚本在执行到相关调用前抛出异常时,就会出现这种情况。请在块中强制生成一个检查观测数据,让阈值能够获取到数据:
check()catchjavascript
try {
const r = await page.goto(URL);
check(r, { "response is 200": x => x.status() === 200 });
// ... 迭代体剩余部分
check(true, { "脚本无异常完成": () => true });
} catch (e) {
console.error(e);
check(null, { "脚本无异常完成": () => false });
} finally {
await page.close();
}然后在阈值中添加。这样可以同时捕获导航失败和后续阶段的异常。
'checks{check:脚本无异常完成}': ['rate==1.0']abortOnFail
cloud delay
abortOnFailabortOnFail
云端延迟
abortOnFailWhen k6 runs in the cloud, thresholds are evaluated every 60 seconds. Thefeature may be delayed by up to 60 seconds.abortOnFail
For runs shorter than 60 s, may not fire before iterations complete naturally. The threshold is still evaluated at end-of-run and flips to — abort just doesn't save execution time.
abortOnFailresultfailed当k6在云端运行时,阈值每60秒评估一次。功能可能会延迟最多60秒触发。abortOnFail
对于时长不足60秒的运行实例,可能在迭代自然完成前无法触发。阈值仍会在运行结束时评估,会切换为——只是终止操作无法节省执行时间。
abortOnFailresultfailedOperators
运算符
Docs show , , , . and also work even though they aren't in the docs. For metrics (value 0.00–1.00), means "every observation was non-zero" and means "all observations were zero."
<><=>===!=raterate==1.0rate==0文档中展示了、、、。和也可正常使用,尽管文档中未提及。对于比率指标(值为0.00–1.00),表示“所有观测数据均为非零”,表示“所有观测数据均为零”。
<><=>===!=rate==1.0rate==0Workflow-specific gotchas
工作流专属陷阱
For the canonical gotcha list (auth expiry, doubled , 415 on script PUT, Loki missing , script PUT not bumping , not following ), see §7. The entries below are specific to this investigation workflow:
cloud/cloud/X-K6TestRun-Idupdatedgcx k6 runs list --limit 0@nextLinkk6-manage| Symptom | Cause | Fix |
|---|---|---|
| "Latest run was 6 months ago" but schedule says daily | You didn't paginate | Use the |
| "Last 7 days" report contains only old runs | Filtered by row count, not date | Re-filter by |
| Threshold reports ✓ pass but checks fail | Zero check observations; iteration aborted before | See "Threshold semantics" above |
| Likely a platform abort (e.g. | Check |
| Investigating a past run by reading the current load-test script | Script may have been edited since the run executed — what you're reading isn't what ran | GET the run's bundled script via the per-run endpoint ( |
| Just overwrote the user's script | Invoked | Restore from the backup taken in Step 2. To learn URLs without writing, use |
CLI | Overrides scenario block entirely | Edit |
关于标准陷阱列表(认证过期、重复的、脚本PUT请求返回415、Loki请求缺少、脚本PUT未更新字段、不跟进),请查看第7节。以下是本调查工作流特有的陷阱:
cloud/cloud/X-K6TestRun-Idupdatedgcx k6 runs list --limit 0@nextLinkk6-manage| 症状 | 原因 | 解决方法 |
|---|---|---|
| “最新运行是6个月前”但定时任务设置为每日执行 | 未对 | 使用 |
| “最近7天”报告仅包含旧运行实例 | 按行数过滤而非按日期过滤 | 使用 |
| 阈值显示✓通过但检查失败 | 无检查观测数据;迭代在执行 | 查看上文的“阈值语义”部分 |
| 可能是平台端终止(例如, | 检查运行实例的 |
| 通过读取当前负载测试脚本分析过去的运行实例 | 脚本可能在运行实例执行后被编辑——你读取的并非实际运行的脚本 | 通过运行实例专属端点获取该运行的快照脚本( |
| 刚刚覆盖了用户的脚本 | 调用 | 从步骤2中创建的备份恢复脚本。若要在不写入的情况下了解URL,请在任何非变更命令后添加 |
CLI参数 | 完全覆盖了场景配置块 | 使用sed在文件中编辑 |
Reference
参考资料
- — a synthetic investigation with realistic findings, useful as a template for the Step 9 report.
references/worked-example.md
- — 一个带有真实调查结果的模拟案例,可作为步骤9报告的模板。
references/worked-example.md