整合Playwright与MCP构建自动化测试框架

Playwright是一个强大的浏览器自动化工具,支持多语言(包括Python)。MCP(Model-Controller-Presenter)是一种设计模式,常用于构建可维护的测试框架。以下是将两者结合的方法。

安装依赖

确保安装Playwright及其Python绑定:

pip install playwright
playwright install

创建项目结构

按MCP模式组织项目目录:

project/
├── models/         # 数据模型
├── controllers/    # 业务逻辑
├── presenters/     # UI交互层
├── tests/          # 测试用例
└── utils/          # 辅助工具

定义模型层

models/中封装页面元素和数据:

# models/login_model.py
class LoginModel:
    def __init__(self):
        self.username_selector = "#username"
        self.password_selector = "#password"
        self.submit_selector = "button[type='submit']"

构建控制器层

controllers/中编写核心逻辑:

# controllers/login_controller.py
from playwright.sync_api import Page

class LoginController:
    def __init__(self, page: Page):
        self.page = page

    def fill_credentials(self, username: str, password: str):
        self.page.fill(self.model.username_selector, username)
        self.page.fill(self.model.password_selector, password)

    def submit(self):
        self.page.click(self.model.submit_selector)

实现Presenter层

presenters/中处理用户交互:

# presenters/login_presenter.py
from models.login_model import LoginModel
from controllers.login_controller import LoginController

class LoginPresenter:
    def __init__(self, page):
        self.model = LoginModel()
        self.controller = LoginController(page)

    def login(self, username: str, password: str):
        self.controller.fill_credentials(username, password)
        self.controller.submit()

编写测试用例

tests/中使用Pytest框架:

# tests/test_login.py
from playwright.sync_api import sync_playwright
from presenters.login_presenter import LoginPresenter

def test_login_success():
    with sync_playwright() as p:
        browser = p.chromium.launch()
        page = browser.new_page()
        page.goto("https://example.com/login")
        
        presenter = LoginPresenter(page)
        presenter.login("admin", "password")
        
        assert page.url == "https://example.com/dashboard"
        browser.close()

添加配置管理

utils/中管理全局配置:

# utils/config.py
class Config:
    BASE_URL = "https://example.com"
    TIMEOUT = 5000

运行测试

使用Pytest执行测试:

pytest tests/ -v

关键优化点

  1. 页面对象模型:将元素定位与操作分离,提高可维护性
  2. 异常处理:在控制器层添加重试和错误捕获机制
  3. 并行测试:利用Playwright的上下文隔离特性运行并行测试
  4. 报告生成:集成Allure或Pytest-HTML生成可视化报告

该框架通过MCP模式实现关注点分离,Playwright提供底层自动化能力,适合中大型测试项目的可持续维护。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐