目录

混合驱动自动化测试框架

兼容 Python 脚本编写YAML 数据驱动 两种模式的自动化测试框架。

核心特性

  1. 双重模式: 支持 Python 原生脚本写法(直接使用 Playwright)和 YAML 关键字写法。
  2. 自动日志: 通过 log_info 工具,所有操作自动记录 Loguru 日志。
  3. 清晰报告: 自动生成 Allure 报告,失败自动截图。
  4. 极简编写: 脚本模式下,直接使用 Playwright 的 page 对象,配合 allure.step 记录步骤。
  5. 灵活配置: 支持浏览器类型选择、有头/无头模式配置。
  6. 会话管理: 支持认证会话保存和复用,避免重复登录。

框架目录结构

automation_framework/
├── .auth/                       # 认证会话存储目录
├── config/                      # 配置目录
│   ├── __init__.py
│   └── settings.py              # 全局配置文件
├── tests/                       # 测试用例目录
│   ├── __init__.py
│   ├── conftest.py              # Pytest 配置和 Fixtures
│   ├── _test_runner.py          # 测试运行器
│   ├── test_login.py            # 登录测试用例
│   └── projects/                # 项目测试模块
│       ├── conftest.py          # 项目测试 Fixtures
│       └── test_new_project.py  # 新建项目测试用例
├── testcases/                   # YAML 用例目录
│   └── login_case.yaml          # YAML 格式测试用例
├── utils/                       # 工具类目录
│   ├── __init__.py
│   ├── action_helper.py         # Action 助手类
│   ├── log_tools.py             # 日志工具
│   ├── yaml_engine.py           # YAML 引擎
│   └── auth_session.py          # 认证会话管理
├── lib/                         # 第三方库(Allure)
│   └── allure-2.22.0/
├── outputs/                     # 输出目录 (logs, reports, screenshots)
│   ├── logs/                    # 运行日志
│   ├── screenshots/             # 失败截图
│   ├── allure_results/          # Allure 原始结果
│   └── allure_report/           # Allure HTML 报告
├── run.py                       # 测试运行入口
├── requirements.txt             # Python 依赖
├── Dockerfile                   # Docker 镜像配置
└── README.md                    # 项目说明

配置文件说明

config/settings.py

配置项 说明 默认值
BASE_URL 测试网站地址 http://172.20.32.203:4000
BROWSER_TYPE 浏览器类型 chromium
HEADLESS 是否无头模式 False
BROWSER_WIDTH 浏览器窗口宽度 1920
BROWSER_HEIGHT 浏览器窗口高度 1080
BROWSER_TIMEOUT 浏览器启动超时(秒) 30
OUTPUTS_DIR 输出目录根路径 outputs/
LOG_PATH 日志存放路径 outputs/logs/
SCREENSHOT_PATH 失败截图路径 outputs/screenshots/
ALLURE_RESULTS_DIR Allure 结果目录 outputs/allure_results
ALLURE_REPORT_DIR Allure 报告目录 outputs/allure_report
ALLURE_BIN Allure 可执行文件路径 自动识别(优先本地安装)
CASES_DIR YAML 用例目录 testcases/
AUTH_DIR 认证会话存储目录 .auth/
TEST_USER_USERNAME 测试用户账号 floraachy
TEST_USER_PASSWORD 测试用户密码 12345678
TEST_USER_DISPLAY_NAME 测试用户显示名称 floraachy

Allure 配置说明

框架支持两种 Allure 路径配置方式:

  1. 本地安装:设置环境变量 ALLURE_HOME 指向 Allure 安装目录
  2. 项目内置:默认使用 lib/allure-2.22.0/bin/ 下的 Allure
# 方式1: 设置环境变量(Windows)
set ALLURE_HOME=C:\allure-2.22.0

# 方式2: 使用项目内置 Allure(无需配置)
python run.py

如何编写测试用例

模式一:Python 脚本模式 (推荐用于复杂逻辑)

tests/ 下新建文件,直接使用 Playwright 的 page 对象。 配合 allure.steplog_info 记录测试步骤和日志。

import pytest
import allure
from utils.log_tools import log_info

@allure.feature("登录模块")
class TestLoginScript:

    @allure.story("登录成功")
    def test_login_success(self, page):
        """测试登录成功场景"""
        with allure.step("打开登录页面"):
            log_info("打开登录页面")
            page.goto("https://example.com/login")
        
        with allure.step("输入用户名和密码"):
            log_info("输入用户名和密码")
            page.fill("#username", "admin")
            page.fill("#password", "password")
        
        with allure.step("点击登录按钮"):
            log_info("点击登录按钮")
            page.click("#login-btn")
        
        with allure.step("验证登录成功"):
            log_info("验证登录成功")
            assert page.locator(".welcome").is_visible()

使用认证会话管理

框架提供认证会话管理功能,可以在测试间复用登录状态:

def test_with_auth(page, auth_session):
    # 应用已保存的会话(自动登录)
    auth_session.apply_session(page.context)
    
    # 访问需要登录的页面
    page.goto("/dashboard")
    assert page.locator(".user-info").is_visible()

模式二:YAML 模式 (推荐用于简单流程)

在 testcases/ 目录下新建 .yaml 文件,格式如下:

name: "测试用例名称"
steps:
  - action: "goto"          # 关键字
    desc: "步骤描述"         # 报告中显示的步骤名
    url: "https://..."       # 参数

支持的关键字详解

关键字 说明 必填参数 可选参数
goto 打开指定 URL 的页面 url -
fill 在输入框中填写文本 locator, text -
click 点击指定元素 locator -
type 模拟键盘输入(逐字符输入) locator, text delay (每个字符间隔毫秒)
hover 鼠标悬停在指定元素上 locator -
dblclick 双击指定元素 locator -
press 模拟按键操作 locator, key -
select_option 下拉框选择选项 locator, value -
assert_visible 断言元素可见 locator -
wait_for_selector 等待元素出现 locator timeout (毫秒,默认 10000)
wait_for_url 等待 URL 变化 url timeout (毫秒,默认 10000)
screenshot 页面截图 path -

参数说明

  • action: 关键字名称
  • desc: 步骤描述,会在 Allure 报告中显示
  • locator: 元素定位器,支持 CSS 选择器、XPath 等
  • url: 页面 URL 地址
  • text: 要输入的文本内容
  • value: 下拉框选项值
  • key: 要按下的键(如 Enter, Escape, ArrowDown 等)
  • delay: 字符输入间隔(毫秒),用于模拟真实打字速度
  • timeout: 超时时间(毫秒)
  • path: 截图保存路径

使用示例

name: "用户登录测试"
steps:
  - action: "goto"
    desc: "打开登录页面"
    url: "http://172.20.32.203:4000/login"
  
  - action: "fill"
    desc: "输入用户名"
    locator: "input[id='login_username']"
    text: "floraachy"
  
  - action: "fill"
    desc: "输入密码"
    locator: "input[id='login_password']"
    text: "12345678"
  
  - action: "click"
    desc: "点击登录按钮"
    locator: "button:has-text('登 录')"
  
  - action: "wait_for_selector"
    desc: "等待头像元素出现"
    locator: ".currentImg"
    timeout: 5000
  
  - action: "assert_visible"
    desc: "验证登录成功"
    locator: ".currentImg"

快速开始

1. 环境准备

创建虚拟环境

python -m venv venv
source venv/bin/activate  # Linux/Mac
venv\Scripts\activate     # Windows

安装依赖:

pip install -r requirements.txt
playwright install

2. 运行测试

python run.py

命令行参数

运行 python run.py 支持以下参数:

参数 说明 示例
-b, --browser-type 指定浏览器类型 (chromium/firefox/webkit) python run.py -b firefox
--headless 是否无头模式 (true/false),默认 false python run.py --headless true
-k, --keyword 按测试名称关键词过滤 python run.py -k login

使用示例:

# 默认运行(Chromium 有头模式)
python run.py

# 无头模式运行(后台运行,不显示浏览器窗口)
python run.py --headless true

# 使用 Firefox 浏览器
python run.py -b firefox

# 运行包含 "login" 关键词的测试
python run.py -k login

# 组合使用:Firefox 浏览器 + 无头模式 + 过滤 login
python run.py -b firefox --headless true -k login

3. Docker 运行

构建镜像:

docker build -t test-frame .

运行容器(结果挂载到本地):

docker run -v $(pwd)/outputs:/app/outputs test-frame

报告查看

运行结束后,进入 outputs/allure_report 目录,打开 index.html 即可查看报告。

常用命令

# 直接使用 pytest 运行(支持更多参数)
pytest tests/ -v -s

# 指定浏览器和模式
pytest tests/ --browser=firefox --headless=false

# 只运行特定测试
pytest tests/test_login.py::TestLoginScript::test_login_success -v

# 生成报告并打开
allure serve outputs/allure_results

# 运行特定模块的测试
pytest tests/projects/ -v

# 运行所有测试并生成 Allure 报告
pytest tests/ --alluredir=outputs/allure_results

代码优化建议

  1. 浏览器复用: 可将 page fixture 改为 scope="session" 复用浏览器
  2. 失败重试: 添加 @pytest.mark.flaky(reruns=3) 实现失败自动重试
  3. 环境配置: 支持多环境配置(dev/test/prod)
  4. 增强 Action: 添加更多常用方法如 screenshot(), get_text()
关于

兼容 Python 脚本编写 和 YAML 数据驱动 两种模式的自动化测试框架。

70.0 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802032778号