
这次我们来看一个非常实用的自动化组合Pytest Skills MCP配合 AI Agent 来完成 WEB 自动化测试。这个组合的核心思路不复杂Pytest 负责测试用例的结构、断言和报告MCP 把浏览器操作、页面元素读取、测试执行能力封装成工具接口让 AI 能直接调用Skills 则把重复性的提示词和操作经验固化下来避免每次让 AI 从零开始。简单说AI 不再只是帮你写代码而是能直接驱动浏览器、执行测试、读取结果并给出修复建议。这套链路对熟悉 Pytest 但想接入 AI 的测试工程师或者已经在用 AI 编程工具但觉得“生成代码容易跑通测试很难”的人来说值得花时间研究。本文会从环境准备、安装部署、功能验证、接口调用、批量任务、问题排查这几个角度展开全程只讲能落地的操作。1. 核心能力速览能力项说明组合定位Pytest 负责测试框架能力MCP 负责 AI 工具调用Skills 负责经验固化主要功能AI 辅助生成测试用例、浏览器自动化操作、页面状态读取、测试执行与结果反馈支持语言以 Python 为主Pytest 生态天然支持浏览器支持可通过 Playwright MCP Server 接入浏览器操作能力AI Agent 接入可接入支持 MCP 协议的客户端具体以客户端文档为准启动方式命令行启动 PytestMCP Server 按客户端配置启动是否支持 APIMCP 协议本身支持 stdio 和 HTTP 两种传输方式是否支持批量任务可通过 Pytest 参数化、循环调用和 CI 集成实现显存占用不涉及 GPU 推理CPU 和内存即可运行适合场景WEB 自动化测试、回归测试、AI 辅助用例生成、测试数据准备这套组合最大的价值是把 AI 的能力从“问答”扩展到了“操作”。AI 能看到页面、能点击按钮、能填写表单、能读取断言结果而不是只给出“你应该怎么写”的建议。2. 适用场景与使用边界2.1 适合谁用有 Pytest 基础想引入 AI 辅助编写和维护 WEB 自动化用例的测试开发。在使用 Cursor、Claude Desktop 或其他 MCP 客户端想给 AI 加上浏览器操作能力的开发者。需要在本地快速验证页面功能、拉取页面数据、做回归测试的技术人员。2.2 能解决什么问题测试用例编写效率AI 可以直接访问页面根据实际 DOM 结构生成选择器和断言而不是凭空生成一堆猜出来的 XPath。用例维护成本页面结构变化后AI 能根据报错信息重新读取页面自动修正选择器。结果反馈闭环测试失败后AI 能读取异常日志和页面截图定位问题原因。测试数据准备通过浏览器操作自动完成登录、表单填写、数据创建等前置步骤。2.3 不适合什么场景需要 7x24 小时大规模并发压测的场景不是这个组合的重点压测应该交给 JMeter 或 Locust 这类专业工具。对响应时间要求极高的线上冒烟测试也不建议让 AI Agent 参与每一步决策应该用固定的自动化脚本直连执行。生产环境操作务必谨慎AI 驱动浏览器执行操作前必须经过充分验证。2.4 合规与安全边界使用浏览器自动化和 AI 辅助测试时必须注意只在自己有权限的测试环境、测试账号上执行操作。不采集、不保存页面上的非公开敏感数据。不利用自动化绕过登录验证、验证码、风控策略。涉及第三方系统的自动化测试需要确认是否有接口授权或测试许可。AI 生成的代码在运行前要做人工审查避免误操作。3. 环境准备与前置条件下面给出一套通用环境清单具体版本以你本机和项目实际情况为准。3.1 基础环境依赖项建议要求操作系统Windows 10/11、macOS、Linux 均可Python3.9 及以上建议 3.10 或 3.11包管理工具pip 或 uv建议使用 venv 创建虚拟环境Node.js如果用到 Playwright 相关工具安装 Node.js 16浏览器Chrome 或 Edge用于 Playwright 驱动AI 客户端支持 MCP 协议的客户端例如 Claude Desktop、Cursor 等3.2 Python 依赖创建虚拟环境并安装 Pytest 和 Playwrightpython -m venv .venv source .venv/bin/activate # Windows 下使用 .venv\Scripts\activate pip install pytest playwright如果确认使用 Playwright MCP Server还需要安装对应的服务端依赖。具体包名以你选择的 MCP Server 项目为准常见的是playwright/mcpnpm 包或对应的 Python 实现。3.3 浏览器驱动Playwright 需要单独安装浏览器内核playwright install chromium安装完成后可以用下面这段代码验证浏览器能否被驱动from playwright.sync_api import sync_playwright with sync_playwright() as p: browser p.chromium.launch(headlessTrue) page browser.new_page() page.goto(https://example.com) print(page.title()) browser.close()这段代码能正常输出Example Domain说明 Playwright 环境可用。如果你的网络环境访问 example.com 受限可以换成自己本地的测试页面地址。3.4 MCP 客户端准备不同的 AI 客户端对 MCP Server 的配置方式不同。常见的有 stdio 启动和 HTTP 启动两种模式。stdio 模式适合本地命令行工具HTTP 模式适合远程服务或局域网访问。你需要先确认自己使用的客户端支持哪种模式再按对应文档写入配置文件。4. 安装部署与启动方式4.1 创建项目结构建议按下面的目录组织工程web_auto_test/ ├── .venv/ # 虚拟环境 ├── config/ # 配置文件 │ └── mcp_config.json # MCP Server 配置 ├── tests/ # Pytest 用例目录 │ ├── conftest.py │ └── test_demo.py ├── pages/ # 页面对象封装 ├── skills/ # Agent Skills 定义 ├── reports/ # 测试报告输出 └── requirements.txt4.2 MCP Server 配置示例下面是一份通用的 MCP 配置模板具体字段名需要按你使用的客户端来调整。示例假设使用的是支持mcpServers配置的客户端{ mcpServers: { playwright: { command: npx, args: [playwright/mcplatest], env: { BROWSER: chromium } } } }如果你使用的是 Python 实现的 MCP Server命令字段需要改成对应的启动命令。这里不写死任何项目名你需要根据实际选择的 MCP Server 替换command和args部分。4.3 启动 MCP Serverstdio 模式下启动操作由 AI 客户端自动完成。你只需要在客户端里启用对应的 MCP Server 配置然后向 AI 发送一条与浏览器操作相关的指令客户端就会自动拉起 Server。如果你想手动验证 MCP Server 是否正常工作可以查看你的 MCP Server 是否支持独立命令行启动。如果支持一般类似npx playwright/mcplatest --port 8931这里的端口号只是示例实际端口以你使用的服务为准。启动成功后服务会等待客户端连接。4.4 启动 Pytest 用例常规执行方式pytest tests/ -v --htmlreports/report.html如果你安装了 pytest-html 插件上面的--html参数才有效。没有安装插件时先运行pip install pytest-html5. 功能测试与效果验证5.1 验证 Pytest 基础能力先写一个最小用例确保 Pytest 能正常运行def test_example(): assert 1 1 2执行pytest tests/test_demo.py -v预期输出中能看到PASSED。这个步骤是在确认基础测试链路没有断。5.2 验证 AI 能驱动浏览器在支持 MCP 的 AI 客户端里向 AI 发送一条指令打开 https://example.com告诉我页面标题和当前页面的主要文本内容。如果 MCP Server 配置正确AI 会调用浏览器工具打开页面并返回标题和正文摘要。判断标准AI 返回了页面内容而不是说自己无法执行。客户端日志中能看到 MCP 工具的调用记录。执行过程中可以观察到浏览器窗口弹出或无头浏览器日志输出。如果 AI 无法完成操作优先检查 MCP Server 是否启动、配置中的命令路径是否正确、浏览器内核是否安装完整。5.3 验证 AI 能执行 Pytest 用例创建一个真实的 Web 自动化用例。以 Playwright 为例import re from playwright.sync_api import Page, expect def test_page_titles(page: Page): page.goto(https://example.com) expect(page).to_have_title(re.compile(Example))这里的page参数来自 Pytest 插件pytest-playwright。需要安装pip install pytest-playwright运行上面的用例后再让 AI 根据测试失败信息修改代码。你可以这样提问刚才的测试用例失败了报错信息如下粘贴报错 请读取当前页面结构帮我修正选择器和断言。AI 会重新打开页面、检查 DOM、给出修正后的代码。这个闭环就是 Pytest MCP 的核心价值AI 能看到实际页面而不是凭空生成代码。5.4 验证 Skills 技能复用Skills 的本质是把一段反复使用的操作流程固化成可复用能力。比如“登录系统”这个操作如果让 AI 每次现学既慢又容易出错。可以把它做成一个 Skill。Skill 的存储形式通常是目录加描述文件skills/ └── login/ ├── SKILL.md # 技能描述说明适用场景 └── script.py # 登录操作的可执行脚本SKILL.md里写清楚这个技能用来做什么。前置条件是什么比如需要测试账号。调用方式是什么参数怎么传。你可以要求 AI Agent 在后续测试中始终调用这个 Skill 来完成登录操作。这样测试流程的稳定性和复用性都会提高。5.5 验证批量任务能力Pytest 本身支持参数化可以用来构造批量测试数据import pytest pytest.mark.parametrize(keyword, [pytest, mcp, playwright]) def test_search(page: Page, keyword: str): page.goto(https://example.com/search) page.fill(input[nameq], keyword) page.press(input[nameq], Enter) assert page.locator(.result).count() 0执行后Pytest 会自动生成三条独立的测试记录。配合pytest-xdist或 CI 管道可以把批量测试扩展到多进程执行。批量任务的关键用例之间要相互独立不共享状态。测试数据尽量通过参数传入不要硬编码在用例里。失败用例要能单独重跑。6. 接口 API 与批量任务6.1 MCP 协议与接口能力MCP 本身不是某个具体项目的 API而是一套协议。AI Agent 通过 MCP 客户端与 Server 通信Server 提供tools、resources、prompts三类能力。tools可执行的浏览器操作、测试命令。resources可读取的页面状态、DOM 内容、测试报告。prompts可复用的提示词模板对应 Skill 能力。如果你需要把 MCP Server 暴露给其他程序调用可以选择 HTTP 传输模式的 Server。此时可以像调用普通 REST 接口一样发送请求但请求格式要遵循 MCP 协议规范。6.2 通用 HTTP 调用示例下面给出一个通用的 HTTP 请求模板实际接口路径、请求体字段以你使用的 MCP Server 文档为准import requests url http://127.0.0.1:8931/mcp # 端口仅为示例 payload { jsonrpc: 2.0, id: 1, method: tools/call, params: { name: browser_navigate, arguments: { url: https://example.com } } } response requests.post(url, jsonpayload, timeout30) print(response.json())如果返回结果中包含result字段说明 MCP Server 正常响应。不同 Server 支持的tools名称不一致可以先调用tools/list方法查看可用工具列表。6.3 批量任务的队列设计批量测试任务建议按下面的思路组织# 生成测试数据 python scripts/generate_test_data.py --num 100 # 执行全部用例 pytest tests/ -v --workers 4 --htmlreports/report.html # 失败用例单独重跑 pytest tests/ -v --lf --htmlreports/report_retry.html--workers需要安装 pytest-xdist 才能使用pip install pytest-xdist--lf是 pytest 内置参数表示只重新运行上次失败的用例。6.4 失败重试策略在 Pytest 中可以通过 pytest-rerunfailures 实现失败重跑pip install pytest-rerunfailures用法pytest tests/ -v --reruns 2 --reruns-delay 1重试适合解决浏览器偶发超时、元素加载慢等问题。但要注意如果断言逻辑本身有 bug重试多少次都无法解决需要人工介入。7. 资源占用与性能观察7.1 观察目标MCP Server 进程的 CPU 和内存占用。浏览器实例数量避免并行执行时打开过多浏览器导致内存不足。Pytest 用例执行耗时是否有明显变慢的用例。MCP 请求的超时和失败比例。7.2 常用命令Windows 下查看 MCP 相关进程tasklist | findstr node tasklist | findstr pythonLinux / macOS 下ps aux | grep -E playwright|mcp|chromium | grep -v grep7.3 性能影响因素页面加载速度网络请求、静态资源数量都会影响用例耗时。无头模式与有头模式无头模式省资源但排查问题时建议用有头模式看浏览器实际行为。并行数量并行数过高会导致浏览器进程抢占资源反而更慢。截图和视频录制每步都截图会显著增加磁盘和内存占用建议只在失败时截图。MCP 请求大小如果 AI 频繁读取整个页面 DOM上下文传输会很大建议只抓取关键节点。7.4 降低资源占用的做法# 只截取失败截图 from pathlib import Path def on_failure(request): pass # conftest.py 中配置失败截图 def pytest_runtest_makereport(item, call): if call.when call and call.excinfo is not None: page item.funcargs.get(page) if page: screenshot_dir Path(reports/screenshots) screenshot_dir.mkdir(parentsTrue, exist_okTrue) page.screenshot(pathfreports/screenshots/{item.name}.png)8. 常见问题与排查方法问题现象可能原因排查方式解决方案MCP 工具注册不上客户端配置的服务名或命令路径错误查看客户端日志中的 MCP 连接记录按客户端文档重新配置 mcpServers浏览器打不开Playwright 浏览器内核未安装执行playwright install chromium安装对应浏览器内核Pytest 收集不到用例文件名或目录不符合规则查看pytest --collect-only输出将文件命名为 test_*.py或创建 tests 目录AI 生成的代码无法运行生成的是旧版 Selenium 语法把报错信息返回给 AI要求基于 Playwright 重写在提示词中明确指定技术栈MCP 请求超时页面加载慢或 Server 处理时间过长检查页面网络请求耗时增加 MCP 请求超时时间或改用 headless 模式端口被占用之前启动的 Server 进程未退出查看端口占用进程换端口或杀掉残留进程批量任务执行到一半失败用例之间存在状态依赖查看失败用例的上下文拆分用例确保相互独立中文乱码终端编码问题执行chcp 65001统一使用 UTF-8 编码AI 无法读取页面元素页面使用 iframe 或 Shadow DOM让 AI 先打印页面框架结构切换到对应 frame或使用 Playwright 的 shadow 选择器8.1 最值得先排查的一类问题MCP 相关配置问题占了大多数。建议第一次接入时不要一上来就配置复杂的多 Server 环境先把一个最简单的 MCP Server 跑通再逐步增加技能和自动化用例。确认链路通的标准是AI 能真正打开一个页面而不是只给你一段代码。9. 最佳实践与使用建议9.1 先建立最小闭环第一次尝试时不要直接上手复杂的业务流程测试。先跑通三件事Pytest 能执行用例。MCP Server 能被 AI 客户端连接。AI 能驱动浏览器并返回执行结果。这三步通了后面的流程设计才有意义。9.2 让 AI 只做擅长的事AI 在 WEB 自动化测试中适合做根据页面结构生成选择器和断言。根据失败日志定位问题。批量生成测试数据的脚本。整理测试报告。AI 不适合做在没人审查的情况下直接操作生产环境。处理复杂的业务规则判断尤其是涉及金额、权限的部分。作为唯一的测试结果裁决者最终判断必须看人工复核。9.3 把经验沉淀到 Skills 里建议按照测试流程拆分 Skills登录技能统一的登录操作。数据准备技能构造测试账号、测试数据。页面检查技能检查某个核心模块是否正常。报告生成技能汇总测试结果并输出 Markdown 报告。这样做的好处是后续再让 AI 跑新的测试用例时不再需要重复解释业务流程直接调用对应 Skill 即可。调用链路会更短出错的概率也明显降低。9.4 日志和故障恢复批量任务必须加日志。推荐在conftest.py里做这些事记录每条用例的开始时间、结束时间、结果。失败时截图并保存页面 HTML。将 MCP Server 的调用日志单独保存。重试逻辑只在确认网络抖动或元素定位偶发失败时开启避免把真正的 bug 掩盖掉。9.5 合规提醒使用 AI Agent 驱动浏览器做自动化要注意登录态和 Cookie 属于敏感信息不要写死在代码或提示词里使用环境变量注入。不对未授权系统做自动遍历、批量拉取数据。涉及用户个人信息、支付页面等场景必须限制自动化操作范围只做白名单内的验证步骤。自动生成的测试代码发布前要人工 review尤其是删除类、提交类操作。10. 总结与下一步这套 Pytest Skills MCP 的自动化组合最值得尝试的点是它把 AI 从“代码生成器”变成了“能动手的执行者”。AI 可以直接操作浏览器、读取页面反馈、修改用例、跑测试、给结论这比单纯的提示词工程更贴近实际测试工作流。第一次运行建议先验证下面三个能力MCP Server 能否被 AI 客户端正常调用。AI 能否根据页面实际 DOM 生成可运行的 Playwright 用例。Pytest 失败用例能否通过 AI 读取页面状态自动定位原因。最容易踩的坑集中在 MCP Server 配置和浏览器驱动安装两部分。建议先本地把最小链路跑通再逐步加批量任务和 Skills。后续可以继续扩展的方向包括把整套流程接入 CI 管道实现定时回归、结合已有的测试平台统一管理用例、将 Skills 按业务域拆细形成团队共享的测试资产。这套链路的上限不是工具本身而是你能沉淀出多少可靠的自动化流程。