当前位置: 首页 > news >正文

Selenium + Python + Pytest + Yaml + POM

以下是基于 Selenium + Python + Pytest + Yaml + POM 搭建 WebUI 自动化测试框架,并通过 Jenkins 实现持续集成、自动部署和定时任务的具体操作步骤:

一、搭建 WebUI 自动化测试框架

1. 项目结构

创建以下项目目录结构:

WebUITestFramework/
├── config/                # 配置文件目录
├── page/                  # 页面对象目录
├── page_element/          # 页面元素定位文件目录
├── scripts/               # 测试脚本目录
├── utils/                 # 工具类目录
├── conftest.py            # Pytest 配置文件
├── pytest.ini             # Pytest 配置文件
├── test_case.py           # 测试用例文件
2. 配置文件管理

config 目录下创建 conf.pyconfig.ini 文件。

conf.py

import os
from selenium.webdriver.common.by import By
from utils.times import dt_strftimeclass ConfigManager(object):BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))ELEMENT_PATH = os.path.join(BASE_DIR, 'page_element')REPORT_FILE = os.path.join(BASE_DIR, 'report.html')LOCATE_MODE = {'css': By.CSS_SELECTOR,'xpath': By.XPATH,'name': By.NAME,'id': By.ID,'class': By.CLASS_NAME}EMAIL_INFO = {'username': 'your_email@example.com','password': 'your_password','smtp_host': 'smtp.example.com','smtp_port': 465}ADDRESSEE = ['recipient@example.com']@propertydef log_file(self):log_dir = os.path.join(self.BASE_DIR, 'logs')if not os.path.exists(log_dir):os.makedirs(log_dir)return os.path.join(log_dir, '{}.log'.format(dt_strftime()))@propertydef ini_file(self):ini_file = os.path.join(self.BASE_DIR, 'config', 'config.ini')if not os.path.exists(ini_file):raise FileNotFoundError("配置文件%s不存在!" % ini_file)return ini_filecm = ConfigManager()

config.ini

ini复制

[HOST]
HOST = https://www.example.com
3. 页面对象管理

page_element 目录下创建 search.yaml 文件:

yaml复制

搜索框: id==kw
搜索按钮: id==su
4. 封装 Selenium 基类

page 目录下创建 webpage.py 文件:

Python复制

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
from config.conf import cm
from utils.logger import logclass WebPage(object):def __init__(self, driver):self.driver = driverself.timeout = 20self.wait = WebDriverWait(self.driver, self.timeout)def find_element(self, locator):return self.wait.until(EC.presence_of_element_located(locator))def input_text(self, locator, txt):ele = self.find_element(locator)ele.clear()ele.send_keys(txt)log.info(f"输入文本:{txt}")def click(self, locator):self.find_element(locator).click()log.info(f"点击元素:{locator}")
5. 编写测试用例

在项目根目录下创建 test_case.py 文件:

Python复制

import pytest
from selenium import webdriver
from page.webpage import WebPage
from page_object.searchpage import SearchPage@pytest.fixture(scope='session')
def driver():driver = webdriver.Chrome()yield driverdriver.quit()def test_search(driver):page = SearchPage(driver)page.search("Moonshot AI")assert "Moonshot AI" in driver.title

二、集成 Jenkins 实现持续集成

1. 安装 Jenkins
  • 下载并安装 Jenkins。

  • 启动 Jenkins 并完成初始配置。

2. 创建 Jenkins 任务
  • 在 Jenkins 中创建一个新的自由风格项目。

  • 配置源码管理(如 Git),指定项目代码仓库地址。

  • 配置构建触发器(如定时任务或代码提交触发)。

3. 配置构建环境
  • 在 Jenkins 任务的构建步骤中,添加执行 Shell 脚本:

bash复制

pip install -r requirements.txt
pytest --html=report.html
4. 配置邮件通知
  • 安装 Jenkins 的邮件扩展插件。

  • 在项目配置中设置邮件通知,指定收件人和邮件内容。

5. 设置定时任务
  • 在 Jenkins 任务的构建触发器中,选择“定时构建”。

  • 配置定时任务的 Cron 表达式,例如:

    0 0 * * * # 每天凌晨 0 点触发

三、适配企业需求

  1. 多环境适配

    • config.ini 中添加不同环境的配置。

    • 通过 Jenkins 参数化构建,动态选择测试环境。

  2. 测试报告

    • 使用 pytest-html 插件生成测试报告。

    • 将报告上传到 Jenkins 的工作空间,方便查看。

  3. 自动部署

    • 在 Jenkins 中配置部署脚本,将测试结果或相关文件部署到指定服务器。

通过以上步骤,你可以完成一个完整的 WebUI 自动化测试框架搭建,并通过 Jenkins 实现持续集成、自动部署和定时任务,满足企业级测试需求。

http://www.xdnf.cn/news/1265023.html

相关文章:

  • Linux网络--2、Socket编程
  • 自由学习记录(79)
  • Pytest项目_day08(setup、teardown前置后置操作)
  • NY128NY133美光固态闪存NY139NY143
  • No time to train! Training-Free Reference-Based Instance Segmentation之论文阅读
  • 笔试——Day32
  • 【ros-humble】2.自定义通讯接口发布者python,qt使用(话题)
  • 使用 ast-grep 精准匹配指定类的方法调用(以 Java 为例)
  • V4L2摄像头采集 + WiFi实时传输实战全流程
  • 汇编语言和高级语言的差异
  • 【从0到1制作一块STM32开发板】6. PCB布线--信号部分
  • 【ESP32-menuconfig(1) -- Build Type及Bootloader config】
  • FreeRTOS入门知识(初识RTOS)(一)
  • WinForm 实战 (进度条):用 ProgressBar+Timer 打造动态进度展示功能
  • BBH详解:面向大模型的高阶推理评估基准与数据集分析
  • TyDi QA:面向语言类型多样性的信息检索问答基准
  • 柠檬笔试——野猪骑士
  • Python的七大框架对比分析
  • 若依前后端分离版学习笔记(七)—— Mybatis,分页,数据源的配置及使用
  • Day01 项目概述,环境搭建
  • 【代码随想录day 14】 力扣 104.二叉树的最大深度
  • 【Nginx基础①】 | VS Code Remote SSH 环境下的静态资源与反向代理配置实践
  • 防御保护09
  • 【Unity3D实例-功能-跳跃】角色跳跃
  • 文件结构树的├、└、─ 符号
  • 机器学习及其KNN算法
  • 力扣 hot100 Day69
  • ISL9V3040D3ST-F085C一款安森美 ON生产的汽车点火IGBT模块,绝缘栅双极型晶体管ISL9V3040D3ST汽车点火电路中的线圈驱动器
  • P1044 [NOIP 2003 普及组] 栈
  • 项目一系列-第4章 在线接口文档 代码模板改造