Python + Playwright:如何在Docker 容器运行测试?
Python + Playwright:如何在Docker 容器运行测试?
- 前言
- 一、简介
- 二、环境准备
- 1. 安装 Docker
- Windows 用户
- macOS 用户
- Linux 用户(以 Ubuntu 为例)
- 2. 启动 browserless 服务
- 拉取 browserless 镜像
- 启动 browserless 容器
- 验证 browserless 是否启动成功
- 三、创建自动化测试项目
- 1. 创建项目目录
- 2. 新建 `requirements.txt`
- 3. 新建 `conftest.py`
- 4. 新建 `pages/baidu_page.py`
- 5. 新建 `test_baidu.py`
- 四、编写 Dockerfile
- 五、编写 Docker Compose 文件
- 六、运行测试
- 七、常见问题与排查
- 八、目录结构参考
- 结语
前言
- 在自动化测试领域,Playwright 结合 Docker 容器化部署,可以极大提升测试环境的可移植性和一致性, browserless 项目则为浏览器的无头远程管理提供了极佳的解决方案。
- 本文将手把手教你如何在 Docker 容器中,利用 Python+Playwright,结合 browserless远程浏览器服务,运行自动化测试用例。
一、简介
-
Docker:容器化技术,保证环境一致性。
-
browserless:基于 Docker 的无头浏览器服务,支持 Playwright、Puppeteer 等远程连接。
二、环境准备
1. 安装 Docker
Windows 用户
-
访问 Docker Desktop 官网 下载 Windows 版本安装包。
-
双击安装包,按提示完成安装。
-
安装完成后,启动 Docker Desktop,确保右下角 Docker 图标为绿色(表示已启动)。
-
打开命令行(PowerShell 或 CMD),输入以下命令验证安装:
docker --version
如果能看到 Docker 版本号,说明安装成功。
macOS 用户
-
访问 Docker Desktop 官网 下载 macOS 版本安装包。
-
双击
.dmg
文件,将 Docker 拖入 Applications 文件夹。 -
启动 Docker Desktop,等待 Docker 图标变为绿色。
-
打开终端,输入:
docker --version
出现版本号即为安装成功。
Linux 用户(以 Ubuntu 为例)
-
打开终端,依次执行以下命令:
sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo \"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
-
验证安装:
docker --version
出现版本号即为安装成功。
2. 启动 browserless 服务
拉取 browserless 镜像
在命令行中执行:
docker pull browserless/chrome
启动 browserless 容器
docker run -d -p 3000:3000 --name browserless browserless/chrome
-d
表示后台运行-p 3000:3000
将容器的 3000 端口映射到本机 3000 端口--name browserless
给容器起个名字,方便后续管理
验证 browserless 是否启动成功
在浏览器中访问 http://localhost:3000
如果看到 browserless 的欢迎页面,说明服务已启动成功。
你的最新第三点“创建自动化测试项目(以百度为例)”的完整内容如下:
三、创建自动化测试项目
1. 创建项目目录
mkdir playwright-docker-demo
cd playwright-docker-demo
mkdir pages
2. 新建 requirements.txt
playwright
pytest
3. 新建 conftest.py
import pytest
from playwright.sync_api import sync_playwrightBROWSERLESS_WS_ENDPOINT = "ws://browserless:3000/playwright"@pytest.fixture(scope="session")
def browser():with sync_playwright() as p:browser = p.chromium.connect_over_cdp(BROWSERLESS_WS_ENDPOINT)yield browserbrowser.close()
4. 新建 pages/baidu_page.py
class BaiduPage:def __init__(self, page):self.page = pagedef goto(self):self.page.goto("https://www.baidu.com")def search(self, keyword):self.page.fill("input[name='wd']", keyword)self.page.keyboard.press("Enter")def has_result(self, text):self.page.wait_for_selector(f"text={text}")return text in self.page.content()
5. 新建 test_baidu.py
import pytest
from pages.baidu_page import BaiduPagedef test_baidu_search(browser):page = browser.new_page()baidu = BaiduPage(page)baidu.goto()baidu.search("Playwright")assert baidu.has_result("Playwright")page.close()
注意:
browserless
是 Docker Compose 中的服务名,后文会详细说明。
四、编写 Dockerfile
在项目根目录新建 Dockerfile
:
FROM python:3.10-slimWORKDIR /appCOPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txtCOPY . .CMD ["pytest", "--maxfail=1", "--disable-warnings", "-v"]
五、编写 Docker Compose 文件
新建 docker-compose.yml
:
version: '3'
services:browserless:image: browserless/chromeports:- "3000:3000"environment:- MAX_CONCURRENT_SESSIONS=5- PREBOOT_CHROME=trueplaywright:build: .depends_on:- browserlessenvironment:- PYTHONUNBUFFERED=1# 保证 playwright 服务启动后再运行测试entrypoint: ["sh", "-c", "sleep 5 && pytest --maxfail=1 --disable-warnings -v"]
六、运行测试
在项目根目录下执行:
docker-compose up --build
你将看到 pytest 的输出,测试用例会通过 browserless 服务远程控制浏览器,完成自动化测试。
七、常见问题与排查
-
连接失败
- 确认
browserless
服务已启动并监听 3000 端口。 - 确认 Playwright 连接的 ws 地址为
ws://browserless:3000/playwright
(服务名+端口)。
- 确认
-
依赖问题
- Playwright 依赖的 Python 包已在
requirements.txt
中声明。 - 若需更多依赖,可在 Dockerfile 中添加。
- Playwright 依赖的 Python 包已在
-
网络问题
- Docker Compose 默认服务间可通过服务名互通,无需额外配置。
八、目录结构参考
playwright-docker-demo/
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
├── conftest.py
├── test_baidu.py
└── pages/└── baidu_page.py
结语
通过本文的操作,你已经学会了如何利用Python+Playwright+Docker+browserless,在容器中高效运行自动化测试用例。这种方式不仅保证了环境一致性,还能轻松扩展到 CI/CD 流水线,助力自动化测试体系建设。
参考链接:
- Playwright 官方文档
- browserless GitHub
- Docker 官方文档