智能测试从哪学起:一条斜杠链路的课程表

简介: 本专栏聚焦功能测试自动化落地难题,直击“脚本易破、用例分散、任务脱节”三大痛点。以禅道为协同中枢,构建从本地用例(`AUTO_SCOPE`驱动)、API/界面脚本生成与自愈、到任务编排与度量分析的端到端链路,强调“覆盖率100%≠全绿,而是该有脚本齐备”,拒绝补人式维护,真正实现研发自主闭环验证。

功能测试想自己把自动化跑起来,脚本会一点、页面一改就全红,覆盖率数字有了却说不清有没有拦住问题——三件事常常同时存在。再往下,用例在禅道里,脚本在另一套仓库里,任务又在第三个平台上。改一处,另外两处不知道。

这个专栏不教第二套框架,也不把「再招两个人把回归加满」当成答案。它讲一条可以跟着做完的链路:先有工作区,再写本地用例,按用例决定写接口脚本还是界面脚本,该有的脚本齐了才允许挂测试任务,任务只负责把已经生成的脚本编成一组跑完,收成一份报告。跑完之后如果要看「拦得住、稳不稳、跑多久、场景齐不齐」,再单独看四项度量。度量不回头改「能不能挂任务」。

命令在 Cursor、Claw 或 VS Code 里敲。点名了哪条命令,就只做那一件事。没点名,就按你仓库里缺的那一层送去下一跳,不会一次把用例、脚本、任务全写出来。文件放在哪个目录、斜杠从哪里出来,第 15 篇单独讲。

先记住这条顺序

没有 autotest/  →  /autotest-init
路径旧了        →  /autotest-update
                  ↓
本地用例        →  /autotest-testcase(--sync 才交到禅道、Jira 或其它系统)
                  ↓
AUTO_SCOPE
  api           →  /autotest-api          生成 → 执行 → 自愈最多 3 轮
  ui / api+ui   →  /autotest-ui-web       先确认计划,再生成 → 执行
                  已有脚本红了 → /autotest-ui-heal
  none          →  结束,不挂任务
                  ↓
覆盖率 100%     范围内该有脚本的都有了,并且已经同步出去
                  ↓
本地任务        →  查询 / 新建 / 追加
                  ↓
批量执行        →  /autotest-task-execute   一份组合报告
                  ↓
四项度量(可选)→  /autotest-metrics            不改变上面的门禁

api+ui 要接口脚本和界面脚本两边都齐,这条用例才算覆盖完成。none 表示这次不需要自动化,写完用例就停,不往任务上挂。

查任务随时可以。/autotest-task-query 只读本地列表,不建、不跑、不改脚本。

五个词,后面每篇都会用

词 在这条链路里指什么
工作区 仓库里的 autotest/。用例、脚本、任务都落在这里,不散落在聊天记录里
AUTO_SCOPE 一条用例要不要自动化、自动化沉在哪一面:api / ui / api+ui / none
覆盖率 100% 分母是需要自动化的用例。该有的脚本都在,才允许挂任务。不是「全部跑绿」,也不是代码行覆盖率
自愈 只改已经生成的测试脚本。接口脚本在 autotest/api/,界面脚本在 autotest/e2e/tests/。前端工程和后端工程不动
测试任务 本地列表 autotest/tasks/ 里的一条。它点名若干已经生成的脚本,建完不自动开跑

再补三条边界,避免后面学串:

  1. 同步是交出去。 --sync 把本地用例推到禅道、Jira 或你点名的系统。不是从线上把用例拉回来当真源。
  2. 产品错了就记下来。 断言和契约一致、实现不对,记到用例的 bug 上,停止把这条愈绿。不放宽断言换一个绿勾。
  3. 执行任务的时候不修脚本。 自愈发生在生成阶段(接口最多 3 轮,界面在生成执行时就地修)。已经红着的界面脚本走专项自愈。批量执行只跑、只记、只出报告。

课程表

算上你正在看的这一篇,一共 16 篇。第 1 到第 14 篇顺着流程图走,每个 Skill 单独一节。菱形判定没有自己的命令,写进它所属的那一节,不另开一篇去讲第二套流程。第 15 篇不新增命令,只讲这些 Skill 在 Claw 和 VS Code 里怎么放、怎么叫。

篇 层 命令 这一篇你带走什么
0 — (本篇) 顺序、五个词、从哪一篇进入
1 开篇 无 为什么按项目加人的测试跟不上现在的变更节奏
2 L0 入口 autotest 没点名命令时,只被送到下一跳
3 L1 工作区 /autotest-init 建出 autotest/ 和 registry.yaml
4 L1 工作区 /autotest-update 只刷新前后端路径
5 L2 用例 /autotest-testcase 本地用例、AUTO_SCOPE、--sync
6 L3 脚本 /autotest-api 接口脚本的生成、执行、分类、最多 3 轮自愈
7 L3 脚本 /autotest-ui-web 先看页面、确认计划,再生成界面脚本
8 L3 自愈 /autotest-ui-heal 已经红了的界面脚本,先分类再改
9 L4 门禁 无单独命令 什么叫覆盖率 100%,为什么通过率不挡挂任务
10 L5 任务 /autotest-task-query 只看本地任务列表
11 L5 任务 /autotest-task-create 把多个已生成脚本收成一条任务
12 L5 任务 /autotest-task-attach 往已有任务追加脚本,不删已经列入的
13 L6 执行 /autotest-task-execute 按任务批量跑,写一份组合报告
14 度量 /autotest-metrics 四项指标,以及它们为什么不能代替门禁
15 宿主 无新命令 同一份 Skill 在 Claw 里怎么用,在 VS Code 里怎么加

界面脚本的 Playwright 写法(页面对象、定位、报告)放在第 7 篇里讲。它是 /autotest-ui-web 的生成细则,不单独占一条斜杠命令,也不另开一条链路。


第 1 篇 · 为什么要先把测试收成一条链路

没有命令。先把立场说清楚,后面才不会把每个 Skill 学成孤立的脚本生成器。

你会看到三笔账:时间账(回归越跑越长)、信任账(绿了仍不放心)、记忆账(缺陷关了,用例和脚本没有一起补上)。AI 把开发吞吐抬高之后,按项目加人、靠专人跟着改脚本,这三笔账会一起变贵。

学完能回答:研发可以自己把交付所需的测试执行跑完;测开要做的是把方法收成命令、门禁和边界。功能测试没有因此消失。这一篇不宣布测试失业,也不开始建目录。

第 2 篇 · 入口路由 autotest

对话里只说「给这个仓库补上自动测试」,没有点名 /autotest-init 或别的命令时,走这一篇。

它做的唯一事情是分流:没有工作区就去 init;路径已经对不上就去 update;还没有用例就去 testcase;看 AUTO_SCOPE 决定去接口还是界面;脚本已经红了并且人要修,就去 ui-heal,不重新生成一遍;要看任务就只查询;明确说要跑,才去执行;要看四项数字,才去度量。

你已经把命令打全的时候,不经过这篇。点名了哪条,就做哪条。

第 3 篇 · /autotest-init

仓库里还没有 autotest/registry.yaml。这一篇只创建落点:cases/、api/、e2e/、tasks/、sync/,再加上一份 registry,记下能找到的前端目录和后端目录。找不到就留空,并在对话里说明,不编造路径。

目录已经在,命令会停。它不刷新路径,不写用例,不建任务。已有资产被覆盖,是这一篇要防的事。

第 4 篇 · /autotest-update

前后端目录挪了,registry 里的路径在仓库中已经不存在。这一篇重新扫描,只改 registry 的前端和后端字段,并列出删掉的、新写入的、没变的路径。

用例、接口脚本、界面脚本、任务列表保持原样。没有 registry 时它会停,改走第 3 篇。

第 5 篇 · /autotest-testcase

工作区就绪,这次变更还没有本地用例。用例写在 autotest/cases/,每条带上 auto_scope 和 scenario。

auto_scope 四选一:api、ui、api+ui、none。scenario 四选一:normal(正常)、boundary(边界)、concurrency(并发)、consistency(一致)。脚本和任务都等这一步有了结果再分流。none 写完即结束。

加上 --sync,才把本地用例交到禅道、Jira 或其它系统,并留下 autotest/sync/manifest.yaml。不加这个参数,用例只留在本地。这一篇不生成脚本,不建任务,也不去扫线上已有用例。

第 6 篇 · /autotest-api

用例的 auto_scope 是 api 或 api+ui。按用例在 autotest/api/ 生成脚本,执行,失败先分类。

分类只有四种:contract(路径、字段和契约不符)、assertion(断言写错)、data(缺数据)、product(断言与契约一致,实现不对)。前两种才改脚本再跑,最多 3 轮。data 只提示补数据。product 记 bug 并停止。同一类失败、没有新证据,剩下的轮次也不再改。

不改前端工程,不改后端工程。通过率可以汇报,不作为能不能往下走的条件。api+ui 还要等界面脚本齐了,这条用例才算覆盖完成。

第 7 篇 · /autotest-ui-web

用例的 auto_scope 是 ui 或 api+ui。顺序和接口不同:先用页面快照写出计划,并写下判断(下一步动作、控件、主路径有没有盖住、定位风险)。计划没确认,停在计划上,不生成脚本。

确认之后才按 Playwright 把脚本写到 autotest/e2e/tests/。登录、进页、准备数据分开写,断言对业务结果。失败同样先分类,再决定能不能就地改这次生成的脚本。分类是:locator、wait、assertion、data、auth、product。产品行为不对就记 bug。同一分类、没有新证据就停。

环境里有判断服务的密钥、仓库里也已经有对应客户端时,判断来源记为 jev;否则由这条命令按同一组字段填写,来源记为 agent。不编造一套不存在的接口。

第 8 篇 · /autotest-ui-heal

界面脚本已经在仓库里,而且跑红了。这一篇不新造用例,也不从零再生成一遍。找不到脚本文件就停,缺的是脚本本身时回到第 7 篇。

先写分类,分类集合与第 7 篇相同。允许改的只有 autotest/e2e/tests/ 里已经生成的脚本。product 不改断言。这一篇也不借自愈去挂任务。

和第 6 篇的差别:接口自愈嵌在生成命令里,最多 3 轮;界面如果是生成当时就失败,第 7 篇可以就地修;脚本早已生成、后来又红了,走这一篇。

第 9 篇 · 覆盖率 100%

没有单独命令。账本是 autotest/coverage.yaml。

分母:auto_scope 不是 none 的用例。api 要有接口脚本,ui 要有界面脚本,api+ui 两边都要有。分子齐了,比例才是 1。none 不进分母,也不挂任务。

挂任务还要多一个条件:用例已经同步到禅道、Jira 或其它系统。两个条件都在,才进入第 11、12 篇。缺脚本就回去补脚本,缺同步就回去 --sync。

通过率不挡这一步。发版可以另要求通过率;生成和自愈过程里会碰到真实 bug,那些红是结果,不是没做完。代码行覆盖率、第 14 篇的四项数字,都不参与这道门。

第 10 篇 · /autotest-task-query

看 autotest/tasks/ 里已经有哪些任务、每条列入了哪些脚本、有没有组合报告。给了任务编号就只看那一条。

没有任务文件时,汇报「当前没有任务」,不会因此去建工作区或新建任务。这一篇不写文件,不跑脚本。建任务之前、开跑之前,都先用它看一眼,避免同名再建一条。

第 11 篇 · /autotest-task-create

把若干已经生成的脚本收成一条本地任务,写入 autotest/tasks/<id>.yaml。脚本路径必须已经在 autotest/api/ 或 autotest/e2e/tests/,至少一条。没有现成脚本就停,先走第 6 或第 7 篇。

同名任务已经在列表里,就停,改走第 12 篇追加。建完不执行。任务是一份名单,不是开跑按钮。

第 12 篇 · /autotest-task-attach

任务已经在列表里,还有新的已生成脚本要放进去。新路径追加到名单末尾。已经在名单上的路径留着,不重复写,也不删除。

列表里没有这条任务,就停,改走第 11 篇。同样不跑脚本,不改脚本内容,不改前后端工程。

第 13 篇 · /autotest-task-execute

点名一条任务,按名单逐个跑,把每条的通过或失败收进 autotest/tasks/reports/<id>.md,任务状态写成已完成。

脚本文件缺失,记为失败,继续下一条。失败只记录:不改脚本,不进入接口自愈,也不进入界面专项自愈,不改前后端工程,不在这一步新生成脚本。要修,回到第 6 或第 8 篇,修完再决定要不要重新跑。

第 14 篇 · /autotest-metrics

任务跑完之后可选。写入 autotest/metrics.yaml,四项都要有当前值,没有数据就明确留空,并带上目标:

指标 在看什么
缺陷发现率 自动化拦住的、线上能感知的缺陷,占同期全部线上缺陷的比例
稳定性 近 30 天通过率,以及是否连续失败。低于 95% 或连续 3 次失败,这条用例在发版时暂停;95%~98% 仍可跑,只是盯着
执行效率 全量要跑多久、等待多久、环境多久能就绪
场景覆盖密度 normal / boundary / concurrency / consistency 各自齐到什么程度

脚本齐套的覆盖率单独报一行,标明它才是挂任务的门禁。这四项不否决已经挂上的任务,也不用来填「覆盖率是不是 100%」。没有缺陷账本就不编数字。不在这一篇里自愈,也不改脚本。

第 15 篇 · 在 Claw 里用 Skill,在 VS Code 里加入 Skill

前面的命令要先被宿主看见,敲出来才会进对应的 SKILL.md。这一篇不改链路顺序,不生成用例,也不跑脚本。操作步骤仍以仓库里的 .cursor/skills/autotest-*/SKILL.md 为准。换宿主时复制目录,不改里面的步骤。

三处落点:

宿主 项目里放哪 怎么调用
Cursor .cursor/skills/<name>/SKILL.md。要做成斜杠命令时,再放一份 .cursor/commands/<name>.md 聊天里输入 / 加技能名,或用 @ 把该技能附进这次对话
Claw(OpenClaw) 工作区 skills/<name>/SKILL.md。这台机器上的智能体都要用,放 ~/.openclaw/skills/<name>/ /skill <name>,或该技能注册成自己的斜杠命令。改完文件后开一轮新会话
VS Code(GitHub Copilot) .github/skills/<name>/SKILL.md。也认 .agents/skills/、.claude/skills/。只给自己用、不进仓库,放 ~/.copilot/skills/<name>/ 聊天输入框打 /,选中技能。配置入口是 Chat 里的 Configure Chat,再打开 Skills

name 用小写字母、数字和连字符,并且必须和上一级目录名一致。对不上时,VS Code 会静默不加载。

在 Claw 上,工作区的 skills/ 优先于 ~/.openclaw/skills。本专栏这些命令要显式点名,不让模型看对话自己套用,就在 frontmatter 里写 disable-model-invocation: true,同时保持 user-invocable: true,这样 /skill autotest-init 仍然可用。本地目录可以直接装进去:

openclaw skills install ./.cursor/skills/autotest-init --as autotest-init

装到当前工作区的 skills/。要给这台机器上的智能体共用,加上 --global,落到 ~/.openclaw/skills。一条命令一个目录,不要把整条链路塞进同一个 SKILL.md。

在 VS Code 里,打开聊天,输入 /skills 进入配置;也可以在 Configure Chat 的 Skills 页选 New Skill (Workspace),位置选 .github/skills/。已经有 Cursor 那份时,把 .cursor/skills/autotest-init 整目录复制到 .github/skills/autotest-init,确认里面的 name: autotest-init 和文件夹名相同。聊天里输入 /autotest-init 能看见它,才算加成功。个人技能放 ~/.copilot/skills/,不提交进仓库。

斜杠列表里没有这些命令时,先做完这一篇,再回到第 3 篇。Skill 放进去之后,判定和产物仍按第 2 到第 14 篇,不因为换了宿主就多做一步。


你从哪一篇进入

不必每次都从第 1 篇读到第 15 篇。先对一下自己卡在哪一层。

你现在的情况 从这里读 先不要跳到
还没想清楚为什么要这么拆 第 1 篇 直接生成脚本
仓库里没有 autotest/ 第 3 篇 用例和任务
前后端目录已经挪了 第 4 篇 把用例和脚本全部重写
这次变更还没有用例 第 5 篇 任务和度量
用例写了,要接口脚本 第 6 篇 用界面命令去包接口
用例写了,要界面脚本 第 7 篇 计划没确认就生成
界面脚本早先是绿的,现在红了 第 8 篇 删掉重生成当修复
脚本齐不齐、能不能挂任务 第 9 篇 用通过率或四项度量代替
只想看有哪些任务 第 10 篇 查询时顺手建一条
要把多个脚本编成一组 第 11 篇,已有同名则第 12 篇 建完就当已经跑过
要一份把这些脚本合在一起的报告 第 13 篇 边跑边改脚本
对话里没点名命令 第 2 篇 指望一次对话写完全部资产
跑完了,想看拦得住不、稳不稳 第 14 篇 用这四项去决定能不能挂任务
斜杠里没有这些命令,或要换到 Claw、VS Code 第 15 篇 还没放进宿主就从第 3 篇开始生成

零基础从第 3 篇和第 5 篇开始,先有目录和一条本地用例。已经会写 Selenium、Playwright 或接口脚本的,从你卡住的那一层接,不必把前面的命令重做一遍。用例和脚本没齐,不进入任务和度量。

这个专栏不讲什么

  • 不把通过率当成挂任务的条件。
  • 不在写用例、写脚本、建任务时去扫线上用例,再把线上的当成本地真源。
  • 不在批量执行时自愈,也不用自愈去改前端或后端工程。
  • 不把 AUTO_SCOPE=none 的用例挂进任务。
  • 不并行再讲一套「审查打分、五端矩阵、漂移阈值」当作第二条主链。那些不是这条斜杠链路的步骤。

跟做时仓库里会长出什么

走完主链,而不是只读完标题,仓库里应能指认这些文件:

autotest/
  registry.yaml                 第 3 篇创建,第 4 篇只改路径
  cases/                        第 5 篇
  sync/manifest.yaml            第 5 篇,且带了 --sync
  api/                          第 6 篇
  e2e/plans/                    第 7 篇,计划与判断
  e2e/tests/                    第 7 篇生成,第 8 篇只修已有文件
  coverage.yaml                 第 6、7 篇写入,第 9 篇解释门禁
  tasks/TASK-*.yaml             第 11、12 篇
  tasks/reports/                第 13 篇
  metrics.yaml                  第 14 篇,可选
目录
相关文章
|
1天前
|
缓存
我会用冷缓存和热缓存做两次测试
本文分享个人缓存测试方法:通过冷/热缓存对照,量化分析长上下文场景中缓存对Token消耗、首字延迟及费用的影响。强调不盲信“缓存折扣”,需控制变量(模型、提示词、上下文等)并记录完整指标,确保结论可复现、可验证。(239字)
25 1
我会用冷缓存和热缓存做两次测试
|
1天前
|
运维 Kubernetes 数据安全/隐私保护
K8s 劝退?那是你打开方式不对
本文用大白话讲透K8s核心逻辑:从“手动运维”到“声明式自治”的思维跃迁,结合Pod、Deployment、Service等概念,直击传统运维痛点。通过真实故障对比,展现K8s如何自动恢复服务——你只定义目标,它负责执行与兜底。(239字)
26 1
|
2天前
|
人工智能 自然语言处理 API
阿里云百炼Token Plan指南:介绍、费用、订阅、API Key 和 Base URL获取及使用全流程
阿里云百炼Token Plan团队版是AI大模型订阅服务,以Credits统一计费,支持Qwen、GLM、Kimi等12+主流文本与图像模型。提供团队管理后台、数据安全及OpenAI/Anthropic协议兼容接口,三步即可完成订阅与接入(选套餐→获API Key→配AI工具),适配Cursor、Qwen Code等30+智能编程与Agent工具。
|
1天前
|
人工智能 缓存 测试技术
我会怎样给一个 AI 接口做小规模压测
本文分享AI接口小规模压测的实操方法:分短/中/长三类输入,区分冷热缓存;固定模型、提示词、网络等变量;统计首字延迟、总耗时、Token、费用与失败率;最后用小流量验证迁移风险。重实践、可复现。(239字)
26 2
我会怎样给一个 AI 接口做小规模压测
|
1天前
|
人工智能 前端开发 JavaScript
第一次让 AI 写代码:实现一个待办事项清单
本文通过一个完整的待办事项清单案例,详解AI编程实战流程:从明确需求、拆解功能模块、生成代码,到本地运行、边界测试与迭代优化。强调开发者需主导目标定义、方案判断与结果验证,AI仅作高效辅助。附可运行单文件代码及提示词模板。(239字)
|
1天前
|
数据采集 安全 对象存储
OSS Bucket 权限配置清单:这些坑我都替你踩过了
OSS 权限不止一个开关。这篇先讲清阻止公共访问、Bucket Policy、RAM Policy、Bucket ACL、Object ACL 五层的生效优先级,再给出五步配置清单与三条验证命令,最后列了八条高频踩坑(Object ACL 漏查、防盗链漏裸域名、CDN 回源未透传 Referer 等)。照单走一遍,十分钟内就能把 Bucket 收到默认私有的安全水位。
|
1天前
|
弹性计算 网络协议 应用服务中间件
SSL 证书 90 天到期太频繁:三种自动续期方案横向对比
证书 90 天到期,忘了续站点就报警告。这篇把三条续期自动化路线摆在一起对比:自建服务器用 acme.sh 全自动续签、云产品上开阿里云证书托管、以及用 HTTPS 加速网关把证书交给平台。含可直接复制的 acme.sh 命令、托管的触发条件与限制、选型决策表和 8 条避坑点,读完能给自己站点定一套不会再漏的续期机制。
|
1天前
|
弹性计算
你发现了吗?阿里云服务器有的地域,右上角有个“惠”字,这个地域的云服务器更划算!
阿里云部分地域享专属优惠,右上角标“惠”字(如华北3、华北6、华南2、华中1等);华北1(青岛)公网带宽价格更低。选对地域更省钱!详情见官网及官方文档。
26 1
|
1天前
|
Linux iOS开发 Python
Python 虚拟环境到底怎么选?venv / conda / pipenv / poetry 一张对比表 + 9 个真实踩坑
venv、conda、pipenv、poetry 到底怎么选?本文用一张对比表 + 9 个真实踩坑讲清楚:什么时候 venv 就够了、什么时候必须上 poetry、conda 真正解决的是什么问题,以及虚拟环境里最常见的路径与依赖冲突该怎么排查。