首页/新闻资讯/正文详情

Selenium+Pytest+Allure自动化测试实战指南

发布时间:2026/11/2 21:41:24 来源:云帆数科 栏目:资讯中心
Selenium+Pytest+Allure自动化测试实战指南
1. 项目概述SeleniumPytestAllure测试组合的价值在Web应用开发中UI自动化测试是保证产品质量的重要环节。这套技术组合中Selenium负责浏览器自动化操作Pytest作为测试执行框架Allure则提供可视化报告三者协同工作形成完整的测试解决方案。我曾在电商项目中用这套组合将回归测试时间从8小时压缩到25分钟关键页面测试覆盖率提升至98%。这种组合特别适合需要频繁回归测试的敏捷开发团队以及需要向非技术人员展示测试结果的场景。2. 环境搭建与工具配置2.1 基础环境安装Python环境建议使用3.7版本避免兼容性问题。使用virtualenv创建隔离环境python -m venv test_env source test_env/bin/activate # Linux/Mac test_env\Scripts\activate # Windows核心组件安装命令pip install selenium pytest allure-pytest注意Allure需要额外安装命令行工具从GitHub Releases下载对应版本解压后将bin目录加入PATH环境变量2.2 浏览器驱动配置以Chrome为例需下载与浏览器版本匹配的chromedriver# 查看Chrome版本 google-chrome --version # 下载对应驱动 wget https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip unzip chromedriver_linux64.zip mv chromedriver /usr/local/bin/常见问题处理版本不匹配通过Chrome菜单→帮助→关于Google Chrome查看精确版本号权限问题执行chmod x chromedriver路径问题建议将驱动放在系统PATH包含的目录3. 测试框架设计与实现3.1 项目目录结构推荐采用分层设计project/ ├── pages/ # 页面对象类 │ ├── login_page.py │ └── home_page.py ├── tests/ # 测试用例 │ ├── test_login.py │ └── test_search.py ├── conftest.py # pytest fixtures ├── pytest.ini # 配置文件 └── reports/ # 测试报告3.2 页面对象模式实现示例登录页面封装# pages/login_page.py 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: def __init__(self, driver): self.driver driver self.username_locator (By.ID, username) self.password_locator (By.ID, password) self.submit_locator (By.CSS_SELECTOR, button[typesubmit]) def enter_credentials(self, username, password): WebDriverWait(self.driver, 10).until( EC.presence_of_element_located(self.username_locator) ).send_keys(username) self.driver.find_element(*self.password_locator).send_keys(password) def submit(self): self.driver.find_element(*self.submit_locator).click()3.3 测试用例编写结合Pytest参数化实现数据驱动测试# tests/test_login.py import pytest from pages.login_page import LoginPage pytest.mark.parametrize(username,password,expected, [ (admin, correct_pwd, True), (guest, wrong_pwd, False), (, , False) ]) def test_login(driver, username, password, expected): 测试不同账号密码组合的登录结果 login_page LoginPage(driver) login_page.enter_credentials(username, password) login_page.submit() if expected: assert dashboard in driver.current_url else: assert error in driver.page_source4. Allure报告高级应用4.1 测试步骤注解使用装饰器增强报告可读性import allure allure.feature(用户认证) allure.story(登录功能) def test_login_with_allure(driver): with allure.step(打开登录页面): driver.get(https://example.com/login) with allure.step(输入凭证): LoginPage(driver).enter_credentials(admin, admin123) with allure.step(提交表单): LoginPage(driver).submit() allure.attach(driver.get_screenshot_as_png(), name登录后页面, attachment_typeallure.attachment_type.PNG)4.2 报告生成与查看执行测试并生成报告pytest tests/ --alluredir./results allure serve ./results # 本地查看 allure generate ./results -o ./report --clean # 生成静态报告关键参数说明--alluredir指定结果文件存储目录--clean清除历史结果-o指定报告输出目录5. 常见问题解决方案5.1 元素定位问题处理典型定位失败场景处理方案问题现象解决方案代码示例元素未加载完成使用显式等待WebDriverWait(driver,10).until(EC.presence_of_element_located(locator))元素在iframe中切换iframe上下文driver.switch_to.frame(frame_name)动态ID元素使用XPath或CSS选择器//div[contains(class,login-form)]5.2 测试稳定性提升技巧智能等待策略def wait_for_ajax(driver): WebDriverWait(driver, 10).until( lambda d: d.execute_script(return jQuery.active 0) )失败自动重试 在pytest.ini中添加[pytest] reruns 2 reruns_delay 1跨浏览器支持pytest.fixture(params[chrome, firefox]) def driver(request): if request.param chrome: options webdriver.ChromeOptions() return webdriver.Chrome(optionsoptions) else: return webdriver.Firefox()6. 高级应用场景6.1 持续集成集成Jenkins Pipeline示例pipeline { agent any stages { stage(Test) { steps { sh pytest tests/ --alluredir./results } } stage(Report) { steps { allure includeProperties: false, jdk: , results: [[path: results]] } } } }6.2 移动端响应式测试通过设置浏览器窗口尺寸测试响应式布局allure.story(响应式布局测试) pytest.mark.parametrize(width,height, [(320,568), (768,1024), (1920,1080)]) def test_responsive(driver, width, height): driver.set_window_size(width, height) # 执行布局测试逻辑 assert element.is_displayed()这套技术组合经过多个百万级用户项目的验证在保持测试代码可维护性的同时能有效提升测试效率。关键在于合理设计页面对象模型配合Allure的丰富报告功能使自动化测试真正成为质量保障的利器。

相关推荐

转录组数据标准化:从Count到TPM的完整指南
转录组数据标准化:从Count到TPM的完整指南

1. 转录组数据标准化:从Count到TPM的完整指南在转录组数据分析中,我们经常会遇到一个关键问题:如何比较不同基因或不同样本间的表达量?原始测序数据经过比对后得到的count值(每个基因的reads计数)虽然直观&… · 2026/11/2 21:41:24

Unity3D FPS完整版工程解析:从导入到模块拆解与避坑指南
Unity3D FPS完整版工程解析:从导入到模块拆解与避坑指南

简介:这份资源是面向Unity3D初学者与进阶开发者的完整FPS游戏工程源码包,围绕第一人称射击游戏的核心实现展开,涵盖场景构建、CharacterController角色控制、射线检测射击机制、UNet与Mirror网络同步、NavMesh敌人AI、Canvas界面、AudioMixer… · 2026/11/2 21:40:24

高光谱数据进PyTorch:dataloader设计与调优实战指南
高光谱数据进PyTorch:dataloader设计与调优实战指南

简介:这份资源面向使用PyTorch做深度学习、需要处理高光谱图像的研究者与工程实践者,聚焦于用DataLoader高效加载与预处理高光谱数据这一关键环节。包内共7个文件,以3个Python脚本为核心,辅以2个编译缓存文件与2个mat格式数据文件… · 2026/11/2 21:40:24

微信小店推客佣金计算问题与解决方案
微信小店推客佣金计算问题与解决方案

1. 微信小店推客佣金计算问题的根源分析微信小店推客佣金计算错误的问题,本质上源于系统架构设计与实际业务场景的不匹配。根据微信开放社区的技术文档和实际运营案例,这类问题通常出现在以下三种典型场景中:多级分佣场景:当商品涉… · 2026/11/2 23:06:19

ROS2高级面试题汇总:DDS、QoS、执行器与实时性排障
ROS2高级面试题汇总:DDS、QoS、执行器与实时性排障

面试季一到,后台问得最多的一类问题就是:ROS2高级岗位到底考什么。我这些年带过几个机器人方向的团队,也帮不少朋友做过模拟面试,最大的感受是,网上流传的ROS2高级面试题汇总大多停留在“节点、话题、服务、动作”这种… · 2026/11/2 23:06:19

基于Three.js与Vue 3的智慧仓储数字孪生实战:从Blender建模到数据驱动
基于Three.js与Vue 3的智慧仓储数字孪生实战:从Blender建模到数据驱动

1. 项目缘起与整体思路拆解1.1 为什么选择“智慧仓储”作为数字孪生切入点做3D数字孪生项目,选题比技术选型更关键。我前后参与过好几个数字孪生项目,从园区级到产线级都碰过,最后发现智慧仓储是最适合作为数字孪生入门到进阶的练手场景。原因… · 2026/11/2 23:05:19

Pygame游戏循环与核心机制:事件、Surface、Rect与帧率控制详解
Pygame游戏循环与核心机制:事件、Surface、Rect与帧率控制详解

简介:这份Pygame教程面向已掌握Python基础、希望入门2D游戏开发的初学者与自学者,系统讲解游戏主循环、Surface对象、Event事件、Rect区域等核心概念,帮助读者从零搭建可运行的小游戏。教程以知识点配合示例的方式组织,覆盖Displa… · 2026/11/2 23:05:19

从零搭建VoiceStudio:音色克隆与TTS合成全流程实战指南
从零搭建VoiceStudio:音色克隆与TTS合成全流程实战指南

第一次把 VoiceStudio 这套工具链完整跑通,是在一个赶制有声样片的深夜——当时要在两天内交付三条不同音色的 demo,甲方对声音质感的要求又特别高,临时找真人录制根本不现实。也正是那次被逼到墙角,我才真正把 VoiceStudio 从“能… · 2026/11/2 23:05:19

矿山安全管理闭环系统:物联网与大数据技术应用
矿山安全管理闭环系统:物联网与大数据技术应用

1. 矿山安全管理的现状与挑战矿山行业作为国民经济的重要支柱产业,其安全生产问题一直备受关注。近年来,尽管各类安全法规不断完善,但矿山事故仍时有发生,暴露出传统安全管理模式的局限性。当前矿山安全管理主要面临三大挑战&… · 2026/11/2 23:05:19

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18

雷达信号调制技术解析:从LFM到伪线性调频原理与应用
雷达信号调制技术解析:从LFM到伪线性调频原理与应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 1:01:15

基于MAX14431与TM4C123的工业SPI隔离电路设计全攻略
基于MAX14431与TM4C123的工业SPI隔离电路设计全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 1:01:15

PLFM_RADAR:相位线性调频雷达信号处理框架
PLFM_RADAR:相位线性调频雷达信号处理框架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 1:01:15

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码