一、项目背景与目标
-
背景
- 针对企业级Web应用(如电商、OA系统、SaaS平台等)的自动化测试需求,构建一个可扩展、可维护的测试框架。
- 解决传统测试中脚本复用性低、维护成本高、测试报告不直观等问题。
-
目标
- 核心功能:实现跨浏览器(Chrome、Firefox、Edge)的自动化测试,支持登录、表单提交、数据验证等常见场景。
- 扩展能力:支持数据驱动测试(DDT)、分布式测试、持续集成(CI/CD)。
- 报告输出:生成美观的HTML测试报告,包含截图、日志、失败重试等功能。
(Selenium 3.0 平台级自动化测试框架综合实战(完结))---"夏のke"---weiranit---.---fun/3564/
二、技术选型与架构设计
-
技术栈
- Selenium 3.0:核心自动化测试工具,兼容主流浏览器。
- Pytest:测试框架,支持参数化、插件扩展、测试用例分组。
- Allure:测试报告工具,生成可视化HTML报告。
- Page Object Model (POM) :设计模式,解耦页面元素与测试逻辑。
- Logging + 日志管理:记录测试执行过程,便于问题定位。
-
架构设计
csharpplaintext ├── base/ # 基础模块(浏览器驱动、元素操作封装) ├── pages/ # 页面对象层(POM模式) ├── testcases/ # 测试用例层 ├── data/ # 测试数据(Excel/CSV/JSON) ├── utils/ # 工具类(截图、日志、数据读取) ├── reports/ # 测试报告(Allure输出) └── conftest.py # Pytest全局配置
三、核心功能实现
1. 浏览器驱动封装
-
目标:统一管理浏览器启动、关闭、窗口大小等操作。
-
代码示例:
pythonpython from selenium import webdriver class BaseDriver: def __init__(self, browser_name="chrome"): if browser_name.lower() == "chrome": self.driver = webdriver.Chrome() elif browser_name.lower() == "firefox": self.driver = webdriver.Firefox() else: raise ValueError("Unsupported browser") self.driver.maximize_window() def get_driver(self): return self.driver def quit_driver(self): self.driver.quit()
2. 页面对象模型(POM)
-
目标:将页面元素与测试逻辑分离,提高可维护性。
-
代码示例:
pythonpython from selenium.webdriver.common.by import By from base.base_driver import BaseDriver class LoginPage: def __init__(self, driver): self.driver = driver self.username_input = (By.ID, "username") self.password_input = (By.ID, "password") self.login_button = (By.ID, "login-btn") def login(self, username, password): self.driver.find_element(*self.username_input).send_keys(username) self.driver.find_element(*self.password_input).send_keys(password) self.driver.find_element(*self.login_button).click()
3. 测试用例层
-
目标:编写可复用的测试用例,支持参数化与断言。
-
代码示例:
pythonpython import pytest import allure from base.base_driver import BaseDriver from pages.login_page import LoginPage @allure.feature("登录功能") class TestLogin: @pytest.fixture(scope="class") def setup_class(self): self.driver = BaseDriver("chrome").get_driver() self.login_page = LoginPage(self.driver) self.driver.get("https://example.com/login") yield self.driver.quit() @allure.story("用户登录成功") def test_login_success(self, setup_class): self.login_page.login("testuser", "password123") assert "欢迎" in self.driver.page_source
4. 数据驱动测试(DDT)
-
目标:从外部文件读取测试数据,减少代码冗余。
-
代码示例 (使用
pytest.mark.parametrize
):pythonpython import pytest from pages.login_page import LoginPage from base.base_driver import BaseDriver @pytest.mark.parametrize("username, password, expected", [ ("testuser1", "password123", "欢迎"), ("testuser2", "wrongpassword", "登录失败"), ]) def test_login_with_params(username, password, expected): driver = BaseDriver("chrome").get_driver() login_page = LoginPage(driver) driver.get("https://example.com/login") login_page.login(username, password) assert expected in driver.page_source driver.quit()
四、高级功能扩展
-
失败重试机制
-
使用
pytest-rerunfailures
插件,自动重试失败的测试用例。 -
安装:
pip install pytest-rerunfailures
-
配置:
cssbash pytest --reruns 3 --reruns-delay 2
-
-
分布式测试
-
结合Selenium Grid,实现多浏览器并行测试。
-
架构:
scssplaintext Hub (控制节点) <-> Node1 (Chrome) <-> Node2 (Firefox)
-
-
持续集成(CI/CD)
-
集成Jenkins:
- 配置Jenkins任务,拉取代码后执行
pytest
命令。 - 生成Allure报告并发布到服务器。
- 配置Jenkins任务,拉取代码后执行
-
五、测试报告优化
-
Allure报告增强
-
添加步骤描述:
with allure.step("步骤名称")
-
嵌入截图:
arduinopython import allure driver.save_screenshot("screenshot.png") allure.attach.file("screenshot.png", name="失败截图", attachment_type=allure.attachment_type.PNG)
-
-
历史趋势分析
- 对比多次测试结果,分析通过率、失败原因。
六、项目总结
-
成果
- 构建了一个可扩展的自动化测试框架,支持跨浏览器、数据驱动、分布式测试。
- 生成直观的Allure报告,提升测试效率与质量。
-
优化方向
- 引入AI图像识别(如OpenCV),处理动态元素定位问题。
- 集成性能测试工具(如JMeter),实现功能与性能一体化测试。
二、技术选型与架构设计
-
技术栈
- Selenium 3.0:核心自动化测试工具,兼容主流浏览器。
- Pytest:测试框架,支持参数化、插件扩展、测试用例分组。
- Allure:测试报告工具,生成可视化HTML报告。
- Page Object Model (POM) :设计模式,解耦页面元素与测试逻辑。
- Logging + 日志管理:记录测试执行过程,便于问题定位。
-
架构设计
csharpplaintext ├── base/ # 基础模块(浏览器驱动、元素操作封装) ├── pages/ # 页面对象层(POM模式) ├── testcases/ # 测试用例层 ├── data/ # 测试数据(Excel/CSV/JSON) ├── utils/ # 工具类(截图、日志、数据读取) ├── reports/ # 测试报告(Allure输出) └── conftest.py # Pytest全局配置
三、核心功能实现
1. 浏览器驱动封装
-
目标:统一管理浏览器启动、关闭、窗口大小等操作。
-
代码示例:
pythonpython from selenium import webdriver class BaseDriver: def __init__(self, browser_name="chrome"): if browser_name.lower() == "chrome": self.driver = webdriver.Chrome() elif browser_name.lower() == "firefox": self.driver = webdriver.Firefox() else: raise ValueError("Unsupported browser") self.driver.maximize_window() def get_driver(self): return self.driver def quit_driver(self): self.driver.quit()
2. 页面对象模型(POM)
-
目标:将页面元素与测试逻辑分离,提高可维护性。
-
代码示例:
pythonpython from selenium.webdriver.common.by import By from base.base_driver import BaseDriver class LoginPage: def __init__(self, driver): self.driver = driver self.username_input = (By.ID, "username") self.password_input = (By.ID, "password") self.login_button = (By.ID, "login-btn") def login(self, username, password): self.driver.find_element(*self.username_input).send_keys(username) self.driver.find_element(*self.password_input).send_keys(password) self.driver.find_element(*self.login_button).click()
3. 测试用例层
-
目标:编写可复用的测试用例,支持参数化与断言。
-
代码示例:
pythonpython import pytest import allure from base.base_driver import BaseDriver from pages.login_page import LoginPage @allure.feature("登录功能") class TestLogin: @pytest.fixture(scope="class") def setup_class(self): self.driver = BaseDriver("chrome").get_driver() self.login_page = LoginPage(self.driver) self.driver.get("https://example.com/login") yield self.driver.quit() @allure.story("用户登录成功") def test_login_success(self, setup_class): self.login_page.login("testuser", "password123") assert "欢迎" in self.driver.page_source
4. 数据驱动测试(DDT)
-
目标:从外部文件读取测试数据,减少代码冗余。
-
代码示例 (使用
pytest.mark.parametrize
):pythonpython import pytest from pages.login_page import LoginPage from base.base_driver import BaseDriver @pytest.mark.parametrize("username, password, expected", [ ("testuser1", "password123", "欢迎"), ("testuser2", "wrongpassword", "登录失败"), ]) def test_login_with_params(username, password, expected): driver = BaseDriver("chrome").get_driver() login_page = LoginPage(driver) driver.get("https://example.com/login") login_page.login(username, password) assert expected in driver.page_source driver.quit()
四、高级功能扩展
-
失败重试机制
-
使用
pytest-rerunfailures
插件,自动重试失败的测试用例。 -
安装:
pip install pytest-rerunfailures
-
配置:
cssbash pytest --reruns 3 --reruns-delay 2
-
-
分布式测试
-
结合Selenium Grid,实现多浏览器并行测试。
-
架构:
scssplaintext Hub (控制节点) <-> Node1 (Chrome) <-> Node2 (Firefox)
-
-
持续集成(CI/CD)
-
集成Jenkins:
- 配置Jenkins任务,拉取代码后执行
pytest
命令。 - 生成Allure报告并发布到服务器。
- 配置Jenkins任务,拉取代码后执行
-
五、测试报告优化
-
Allure报告增强
-
添加步骤描述:
with allure.step("步骤名称")
-
嵌入截图:
arduinopython import allure driver.save_screenshot("screenshot.png") allure.attach.file("screenshot.png", name="失败截图", attachment_type=allure.attachment_type.PNG)
-
-
历史趋势分析
- 对比多次测试结果,分析通过率、失败原因。
六、项目总结
-
成果
- 构建了一个可扩展的自动化测试框架,支持跨浏览器、数据驱动、分布式测试。
- 生成直观的Allure报告,提升测试效率与质量。
-
优化方向
- 引入AI图像识别(如OpenCV),处理动态元素定位问题。
- 集成性能测试工具(如JMeter),实现功能与性能一体化测试。