
现代Web应用迭代频繁,自动化测试已成为质量保障的基石。然而,如何将测试框架与云平台深度融合,实现弹性执行、报告共享和流水线自动化,是团队落地的关键。本文基于 Python + Selenium + Pytest,构建分层自动化框架,并完整接入 腾讯云CVM(云服务器)、COS(对象存储) 和 CODING DevOps 流水线,形成一套可复用的云上持续集成方案。所有代码均适用于腾讯云环境,助力企业快速搭建自动化测试基础设施。
整体架构分为四层,全部部署在腾讯云CVM上:
在CVM上通常无图形界面,需启用Headless模式。同时增加远程驱动配置,便于分布式执行。
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页面对象封装具体交互,结合显式等待提升稳定性。示例登录页:
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管理驱动生命周期,参数化覆盖多种异常场景。
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生成详细测试报告,并自动上传至COS,方便团队共享。
首先,在conftest.py中配置失败截图和报告附件:
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
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提供原生CI/CD,配置Jenkinsfile风格的CODING-CI.ym
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多核环境下加速。本文实现了从框架设计到云上持续集成的完整Web自动化测试体系。通过与腾讯云CVM、COS、CODING深度结合,不仅保证了测试稳定性,还实现了报告自动归档和团队协作透明化。此方案可直接迁移至生产环境,助力企业高效落地自动化测试。所有代码均已适配腾讯云环境,欢迎在评论区交流优化思路。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。