一、引言
构建一个使用 pytest
和 Excel
(用例数据 + 定位元素)结合 Allure
报告、log
、Git
(CI/CD)以及页面对象(PO)框架模式的自动化测试框架,并实现截图封装、测试结果回写到 Excel
的功能,以下是一个完整框架和示例。(适合自动化测试搭建框架时候使用)
二、项目结构
构建的自动化测试框架,分为以下几个主要模块:
- Test Cases: 存放测试用例,基于
pytest
编写 - Page Objects (PO): 页面对象模式,封装操作页面的步骤
- Utilities: 提供公共的功能(例如日志、截图封装、Excel 操作等)
- Config: 配置文件(例如环境配置、驱动配置等)
- CI/CD: Git 版本控制与 CI/CD 配置文件
- Allure: 测试报告生成
1、安装依赖
首先,安装需要的依赖包:
pip install pytest pytest-allure-adaptor openpyxl selenium pytest-html
2、项目结构
project/
├── config/
│ ├── config.py # 配置文件,存放driver配置等
├── pages/
│ ├── login_page.py # 页面对象
├── tests/
│ ├── test_login.py # 测试用例
├── utils/
│ ├── excel_utils.py # 操作Excel的工具
│ ├── logger.py # 日志封装
│ ├── screenshot.py # 截图封装
├── allure-results/ # Allure 报告存放目录
├── .gitlab-ci.yml # CI/CD 配置(例如GitLab CI)
└── pytest.ini # pytest 配置文件
三、代码展示
1、配置文件 (config/config.py
)
这个文件包含了对 Selenium
WebDriver 的初始化配置。get_driver
函数会返回一个已经初始化并配置好的浏览器驱动。
解释:
webdriver.Chrome(executable_path="path/to/chromedriver")
: 创建一个Chrome
浏览器实例,注意根据实际路径修改chromedriver
的路径。maximize_window()
: 最大化浏览器窗口。implicitly_wait(10)
: 设置隐式等待,所有的查找元素操作都会等待 10 秒钟,直到元素出现为止。
from selenium import webdriver
def get_driver():
"""
获取并初始化浏览器驱动。
这里以 Chrome 驱动为例,可以根据需要更换为其他浏览器驱动,如 Firefox, Edge 等。
"""
# 设置 Chrome 驱动路径(注意根据自己系统环境修改路径)
driver = webdriver.Chrome(executable_path="path/to/chromedriver")
# 最大化浏览器窗口
driver.maximize_window()
# 设置隐式等待时间
driver.implicitly_wait(10)
return driver
2. 页面对象(PO模式) (pages/login_page.py
)
页面对象(PO)模式通过将页面的操作封装成类和方法,减少重复代码,并且增强代码的可维护性。
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
class LoginPage:
def __init__(self, driver):
"""
页面对象类的初始化方法。
:param driver: WebDriver 实例
"""
self.driver = driver
self.