Selenium3+Pytest+Allure落地Python Web自动化测试(15章已完结)

5 阅读4分钟

Selenium3+Pytest+Allure落地Python Web自动化测试

在软件测试的面试中,只会“点点点”的手工测试已经很难在这个内卷的时代立足。当面试官问起 “如何构建企业级自动化测试框架” 时,如果你能熟练运用 Selenium3 + Pytest + Allure 这一黄金组合,绝对会让你的技术脱颖而出。

这套技术栈不仅覆盖了 UI 自动化的核心,更展现了你在代码封装、测试用例管理以及测试报告可视化方面的完整能力。下面我将通过实战代码,带你从零搭建一个高可用的自动化测试框架。

一、 框架设计的核心逻辑

一个成熟的自动化框架,绝不是把脚本写在主函数里就完事了。我们需要遵循“高内聚、低耦合”的原则。

  • Selenium3:负责与浏览器交互,模拟用户操作。
  • Pytest:负责测试用例的组织、执行、前置后置处理以及参数化驱动。
  • Allure:负责将运行结果生成美观、详尽的 HTML 报告,用于 Jenkins 集成或团队复盘。

二、 封装 Selenium WebDriver(基础层)

不要在每个用例里都写一遍 driver.get() 或 driver.find_element(),我们需要一个 BasePage 类来封装底层操作,实现维护性提升。

python

复制

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class BasePage:
    def __init__(self, driver):
        self.driver = driver

    def open(self, url):
        """打开页面"""
        self.driver.get(url)

    def find_element(self, locator, timeout=10):
        """
        显式等待查找元素
        :param locator: 元组,例如 (By.ID, "kw")
        """
        try:
            element = WebDriverWait(self.driver, timeout).until(
                EC.presence_of_element_located(locator)
            )
            return element
        except Exception as e:
            print(f"元素查找失败: {locator}, 错误信息: {e}")
            return None

    def click(self, locator):
        """点击操作"""
        element = self.find_element(locator)
        if element:
            element.click()

    def send_keys(self, locator, text):
        """输入操作"""
        element = self.find_element(locator)
        if element:
            element.clear()
            element.send_keys(text)

三、 Pytest 进阶应用:Fixture 与 参数化(核心层)

Pytest 之所以强大,在于它的 Fixture(夹具)机制,这相当于 TestNG 中的 @BeforeMethod 和 @AfterMethod,但更灵活。

1. 定义 Fixture

我们可以把浏览器的启动和关闭放在 conftest.py 中,这样所有测试类都能自动调用,无需手动传递 driver。

python

复制

# conftest.py
import pytest
from selenium import webdriver

@pytest.fixture(scope="function")
def driver():
    # 初始化浏览器
    service = webdriver.ChromeService(executable_path="chromedriver") # 确保路径正确
    driver = webdriver.Chrome(service=service)
    driver.maximize_window()
    driver.implicitly_wait(10)
    
    yield driver # yield 之前的代码是前置,yield 之后是后置
    
    # 测试结束后的清理工作
    driver.quit()

2. 编写测试用例

这里我们演示最核心的参数化测试。比如验证登录功能,我们不需要写 5 个 test 方法,只需 1 个方法 + 5 组数据。

python

复制

import pytest
from page_object.login_page import LoginPage
from utils.base_page import BasePage

# 定义测试数据:账号、密码、预期结果(这里简化为 True/False)
test_data = [
    ("admin", "123456", True),
    ("admin", "wrong_pwd", False),
    ("", "123456", False)
]

@pytest.mark.login
@pytest.mark.parametrize("username, password, expected", test_data)
def test_login(driver, username, password, expected):
    """
    使用参数化驱动测试登录场景
    """
    # 初始化页面对象
    login_page = LoginPage(driver)
    login_page.open("https://example.com/login")
    
    # 执行登录
    login_page.login_action(username, password)
    
    # 断言
    # 这里通过是否找到特定元素来判断登录是否成功
    result = login_page.is_login_success()
    assert result == expected, f"登录失败:用户 {username}, 预期 {expected}, 实际 {result}"

四、 Allure 测试报告集成(展示层)

代码跑通了,还要给老板和产品经理看。Allure 是目前最漂亮的测试报告之一。

1. 配置 Pytest 生成 Allure 数据

在项目根目录下运行命令:

bash

复制

# 安装插件
pip install pytest-allure-adaptor

# 运行测试并生成 json 数据
pytest --alluredir=./report/allure-raw

2. 生成 HTML 报告

bash

复制

allure generate ./report/allure-raw -o ./report/allure-html --clean

3. 在代码中增强 Allure 信息

为了让报告更易读,我们可以在代码中添加描述和步骤:

python

复制

import allure

@allure.feature("登录模块")
@allure.story("用户登录测试")
def test_login_with_allure(driver):
    """
    Allure 注解使用示例
    """
    # Allure.step 可以让报告显示测试步骤
    with allure.step("打开登录页面"):
        driver.get("https://example.com/login")
    
    with allure.step("输入用户名和密码"):
        driver.find_element(By.ID, "user").send_keys("admin")
        driver.find_element(By.ID, "pass").send_keys("123456")
        
    with allure.step("点击登录按钮"):
        driver.find_element(By.ID, "btn").click()

生成的报告会包含:用例通过率、失败截图、环境信息、甚至运行步骤的截图。这就是面试中你可以展示的 “可视化质量保障体系”

五、 总结

掌握了 Selenium3+Pytest+Allure,你实际上掌握了一套完整的自动化测试解决方案:

  1. Selenium3 提供了底层的操作能力。
  2. Pytest 提供了强大的用例管理、并发执行和参数化能力。
  3. 优秀的代码封装体现了你的工程化思维。
  4. Allure 提供了高质量的交付物。

这套组合拳不仅能解决工作中的实际问题,更是你面试自动化测试岗位时的核心加分项。从今天开始,试着搭建属于你自己的框架吧!