Magnitude:基于AI的Web自动化测试框架
一、前言
- 随着Web应用的复杂度不断提升,传统的自动化测试工具在元素定位、用例维护、适应UI变化等方面逐渐暴露出局限性。
- Magnitude,作为一款开源、AI原生的Web自动化测试框架,它通过视觉AI和自然语言驱动的测试用例,极大地提升了测试的智能化和易用性。
二、框架原理与核心优势
2.1 Magnitude的工作机制
Magnitude的核心理念是“AI驱动的端到端测试”。它通过两类AI模型协同工作:
- Planner(规划者):多模态大模型(如Gemini、Claude、OpenAI等),负责理解测试意图、规划测试步骤、处理复杂推理。
- Executor(执行者):高效视觉模型(如Moondream),负责像人类一样“看见”页面并进行精准的UI操作。
测试用例以自然语言描述,AI代理根据描述自动识别页面元素、执行操作、校验结果。即使UI发生变化,AI也能自适应,极大降低了用例维护成本。
2.2 主要优势
- 自然语言驱动:用例编写无需关心元素定位细节,专注业务流程。
- 视觉感知:AI像人一样“看”页面,适应UI变化,抗脆弱性强。
- 强大推理能力:复杂业务流程、动态页面也能智能处理。
- 易于集成:支持本地和CI/CD环境,兼容主流云服务商API。
- 开源可扩展:基于TypeScript,易于二次开发和定制。
三、环境准备与安装
3.1 环境要求
- Node.js 16+
- npm/yarn/pnpm
- 具备访问外部API的网络环境
3.2 安装Magnitude
在你的Node项目根目录下执行:
npm install --save-dev magnitude-test
3.3 初始化配置
运行初始化命令:
npx magnitude init
此命令会自动创建 tests/magnitude 目录,并生成:
magnitude.config.ts:配置文件example.mag.ts:示例测试用例
四、AI模型配置
4.1 配置Planner(多模态大模型)
Magnitude支持多种主流大模型,推荐使用Google Gemini 2.5 Pro。你可以通过Google AI Studio或Vertex AI获取API Key。
- Google AI Studio:注册并获取
GOOGLE_API_KEY - Anthropic:
ANTHROPIC_API_KEY - OpenAI:
OPENAI_API_KEY
将API Key配置为环境变量,例如:
export GOOGLE_API_KEY=your_google_api_key
4.2 配置Executor(视觉模型Moondream)
Moondream是开源的高效视觉模型,支持云端和自托管。注册并获取API Key:
- Moondream官网注册
- 设置环境变量:
export MOONDREAM_API_KEY=your_moondream_api_key
4.3 配置文件详解
magnitude.config.ts 支持自定义模型、并发数、测试目录等参数。示例:
import { defineConfig } from 'magnitude-test';
export default defineConfig({
planner: {
provider: ‘google’,
model: ‘gemini-1.5-pro’,
apiKey: process.env.GOOGLE_API_KEY,
},
executor: {
provider: ‘moondream’,
apiKey: process.env.MOONDREAM_API_KEY,
},
testDir: ‘tests/magnitude’,
workers: 2, // 并发数
});
五、编写AI驱动的测试用例
5.1 基本结构
Magnitude用例以TypeScript编写,核心API为 test 和 ai 对象。示例:
import { test } from 'magnitude-test';
test(‘用户可以登录并创建公司’, async ({ ai }) => {
await ai.step(‘登录到应用’, {
data: { username: ‘test-user@magnitude.run’, password: ‘test’ }
});
await ai.check(‘可以看到仪表盘’);
await ai.step(‘创建新公司’, { data: ‘随意填写前两个字段,其余用默认值’ });
await ai.check(‘公司添加成功’);
});
5.2 语义化步骤与校验
ai.step('描述操作', { data }):执行操作,data可选,支持结构化或自然语言。ai.check('描述预期结果'):断言页面状态。
5.3 复杂场景示例
test('批量添加并完成待办事项', { url: 'https://magnitodo.com' }, async ({ ai }) => {
await ai.step('创建3个待办事项', {
data: '倒垃圾, 买菜, 用Magnitude写更多测试'
});
await ai.check('页面上显示3个待办事项');
await ai.step('将每个待办事项标记为完成');
await ai.check('显示0个未完成事项');
});
5.4 数据驱动与参数化
你可以通过循环、参数化等方式批量生成用例,提升覆盖率。
六、运行与调试测试
6.1 本地运行
npx magnitude
- 自动发现
*.mag.ts测试文件 - 支持
-w <workers>参数并发执行
6.2 结果输出
- 控制台输出详细步骤、AI推理过程、断言结果
- 失败时自动描述原因,便于定位问题
6.3 调试技巧
- 用例中可插入
console.log或debugger - 通过调整AI模型参数提升准确率
七、集成CI/CD流水线
7.1 GitHub Actions集成示例
在 .github/workflows/ci.yml 添加:
name: Magnitude Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
- run: npm ci
- run: npx magnitude
env:
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
MOONDREAM_API_KEY: ${{ secrets.MOONDREAM_API_KEY }}
7.2 其他CI平台
只需保证环境变量和Node环境即可,兼容Jenkins、GitLab CI等主流平台。
八、最佳实践与常见问题
8.1 最佳实践
- 用例描述清晰:用自然语言准确描述操作和预期,避免歧义。
- 分步校验:每个关键步骤后都加
ai.check,便于定位问题。 - 数据隔离:测试数据应独立,避免用例间相互影响。
- 定期维护:随着业务变化,及时更新用例描述。
8.2 常见问题与解答
Q1:AI模型调用慢怎么办?
- 优先选择本地或区域节点API
- 合理设置并发数
- 仅在关键路径用AI,其他用传统断言
Q2:UI大幅变更后用例失效?
- Magnitude的视觉AI具备较强自适应能力
- 若AI识别失败,优化用例描述或补充截图/上下文
Q3:如何自定义AI模型?
- 在
magnitude.config.ts指定自定义provider和API Key - 支持OpenAI兼容API、Anthropic、AWS Bedrock等
Q4:如何与传统测试框架集成?
- Magnitude可与Jest、Mocha等并行运行
- 可通过API或命令行集成到现有测试流程
九、总结
Magnitude作为AI原生的Web自动化测试框架,极大简化了用例编写和维护流程,提升了测试的智能化和鲁棒性。它适合追求高效、低维护成本的团队,尤其适用于UI频繁变动、业务复杂的现代Web应用。


