Selenium3.0 平台级自动化测试框架综合实战(完结)

一、项目背景与目标

  1. 背景

    • 针对企业级Web应用(如电商、OA系统、SaaS平台等)的自动化测试需求,构建一个可扩展、可维护的测试框架。
    • 解决传统测试中脚本复用性低、维护成本高、测试报告不直观等问题。
  2. 目标

    • 核心功能:实现跨浏览器(Chrome、Firefox、Edge)的自动化测试,支持登录、表单提交、数据验证等常见场景。
    • 扩展能力:支持数据驱动测试(DDT)、分布式测试、持续集成(CI/CD)。
    • 报告输出:生成美观的HTML测试报告,包含截图、日志、失败重试等功能。

(Selenium 3.0 平台级自动化测试框架综合实战(完结))---"夏のke"---weiranit---.---fun/3564/

二、技术选型与架构设计

  1. 技术栈

    • Selenium 3.0:核心自动化测试工具,兼容主流浏览器。
    • Pytest:测试框架,支持参数化、插件扩展、测试用例分组。
    • Allure:测试报告工具,生成可视化HTML报告。
    • Page Object Model (POM) :设计模式,解耦页面元素与测试逻辑。
    • Logging + 日志管理:记录测试执行过程,便于问题定位。
  2. 架构设计

    csharp 复制代码
    plaintext
    	├── base/                # 基础模块(浏览器驱动、元素操作封装)
    
    	├── pages/               # 页面对象层(POM模式)
    
    	├── testcases/            # 测试用例层
    
    	├── data/                # 测试数据(Excel/CSV/JSON)
    
    	├── utils/               # 工具类(截图、日志、数据读取)
    
    	├── reports/              # 测试报告(Allure输出)
    
    	└── conftest.py           # Pytest全局配置

三、核心功能实现

1. 浏览器驱动封装
  • 目标:统一管理浏览器启动、关闭、窗口大小等操作。

  • 代码示例

    python 复制代码
    python
    	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)
  • 目标:将页面元素与测试逻辑分离,提高可维护性。

  • 代码示例

    python 复制代码
    python
    	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. 测试用例层
  • 目标:编写可复用的测试用例,支持参数化与断言。

  • 代码示例

    python 复制代码
    python
    	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):

    python 复制代码
    python
    	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()

四、高级功能扩展

  1. 失败重试机制

    • 使用pytest-rerunfailures插件,自动重试失败的测试用例。

    • 安装:pip install pytest-rerunfailures

    • 配置:

      css 复制代码
      bash
      	pytest --reruns 3 --reruns-delay 2
  2. 分布式测试

    • 结合Selenium Grid,实现多浏览器并行测试。

    • 架构:

      scss 复制代码
      plaintext
      	Hub (控制节点) <-> Node1 (Chrome) <-> Node2 (Firefox)
  3. 持续集成(CI/CD)

    • 集成Jenkins:

      • 配置Jenkins任务,拉取代码后执行pytest命令。
      • 生成Allure报告并发布到服务器。

五、测试报告优化

  1. Allure报告增强

    • 添加步骤描述:with allure.step("步骤名称")

    • 嵌入截图:

      arduino 复制代码
      python
      	import allure
      
      	driver.save_screenshot("screenshot.png")
      
      	allure.attach.file("screenshot.png", name="失败截图", attachment_type=allure.attachment_type.PNG)
  2. 历史趋势分析

    • 对比多次测试结果,分析通过率、失败原因。

六、项目总结

  1. 成果

    • 构建了一个可扩展的自动化测试框架,支持跨浏览器、数据驱动、分布式测试。
    • 生成直观的Allure报告,提升测试效率与质量。
  2. 优化方向

    • 引入AI图像识别(如OpenCV),处理动态元素定位问题。
    • 集成性能测试工具(如JMeter),实现功能与性能一体化测试。

二、技术选型与架构设计

  1. 技术栈

    • Selenium 3.0:核心自动化测试工具,兼容主流浏览器。
    • Pytest:测试框架,支持参数化、插件扩展、测试用例分组。
    • Allure:测试报告工具,生成可视化HTML报告。
    • Page Object Model (POM) :设计模式,解耦页面元素与测试逻辑。
    • Logging + 日志管理:记录测试执行过程,便于问题定位。
  2. 架构设计

    csharp 复制代码
    plaintext
    	├── base/                # 基础模块(浏览器驱动、元素操作封装)
    
    	├── pages/               # 页面对象层(POM模式)
    
    	├── testcases/            # 测试用例层
    
    	├── data/                # 测试数据(Excel/CSV/JSON)
    
    	├── utils/               # 工具类(截图、日志、数据读取)
    
    	├── reports/              # 测试报告(Allure输出)
    
    	└── conftest.py           # Pytest全局配置

三、核心功能实现

1. 浏览器驱动封装
  • 目标:统一管理浏览器启动、关闭、窗口大小等操作。

  • 代码示例

    python 复制代码
    python
    	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)
  • 目标:将页面元素与测试逻辑分离,提高可维护性。

  • 代码示例

    python 复制代码
    python
    	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. 测试用例层
  • 目标:编写可复用的测试用例,支持参数化与断言。

  • 代码示例

    python 复制代码
    python
    	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):

    python 复制代码
    python
    	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()

四、高级功能扩展

  1. 失败重试机制

    • 使用pytest-rerunfailures插件,自动重试失败的测试用例。

    • 安装:pip install pytest-rerunfailures

    • 配置:

      css 复制代码
      bash
      	pytest --reruns 3 --reruns-delay 2
  2. 分布式测试

    • 结合Selenium Grid,实现多浏览器并行测试。

    • 架构:

      scss 复制代码
      plaintext
      	Hub (控制节点) <-> Node1 (Chrome) <-> Node2 (Firefox)
  3. 持续集成(CI/CD)

    • 集成Jenkins:

      • 配置Jenkins任务,拉取代码后执行pytest命令。
      • 生成Allure报告并发布到服务器。

五、测试报告优化

  1. Allure报告增强

    • 添加步骤描述:with allure.step("步骤名称")

    • 嵌入截图:

      arduino 复制代码
      python
      	import allure
      
      	driver.save_screenshot("screenshot.png")
      
      	allure.attach.file("screenshot.png", name="失败截图", attachment_type=allure.attachment_type.PNG)
  2. 历史趋势分析

    • 对比多次测试结果,分析通过率、失败原因。

六、项目总结

  1. 成果

    • 构建了一个可扩展的自动化测试框架,支持跨浏览器、数据驱动、分布式测试。
    • 生成直观的Allure报告,提升测试效率与质量。
  2. 优化方向

    • 引入AI图像识别(如OpenCV),处理动态元素定位问题。
    • 集成性能测试工具(如JMeter),实现功能与性能一体化测试。
相关推荐
试着4 天前
【AI面试准备】掌握常规的性能、自动化等测试技术,并在工作中熟练应用
面试·职场和发展·自动化·测试
waves浪游5 天前
论坛系统测试报告
测试工具·测试用例·bug·测试
灰色人生qwer6 天前
使用JMeter 编写的测试计划的多个线程组如何生成独立的线程组报告
jmeter·测试
.格子衫.6 天前
powershell批处理——io校验
测试·powershell
试着6 天前
【AI面试准备】TensorFlow与PyTorch构建缺陷预测模型
人工智能·pytorch·面试·tensorflow·测试
waves浪游7 天前
博客系统测试报告
测试工具·测试用例·bug·测试
智云软件测评服务8 天前
数字化时代下,软件测试中的渗透测试是如何保障安全的?
渗透·测试·漏洞
试着9 天前
【AI面试准备】XMind拆解业务场景识别AI赋能点
人工智能·面试·测试·xmind
waves浪游11 天前
性能测试工具篇
测试工具·测试用例·bug·测试
艾策第三方软件测评12 天前
软件产品测试报告:如何全面评估及保障软件质量?
测试·软件·评估