当前位置: 首页 > news >正文

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 用户
  1. 访问 Docker Desktop 官网 下载 Windows 版本安装包。
    在这里插入图片描述

  2. 双击安装包,按提示完成安装。

  3. 安装完成后,启动 Docker Desktop,确保右下角 Docker 图标为绿色(表示已启动)。

  4. 打开命令行(PowerShell 或 CMD),输入以下命令验证安装:

    docker --version
    

    如果能看到 Docker 版本号,说明安装成功。

macOS 用户
  1. 访问 Docker Desktop 官网 下载 macOS 版本安装包。

  2. 双击 .dmg 文件,将 Docker 拖入 Applications 文件夹。

  3. 启动 Docker Desktop,等待 Docker 图标变为绿色。

  4. 打开终端,输入:

    docker --version
    

    出现版本号即为安装成功。

Linux 用户(以 Ubuntu 为例)
  1. 打开终端,依次执行以下命令:

    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
    
  2. 验证安装:

    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 服务远程控制浏览器,完成自动化测试。


七、常见问题与排查

  1. 连接失败

    • 确认 browserless 服务已启动并监听 3000 端口。
    • 确认 Playwright 连接的 ws 地址为 ws://browserless:3000/playwright(服务名+端口)。
  2. 依赖问题

    • Playwright 依赖的 Python 包已在 requirements.txt 中声明。
    • 若需更多依赖,可在 Dockerfile 中添加。
  3. 网络问题

    • 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 官方文档

相关文章:

  • docker容器运维工具——ctop
  • 基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
  • node入门和npm
  • 当自动驾驶遇上“安全驾校”:NVIDIA如何用技术给无人驾驶赋能?
  • java智慧城管综合管理系统源码,前端框架:vue+element;后端框架:springboot;移动端:uniapp开发,技术前沿,可扩展性强
  • 图像处理——边缘检测
  • RASP技术在DevOps中的安全应用
  • 冯·诺依曼和哈佛架构​​​​两种架构的总线组成及核心特点
  • Flink反压问题解析
  • 1--Python基础课程实验指导书
  • linux blueZ 第四篇:BLE GATT 编程与自动化——Python 与 C/C++ 实战
  • CSS3布局方式介绍
  • 性能提升手段--池化技术
  • PySpark实现ABC_manage_channel逻辑
  • 精益数据分析(25/126):关键指标驱动业务发展
  • WPF实现数字孪生示例
  • 使用PyTorch实现简单图像识别(基于MNIST手写数字数据集)的完整代码示例,包含数据加载、模型定义、训练和预测全流程
  • 关于使用 读光-文字检测-DBNet行检测模型-中英-通用领域,版本问题
  • 《P1950 长方形》
  • 前端与Rust后端交互:跨越语言鸿沟 (入门系列三)
  • 党旗下的青春|83岁仍在“下生活”,他说生活是创作的源泉
  • 上海市市管干部任职前公示:赵亮拟为地区区长人选
  • 首映|马丽:真想抱抱臧姑娘,对她说辛苦了
  • 价格周报|猪价继续回暖:二次育肥热度仍存,对猪价仍有一定支撑
  • 中青报:“猿辅导员工猝死”事件上热搜,是对健康职场环境的共同关切
  • 传染病防治法修订草案:拟加强医疗机构疾病预防控制能力建设