首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Web自动化测试的云上实践:基于Jenkins + Allure + 腾讯云CODING的持续集成体系

Web自动化测试的云上实践:基于Jenkins + Allure + 腾讯云CODING的持续集成体系

原创
作者头像
学习it
修改2026-08-06 14:04:58
修改2026-08-06 14:04:58
1280
举报

Web自动化测试的云上实践:基于Jenkins + Allure + 腾讯云CODING的持续集成体系

现代Web应用迭代频繁,自动化测试已成为质量保障的基石。然而,如何将测试框架与云平台深度融合,实现弹性执行、报告共享和流水线自动化,是团队落地的关键。本文基于 Python + Selenium + Pytest,构建分层自动化框架,并完整接入 腾讯云CVM(云服务器)COS(对象存储)CODING DevOps 流水线,形成一套可复用的云上持续集成方案。所有代码均适用于腾讯云环境,助力企业快速搭建自动化测试基础设施。

一、框架架构与云环境设计

整体架构分为四层,全部部署在腾讯云CVM上:

  • 基础层:封装Selenium WebDriver,统一日志、截图、重试,并适配无头模式(节省云资源)。
  • 页面层:采用Page Object模式,管理元素定位与业务方法。
  • 用例层:Pytest管理用例,支持参数化、fixture,并与Allure深度集成。
  • 持续集成层:使用CODING流水线触发测试,测试结果(Allure报告)自动上传至COS,便于团队在线查看。

二、基础层封装与云环境适配

在CVM上通常无图形界面,需启用Headless模式。同时增加远程驱动配置,便于分布式执行。

代码语言:javascript
复制
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import logging

class BaseDriver:
    _driver = None

    @classmethod
    def get_driver(cls, remote=False, hub_url=None):
        if cls._driver is None:
            options = Options()
            options.add_argument("--headless")          # 云上必须
            options.add_argument("--no-sandbox")
            options.add_argument("--disable-dev-shm-usage")
            if remote and hub_url:
                cls._driver = webdriver.Remote(
                    command_executor=hub_url,
                    options=options
                )
            else:
                cls._driver = webdriver.Chrome(options=options)
            cls._driver.implicitly_wait(5)
        return cls._driver

    @classmethod
    def quit_driver(cls):
        if cls._driver:
            cls._driver.quit()
            cls._driver = None

三、Page Object模式与智能等待

页面对象封装具体交互,结合显式等待提升稳定性。示例登录页:

代码语言:javascript
复制
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class LoginPage:
    USERNAME = (By.ID, "username")
    PASSWORD = (By.ID, "password")
    LOGIN_BTN = (By.CSS_SELECTOR, "button[type='submit']")
    ERROR_MSG = (By.XPATH, "//div[@class='error']")

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

    def wait_for_element(self, locator, timeout=10, condition="visible"):
        if condition == "clickable":
            return WebDriverWait(self.driver, timeout).until(EC.element_to_be_clickable(locator))
        return WebDriverWait(self.driver, timeout).until(EC.visibility_of_element_located(locator))

    def login(self, username, password):
        self.wait_for_element(self.USERNAME).send_keys(username)
        self.wait_for_element(self.PASSWORD).send_keys(password)
        self.wait_for_element(self.LOGIN_BTN, condition="clickable").click()
        return self

    def get_error(self):
        return self.wait_for_element(self.ERROR_MSG).text

四、测试用例与数据驱动

使用Pytest fixture管理驱动生命周期,参数化覆盖多种异常场景。

代码语言:javascript
复制
import pytest
from core.base import BaseDriver
from pages.login_page import LoginPage

@pytest.fixture(scope="function")
def driver():
    driver = BaseDriver.get_driver(remote=False)  # 本地或远程可配置
    driver.get("https://your-app.com/login")
    yield driver
    BaseDriver.quit_driver()

@pytest.mark.parametrize("username,password,expected", [
    ("invalid", "wrong", "Invalid credentials"),
    ("", "", "Username required"),
])
def test_login_fail(driver, username, password, expected):
    login = LoginPage(driver)
    login.login(username, password)
    assert login.get_error() == expected

五、Allure报告与腾讯云COS存储

生成详细测试报告,并自动上传至COS,方便团队共享。

首先,在conftest.py中配置失败截图和报告附件:

代码语言:javascript
复制
import allure
import pytest
from core.base import BaseDriver

@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    outcome = yield
    rep = outcome.get_result()
    if rep.failed:
        driver = BaseDriver.get_driver()
        screenshot = driver.get_screenshot_as_png()
        allure.attach(screenshot, name="失败截图", attachment_type=allure.attachment_type.PNG)

执行后生成allure-results目录,使用allure generate生成HTML报告。

上传至COS(使用腾讯云SDK

代码语言:javascript
复制
import os
from qcloud_cos import CosConfig, CosS3Client

def upload_report_to_cos(local_dir, bucket, region, secret_id, secret_key):
    config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key)
    client = CosS3Client(config)
    for root, dirs, files in os.walk(local_dir):
        for file in files:
            local_path = os.path.join(root, file)
            key = os.path.relpath(local_path, local_dir).replace("\\", "/")
            client.upload_file(bucket, key, local_path)
    print("报告已上传至COS")

六、CODING流水线集成(替代通用Jenkins)

腾讯云CODING提供原生CI/CD,配置Jenkinsfile风格的CODING-CI.ym

代码语言:javascript
复制
version: '1.0'
stages:
  - name: checkout
    steps:
      - checkout
  - name: install_deps
    steps:
      - run: pip install -r requirements.txt
  - name: run_tests
    steps:
      - run: pytest --alluredir=allure-results
  - name: generate_report
    steps:
      - run: allure generate allure-results -o allure-report
  - name: upload_to_cos
    steps:
      - run: python upload_cos.py  # 使用上述上传脚本

流水线支持Webhook触发,每次代码提交自动执行测试,并可在CODING界面查看构建状态。

七、稳定性优化与云上调度

  • 资源控制:设置max_retries,避免网络波动导致失败。
  • 并行执行:借助pytest-xdist,在CVM多核环境下加速。
  • 定时任务:在CODING中配置定时触发,每日回归。

八、总结

本文实现了从框架设计到云上持续集成的完整Web自动化测试体系。通过与腾讯云CVM、COS、CODING深度结合,不仅保证了测试稳定性,还实现了报告自动归档和团队协作透明化。此方案可直接迁移至生产环境,助力企业高效落地自动化测试。所有代码均已适配腾讯云环境,欢迎在评论区交流优化思路。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • Web自动化测试的云上实践:基于Jenkins + Allure + 腾讯云CODING的持续集成体系
    • 一、框架架构与云环境设计
    • 二、基础层封装与云环境适配
    • 三、Page Object模式与智能等待
    • 四、测试用例与数据驱动
    • 五、Allure报告与腾讯云COS存储
    • 六、CODING流水线集成(替代通用Jenkins)
    • 七、稳定性优化与云上调度
    • 八、总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档