npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

vscode-autotest

v0.1.0

Published

AI-driven VSCode extension E2E testing framework — YAML test plans + Playwright + LLM verification

Downloads

10

Readme

VSCode AutoTest

AI 驱动的 VSCode 扩展 E2E 测试框架。

用户提供 YAML 格式的 Test Plan → 框架自动启动 VSCode → 执行操作 → 验证结果。

目标:让 Copilot CLI 直接读取 wiki 中的 Test Plan,自动完成 VSCode 扩展的端到端测试。


快速开始

# 安装依赖
npm install

# 编译
npm run build

# 验证 test plan 格式
npx autotest validate test-plans/java-maven.yaml

# 执行测试(含截图 + JSON 报告)
npx autotest run test-plans/java-maven.yaml --output results.json

# 自定义截图输出目录
npx autotest run test-plans/java-maven.yaml --output results.json --screenshots ./my-shots

前置条件

  • Node.js ≥ 18
  • JDK 已安装(测试 Java 扩展时需要)
  • vscode-java 仓库已 clone 到本地(test plan 中引用了其测试项目)

核心架构

┌─────────────────────────────────────────────────────┐
│             Test Plan (YAML / Markdown)              │
│  描述测试步骤 + 预期结果,不包含硬编码 locator        │
└──────────────────┬──────────────────────────────────┘
                   │  planParser.ts
                   ▼
┌─────────────────────────────────────────────────────┐
│              TestRunner (编排层)                      │
│  启动 VSCode → 逐步执行 → 截图 → 报告               │
│                                                     │
│  ┌──────────────────┐  ┌─────────────────────────┐  │
│  │  ActionResolver   │  │     StepVerifier        │  │
│  │  自然语言 → Driver │  │  确定性验证 + LLM 验证  │  │
│  │  (16 种 regex)    │  │  (6 种策略)             │  │
│  └────────┬─────────┘  └──────────┬──────────────┘  │
│           │                       │                  │
│           │              ┌────────┴────────┐         │
│           │              │    LLMClient    │         │
│           │              │  Azure OpenAI   │         │
│           │              │  screenshot →   │         │
│           │              │  pass/fail      │         │
│           │              └─────────────────┘         │
└───────────┼──────────────────────────────────────────┘
            ▼
┌─────────────────────────────────────────────────────┐
│           VscodeDriver (操作原语 SDK)                 │
│  基于 Playwright Electron + @vscode/test-electron    │
│  工作区隔离 · 事件驱动等待 · 进程生命周期管理          │
└──────────────────┬──────────────────────────────────┘
                   │
                   ▼
┌─────────────────────────────────────────────────────┐
│           Playwright Electron Runtime                │
│  启动 VSCode 进程,提供 Page 对象                    │
└─────────────────────────────────────────────────────┘

编写 Test Plan

基本结构

name: "我的测试"
setup:
  extension: "my-extension"
  extensionPath: "./path/to/extension"
  vscodeVersion: "stable"
  workspace: "./test-workspace"   # 相对于 test plan 文件的路径
  timeout: 60
  settings:                       # 可选:注入 VSCode settings
    editor.fontSize: 14

steps:
  - id: "step-1"
    action: "执行命令 My Extension: Hello"
    verifyNotification: "Hello World!"

路径解析workspaceextensionPath 相对于 test plan 文件所在目录解析,不依赖 CWD。

支持的 Action(自然语言 → Driver 映射)

| Action 写法 | 映射操作 | 示例 | |-------------|---------|------| | 执行命令 XXX / run command XXX | Command Palette 执行 | 执行命令 Java: Force Java Compilation | | 打开文件 XXX / open file XXX | Quick Open 打开文件(含重试) | 打开文件 Foo.java | | 点击侧边栏 XXX tab | 切换侧边栏 Tab | 点击侧边栏 Explorer tab | | 展开/点击 XXX 节点 | TreeView 操作 | 展开 APIs 节点 | | 选择 XXX 选项 | Palette 选项选择 | 选择 Full 选项 | | 等待 N 秒 / wait N seconds | 等待指定时间 | 等待 5 秒 | | saveFile / 保存文件 | Ctrl+S 保存 | saveFile | | goToLine N / 跳转到行 N | Ctrl+G 跳转行 | goToLine 15 | | goToEndOfLine / 跳转到行尾 | End 键 | goToEndOfLine | | waitForLanguageServer | 等待 LS 就绪 | waitForLanguageServer | | typeInEditor XXX | 在编辑器输入文本 | typeInEditor System.out.println() | | typeAndTriggerSnippet XXX | 输入并触发代码片段 | typeAndTriggerSnippet class | | navigateToError N | 跳转到第 N 个错误 | navigateToError 1 | | applyCodeAction XXX | 执行 Code Action | applyCodeAction Import 'ArrayList' | | triggerCompletion | 触发代码补全 | triggerCompletion | | insertLineInFile <path> <line> <text> | 磁盘修改文件 + 编辑器重载 | insertLineInFile src/Foo.java 2 import java.util.*; |

支持的验证方式

| 字段 | 类型 | 说明 | |------|------|------| | verify | string | 自然语言描述预期结果(LLM 截图验证,需配置 Azure OpenAI) | | verifyFile | object | 文件存在性 / 内容匹配 | | verifyNotification | string | 通知消息匹配 | | verifyEditor | object | 编辑器内容(检查 Monaco model + 可见 DOM) | | verifyProblems | object | Problems 面板错误/警告计数(支持 atLeast 模式 + 轮询等待) | | verifyCompletion | object | 代码补全列表验证 |


测试隔离与截图

工作区隔离

每次运行自动将 workspace 复制到固定临时目录 (autotest-workspace/),测试结束后清理。原始工作区永远不会被修改

截图策略

每个步骤自动截图,保存到 ./screenshots/(可通过 --screenshots 自定义):

| 步骤状态 | 截图文件 | |---------|---------| | ✅ pass | {stepId}_after.png | | ❌ fail / error | {stepId}_before.png + {stepId}_after.png{stepId}_error.png |

进程管理

  • 每次启动前自动清空 VSCode user-data 目录,防止旧窗口恢复
  • Ctrl+C 中断时自动关闭 VSCode 进程
  • close() 带重试机制处理 Windows 文件锁

LLM 验证(可选)

verify 字段支持自然语言描述,框架会将截图发送给 Azure OpenAI GPT-4o 进行视觉判断:

- id: "check-ls"
  action: "waitForLanguageServer"
  verify: "状态栏显示 Java 语言服务器已就绪(👍 图标)"   # ← LLM 看截图判断
  verifyProblems:                                        # ← 确定性验证照常执行
    errors: 0

配置环境变量启用:

export AZURE_OPENAI_ENDPOINT=https://<resource>.openai.azure.com/
export AZURE_OPENAI_API_KEY=<key>
export AZURE_OPENAI_DEPLOYMENT=gpt-4o        # 可选,默认 gpt-4o
  • 未配置时 verify 字段自动跳过,确定性验证不受影响
  • --no-llm 强制跳过 LLM 验证

Copilot CLI 集成

本项目提供 AGENTS.md,Copilot CLI 在此目录下可直接运行测试:

> 运行 java-maven 测试

Copilot CLI 会自动执行 npx autotest run,读取结果和截图,分析失败原因。

详见 AGENTS.md


现有 Test Plan

| 文件 | 步数 | 来源 | 场景 | 状态 | |------|------|------|------|------| | java-maven.yaml | 8 | wiki Maven | LS → 补全 → 导航 → 编辑 → 诊断 | ✅ 8/8 | | java-maven-multimodule.yaml | 5 | wiki Maven Multimodule | LS → 两模块补全 | ✅ 5/5 | | java-maven-java25.yaml | 6 | wiki Maven Java 25 | JDK 25 → LS → 补全 → 编辑 | ✅ 6/6 | | java-gradle.yaml | 7 | wiki Gradle | LS → 补全 → 导航 → 编辑 | ✅ 7/7 | | java-gradle-java25.yaml | 6 | wiki Gradle Java 25 | JDK 25 → LS → 补全 → 编辑 | ✅ 6/6 | | java-basic-editing.yaml | 8 | wiki Basic #1-5 | LS → class 骨架 → call() 方法 → 编译 | ✅ 8/8 | | java-basic-extended.yaml | 8 | wiki Basic #6-8 | 补全 → Import → Rename | ✅ 8/8 | | java-new-file-snippet.yaml | 4 | wiki Basic #9 | 创建新 Java 文件 → class 骨架 | ✅ 4/4 | | java-single-file.yaml | 6 | wiki Single file | LS → 补全 → 编辑 | ✅ 6/6 | | java-debugger.yaml | 6 | wiki Debugger | 断点 → 启动调试 → 停止 | ✅ 6/6 | | java-test-runner.yaml | 6 | wiki Test Runner | 测试面板 → 运行全部 → CodeLens | ✅ 6/6 | | java-maven-resolve-type.yaml | 10 | wiki Maven for Java | 未知类型 → Hover → Code Action | ✅ 10/10 | | java-dependency-viewer.yaml | 4 | wiki Dependency Viewer | 依赖视图 → 节点展开 | ✅ 4/4 | | java-extension-pack.yaml | 3 | wiki Extension Pack | Configure Classpath 命令 | ✅ 3/3 | | java-fresh-import.yaml | 3 | wiki Fresh Import | Spring Petclinic → LS → 补全 | 🔲 需要 clone 项目 |

Wiki 场景覆盖情况

| Wiki 场景 | 状态 | 阻碍 | |-----------|------|------| | Basic #1-5 | ✅ 已有 test plan | — | | Basic #6-8 (补全/Import/Rename) | ✅ 已有 test plan | — | | Basic #9 (New Java File snippet) | ✅ 已有 test plan | — | | Maven | ✅ 已有 test plan | — | | Maven Multimodule | ✅ 已有 test plan | — | | Gradle | ✅ 已有 test plan | — | | Maven Java 25 | ✅ 已有 test plan | — | | Gradle Java 25 | ✅ 已有 test plan | — | | Single file | ✅ 已有 test plan | — | | Single file without workspace | ❌ 未覆盖 | 需要拖拽文件(无 Driver 支持) | | Fresh import (spring-petclinic) | ✅ 已有 test plan | 需要提前 clone 项目 | | Debugger for Java | ✅ 已有 test plan | — | | Java Test Runner | ✅ 已有 test plan | — | | Maven for Java | ✅ 已有 test plan | — | | Java Dependency Viewer | ✅ 已有 test plan | — | | Java Extension Pack | ✅ 已有 test plan | webview 内部交互有限 |


项目结构

autotest/
├── src/
│   ├── drivers/
│   │   └── vscodeDriver.ts    # Playwright VSCode 操作原语 (35+ 方法)
│   ├── operators/
│   │   ├── actionResolver.ts   # 自然语言 Action → Driver 调用 (16 种 regex)
│   │   ├── stepVerifier.ts     # 确定性验证 + LLM 验证 (6 种策略)
│   │   ├── llmClient.ts        # Azure OpenAI 客户端 (截图 → pass/fail)
│   │   ├── planParser.ts       # YAML Test Plan 解析器(路径相对于 plan 文件)
│   │   └── testRunner.ts       # 编排引擎(启动 → 执行 → 截图 → 报告)
│   ├── cli/
│   │   └── index.ts            # CLI 入口 (run / validate / --no-llm)
│   ├── types.ts                # 核心类型定义
│   └── index.ts                # SDK 导出
├── test-plans/                  # YAML 测试计划
├── test-results/                # 测试输出(每个 plan 一个子目录)
│   └── <plan-name>/
│       ├── results.json
│       └── screenshots/
├── AGENTS.md                    # Copilot CLI 集成指南
├── docs/
│   ├── architecture.md          # 架构文档
│   ├── implementation-plan.md   # 实现计划
│   └── ROADMAP.md               # 路线图
└── package.json

相关文档