用途:在 Kibana 中编写、维护、调试和审查 Scout API 测试,涉及 apiTest、apiClient、requestAuth、samlAuth、apiServices 等。
主要能力与规则:API 规格文件位于 <module-root>/test/scout*/api/{tests,parallel_tests}//*.spec.ts。按模块根选择 Scout 包:src/platform/ 或 x-pack/platform/** 用 @kbn/scout;x-pack/solutions/observability/** 用 @kbn/scout-oblt;search 用 @kbn/scout-search;security 用 @kbn/scout-security。每个文件优先使用单个顶层 apiTest.describe(...),避免嵌套。用 { tag: ... } 标注套件或测试以便 CI 选择目标;API 测试当前不在运行时校验标签。测试标题中不要出现 @ 加单词字符(Playwright 会当作标签)。
导入:测试框架与标签从 @kbn/scout 导入 apiTest、tags;断言从 @kbn/scout/api 导入 expect(主入口不导出 expect);类型如 RoleApiCredentials 从 @kbn/scout 导入。若模块提供 Scout fixtures,从 <module-root>/test/scout*/api/fixtures 导入 apiTest 以获得模块扩展。apiTest 禁用浏览器 fixtures(无 page、browserAuth、pageObjects)。
认证:api/* 端点用 requestAuth 的 API key(getApiKey、getApiKeyForCustomRole);internal/* 端点用 samlAuth.asInteractiveUser(...) 的 cookie。遵循最小权限,在 beforeAll 生成并复用凭据。
请求与断言:用 apiClient 调用端点并设置正确请求头。状态变更请求通常需要 kbn-xsrf;Kibana API 建议发送 x-elastic-internal-origin: kibana;版本化公共 API 或内部 API 需带 elastic-api-version。apiClient 方法返回 { statusCode, body, headers },可用 @kbn/scout/api 的自定义匹配器 toHaveStatusCode、toHaveStatusText、toHaveHeaders,也支持标准与非对称匹配器。
apiServices:将可复用的服务端辅助逻辑放在 apiServices,用于准备/清理和验证副作用,不用于 RBAC 校验;apiServices/kbnClient 以高权限运行,不要用来验证被测端点。模块本地服务放在 <module-root>/test/scout*/api/services/ 并在 fixtures/index.ts 注册;跨模块共享服务可贡献到 Scout 包。可通过扩展 apiTest 添加自定义认证辅助或 API 服务。
并行与运行:API 测试默认按顺序执行,并行需手动隔离(spaces、索引、保存对象)。可用 --config 或 --testFiles(互斥)运行:node scripts/scout run-tests --arch stateful --domain classic --config <...> 或 --testFiles <...>。快速迭代可先 node scripts/scout start-server --arch stateful --domain classic,再直接运行 node scripts/playwright test --config <...> --project local --grep <tag>。调试用 SCOUT_LOG_LEVEL=debug。CI 仅运行 .buildkite/scout_ci_config.yml 中 plugins.enabled / packages.enabled 列出的模块,node scripts/scout generate 可注册模块。
限制:资料未提供收费、价格、平台支持范围等细节;API 测试不校验标签;并行运行需自行隔离。