




















@@ -0,0 +1,84 @@
1+import { execFileSync } from "node:child_process";
2+import fs from "node:fs";
3+import os from "node:os";
4+import path from "node:path";
5+import { describe, expect, it } from "vitest";
6+7+const SCRIPT_PATHS = [
8+"scripts/test-cli-startup-bench-budget.mjs",
9+"scripts/test-update-cli-startup-bench.mjs",
10+];
11+12+describe("CLI startup benchmark script spawners", () => {
13+it("use the active Node executable for benchmark child processes", () => {
14+for (const scriptPath of SCRIPT_PATHS) {
15+const source = fs.readFileSync(path.resolve(process.cwd(), scriptPath), "utf8");
16+17+expect(source).toContain("spawnSync(process.execPath, args");
18+expect(source).not.toContain('spawnSync("node", args');
19+}
20+});
21+22+it("does not require unrelated fixture cases for a narrowed preset", () => {
23+const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-bench-budget-test-"));
24+try {
25+const baselinePath = path.join(tmpDir, "baseline.json");
26+const reportPath = path.join(tmpDir, "current.json");
27+const makeCase = (id: string, name: string) => ({
28+ id,
29+ name,
30+samples: [],
31+summary: {
32+durationMs: { avg: 10, p50: 10, p95: 10, min: 10, max: 10 },
33+firstOutputMs: null,
34+maxRssMb: null,
35+},
36+});
37+38+fs.writeFileSync(
39+baselinePath,
40+JSON.stringify({
41+primary: { cases: [makeCase("version", "--version"), makeCase("realOnly", "real only")] },
42+}),
43+);
44+fs.writeFileSync(
45+reportPath,
46+JSON.stringify({ primary: { cases: [makeCase("version", "--version")] } }),
47+);
48+49+expect(() =>
50+execFileSync(
51+process.execPath,
52+[
53+"scripts/test-cli-startup-bench-budget.mjs",
54+"--baseline",
55+baselinePath,
56+"--report",
57+reportPath,
58+"--preset",
59+"startup",
60+],
61+{ cwd: process.cwd(), stdio: "pipe" },
62+),
63+).not.toThrow();
64+65+expect(() =>
66+execFileSync(
67+process.execPath,
68+[
69+"scripts/test-cli-startup-bench-budget.mjs",
70+"--baseline",
71+baselinePath,
72+"--report",
73+reportPath,
74+"--preset",
75+"all",
76+],
77+{ cwd: process.cwd(), stdio: "pipe" },
78+),
79+).toThrow();
80+} finally {
81+fs.rmSync(tmpDir, { recursive: true, force: true });
82+}
83+});
84+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。