共计 1788 个字符,预计需要花费 5 分钟才能阅读完成。
为什么选择 Playwright
Playwright 是微软推出的现代 Web 自动化测试工具,相比传统的 Selenium 或 Puppeteer,它有三大突出优势:

- 多浏览器支持:Chromium、Firefox 和 WebKit 一套 API 搞定
- 自动等待机制:内置智能等待,减少手动添加 sleep 的烦恼
- 多上下文并行(MCP):真正实现并行测试,大幅提升执行效率
理解浏览器上下文(Context)
浏览器上下文是 Playwright 的核心概念,你可以把它想象成一个独立的浏览器会话环境:
- 每个上下文都有独立的 cookies、localStorage 和 sessionStorage
- 上下文之间完全隔离,互不影响
- 一个浏览器实例可以创建多个上下文
这就像用 Chrome 打开了多个隐身窗口,每个窗口都有自己的登录状态和历史记录。
单上下文 vs 多上下文性能对比
我们做了一个简单测试:用 100 个测试用例检查登录功能
| 模式 | 执行时间 | 内存占用 |
|---|---|---|
| 单上下文 | 78 秒 | 1.2GB |
| 多上下文(5) | 23 秒 | 1.8GB |
可以看到,合理使用多上下文能带来 3 倍以上的性能提升。
多上下文实战代码
import {chromium} from 'playwright';
async function runParallelTests() {
// 启动浏览器
const browser = await chromium.launch();
// 创建 5 个并行上下文
const contexts = await Promise.all(Array(5).fill(0).map(() => browser.newContext())
);
try {
// 在每个上下文中执行测试
await Promise.all(contexts.map(async (context, idx) => {const page = await context.newPage();
// 设置不同的用户代理便于区分
await context.setExtraHTTPHeaders({'User-Agent': `TestAgent/${idx+1}`
});
// 实际测试代码...
await page.goto('https://example.com/login');
await page.fill('#username', `user${idx}`);
await page.click('#submit');
// 断言登录成功
const title = await page.title();
if (!title.includes('Dashboard')) {throw new Error(`Context ${idx} 登录失败 `);
}
}));
} finally {
// 清理资源
await Promise.all(contexts.map(c => c.close()));
await browser.close();}
}
runParallelTests().catch(console.error);
常见问题解决方案
会话冲突问题
现象:多个上下文使用相同账号导致互踢
解决:
- 为每个上下文准备独立的测试账号
- 或使用 API 预先获取不同 token
Cookie 管理
最佳实践:
// 上下文之间共享基础 cookie
const baseCookies = [{name: 'lang', value: 'zh-CN', domain: 'example.com'}];
const context1 = await browser.newContext({cookies: baseCookies});
const context2 = await browser.newContext({cookies: baseCookies});
资源竞争
策略:
- 对共享资源 (如测试数据) 使用锁机制
- 或者确保每个上下文使用独立资源
生产环境最佳实践
- 控制并发数:根据机器配置合理设置上下文数量(通常 CPU 核数×2)
- 资源隔离:每个上下文使用独立的测试账号和数据
- 异常处理:为每个上下文添加独立的错误捕获
- 监控指标:跟踪每个上下文的执行时间和成功率
- 清理策略:测试完成后强制关闭所有上下文
进阶思考
- 如何实现动态调整并发上下文数量?
- 在多机房环境下如何保证上下文状态的同步?
- 能否利用 MCP 特性实现爬虫的分布式扩展?
希望通过这篇指南,你已经掌握了 Playwright MCP 的核心用法。记住,多上下文并行的关键是要做好隔离和资源管理。在实际项目中从小规模开始,逐步增加复杂度会更稳妥。
正文完
发表至: 技术分享
近一天内
