发布时间:2026/7/19 12:02:50
Selene 与 Pytest 集成:构建企业级 Python 测试框架的完整方案
Selene 与 Pytest 集成构建企业级 Python 测试框架的完整方案【免费下载链接】seleneUser-oriented Web UI browser tests in Python项目地址: https://gitcode.com/gh_mirrors/sel/seleneSelene 是一个面向用户的 Python Web UI 测试框架结合 Pytest 强大的测试管理能力可以构建高效、可维护的企业级测试解决方案。本文将详细介绍如何将 Selene 与 Pytest 无缝集成从环境配置到高级功能实现帮助测试团队快速搭建专业的自动化测试框架。为什么选择 Selene 与 Pytest 集成在企业级测试场景中选择合适的工具组合至关重要。Selene 提供了简洁直观的 API 和智能等待机制而 Pytest 则以灵活的测试组织、丰富的插件生态和强大的 fixture 系统著称。两者结合可以带来以下优势简洁的测试代码Selene 的链式 API 设计使测试逻辑更清晰减少冗余代码智能等待机制内置的等待策略减少了显式等待的使用提高测试稳定性灵活的测试组织Pytest 的模块化设计支持复杂测试场景的组织与管理丰富的插件生态通过 Pytest 插件扩展报告、并行执行等高级功能强大的依赖注入利用 Pytest fixture 实现测试资源的高效管理环境准备与基础配置安装必要依赖首先确保你的环境中安装了 Python 3.7然后通过以下命令安装 Selene 和 Pytestpip install selene pytest如果你使用 Poetry 进行依赖管理可以通过项目根目录下的 pyproject.toml 文件安装依赖poetry install配置 Pytest 作为默认测试运行器在 PyCharm 等 IDE 中建议将 Pytest 配置为默认测试运行器以便获得更好的集成体验。通过File Settings Tools Python Integrated Tools路径在 Testing 部分将 Default test runner 设置为 pytest。基本集成方案浏览器管理与 Fixture简单的浏览器 Fixture在测试中我们通常需要为每个测试函数创建一个独立的浏览器实例。通过 Pytest fixture 可以轻松实现这一点# tests/acceptance/custom_driver_via_fixtures/conftest.py import pytest from selenium import webdriver from selenium.webdriver.chrome.service import Service from selene import Config, Browser pytest.fixture(scopefunction) def driver_per_test(): chrome_driver webdriver.Chrome(serviceService()) yield chrome_driver chrome_driver.quit() pytest.fixture(scopefunction) def browser(driver_per_test): yield Browser(Config(driverdriver_per_test))这个简单的配置创建了两个 fixturedriver_per_test负责管理浏览器驱动的生命周期browser则提供 Selene 的浏览器实例。通过将 fixture 作用域设置为function确保每个测试函数都获得一个全新的浏览器实例避免测试间的相互干扰。使用共享浏览器实例在某些情况下为了提高测试执行效率我们可能希望在多个测试函数间共享一个浏览器实例。可以通过将 fixture 作用域设置为module或session来实现# tests/integration/conftest.py import pytest from selenium import webdriver from selenium.webdriver.chrome.service import Service from selene import Config, Browser pytest.fixture(scopesession) def chrome_driver(): chrome_driver webdriver.Chrome(serviceService()) yield chrome_driver chrome_driver.quit() pytest.fixture(scopefunction) def session_browser(chrome_driver): yield Browser(Config(driverchrome_driver))chrome_driverfixture 会在整个测试会话期间创建并复用一个浏览器驱动实例而session_browserfixture 则为每个测试函数提供一个新的 Selene Browser 实例共享同一个驱动。这种方式在保持测试隔离性的同时减少了浏览器启动和关闭的开销。高级配置跨平台测试与并行执行跨平台测试配置企业级测试通常需要在多种环境中执行包括不同的浏览器、操作系统甚至移动设备。Selene 与 Pytest 结合可以轻松实现跨平台测试# examples/run_cross_platform/tests/conftest.py import pytest from appium.options.android import UiAutomator2Options from examples.run_cross_platform import project from selene import browser pytest.fixture(scopefunction, autouseTrue) def driver_management(): if project.config.context is project.Context.bstack_android: android_options UiAutomator2Options() android_options.app bs://c700ce60cf13ae8ed97705a55b8e022f13c5827c android_options.set_capability( bstack:options, { deviceName: Google Pixel 7, **project.config.bstack_creds, }, ) browser.config.driver_options android_options browser.config.driver_remote_url http://hub.browserstack.com/wd/hub elif project.config.context is project.Context.local_web: browser.config.base_url https://www.wikipedia.org yield browser.quit()这个示例展示了如何通过 Pytest fixture 根据不同的测试上下文配置不同的驱动选项实现 Web 和移动平台的测试。通过环境变量或配置文件你可以轻松切换测试环境无需修改测试代码。并行测试执行随着测试套件的增长执行时间会成为瓶颈。Pytest-xdist 插件可以帮助我们实现测试的并行执行大幅缩短测试周期pytest -n auto这个命令会根据你的 CPU 核心数量自动分配并行测试进程。在大型测试套件中这可以将执行时间减少数倍。为了确保并行测试的稳定性需要注意以下几点确保测试用例之间没有共享状态使用独立的测试数据为每个并行进程配置独立的资源如浏览器实例实际案例TodoMVC 测试实现让我们通过一个实际案例来展示 Selene 与 Pytest 集成的强大功能。我们将测试 TodoMVC 应用这是一个常见的前端框架演示项目。测试场景我们将实现以下测试场景添加新任务标记任务为完成过滤任务列表清除已完成任务测试实现# tests/examples/todomvc/pagemodules_approach/todomvc_test.py import pytest from selene import browser, have from tests.examples.todomvc.pagemodules_approach.pages import tasks pytest.fixture(scopefunction, autouseTrue) def visit_todomvc(): browser.open(https://todomvc.com/examples/emberjs/) browser.should(have.title(Ember TodoMVC)) yield def test_add_new_tasks(): tasks.add(Learn Selene) tasks.add(Integrate with Pytest) tasks.should_have(Learn Selene, Integrate with Pytest) def test_complete_task(): tasks.add(Test task completion) tasks.complete(Test task completion) tasks.should_have_completed(Test task completion) tasks.should_have_active(0) def test_filter_tasks(): tasks.add(Active task) tasks.add(Completed task) tasks.complete(Completed task) tasks.filter.active() tasks.should_have(Active task) tasks.should_not_have(Completed task) tasks.filter.completed() tasks.should_have(Completed task) tasks.should_not_have(Active task) tasks.filter.all() tasks.should_have(Active task, Completed task) def test_clear_completed_tasks(): tasks.add(Task to keep) tasks.add(Task to complete) tasks.complete(Task to complete) tasks.clear_completed() tasks.should_have(Task to keep) tasks.should_not_have(Task to complete)页面对象模块为了保持测试代码的可维护性我们使用页面对象模式组织元素定位和操作# tests/examples/todomvc/pagemodules_approach/pages/tasks.py from selene import browser, by, be class Tasks: def __init__(self): self.new_task_input browser.element(by.id(new-todo)) self.task_list browser.all(by.css(#todo-list li)) self.clear_completed_button browser.element(by.css(#clear-completed)) self.footer browser.element(by.css(#footer)) def add(self, text): self.new_task_input.type(text).press_enter() def complete(self, text): self.task_list.element_by(have.exact_text(text)).element(by.css(.toggle)).click() def should_have(self, *texts): self.task_list.should(have.exact_texts(*texts)) def should_not_have(self, text): self.task_list.element_by(have.exact_text(text)).should(be.absent) def should_have_completed(self, text): self.task_list.element_by(have.exact_text(text)).should(have.css_class(completed)) def should_have_active(self, count): self.footer.element(by.css(.todo-count)).should(have.text(f{count} items left)) def clear_completed(self): self.clear_completed_button.click() class Filter: def active(self): browser.element(by.link_text(Active)).click() def completed(self): browser.element(by.link_text(Completed)).click() def all(self): browser.element(by.link_text(All)).click() filter Filter() tasks Tasks()测试执行与结果通过 Pytest 运行测试非常简单只需在项目根目录执行以下命令pytest tests/examples/todomvc/在 IDE 中你可以直接点击测试函数旁边的运行按钮执行单个测试执行成功后你将看到类似 TodoMVC 应用界面的测试结果最佳实践与高级技巧测试数据管理对于企业级测试良好的测试数据管理至关重要。可以使用 Pytest 参数化功能结合外部数据文件import pytest import json with open(tests/data/task_scenarios.json) as f: task_scenarios json.load(f) pytest.mark.parametrize(scenario, task_scenarios) def test_task_management(scenario): for action in scenario[actions]: if action[type] add: tasks.add(action[text]) elif action[type] complete: tasks.complete(action[text]) for assertion in scenario[assertions]: if assertion[type] should_have: tasks.should_have(*assertion[texts])测试报告与可视化Pytest 提供了多种报告插件可以生成详细的测试报告pytest-html生成交互式 HTML 报告allure-pytest生成美观的 Allure 报告pytest-metadata添加环境信息到报告中安装并使用 pytest-htmlpip install pytest-html pytest --htmlreport.html失败自动截图在测试失败时自动捕获屏幕截图对于问题诊断非常有帮助。可以通过 Pytest 的钩子函数实现# conftest.py import pytest from selene import browser pytest.hookimpl(tryfirstTrue, hookwrapperTrue) def pytest_runtest_makereport(item, call): outcome yield rep outcome.get_result() if rep.when call and rep.failed: browser.save_screenshot(fscreenshots/{item.name}.png)自定义条件与命令Selene 允许你扩展自定义条件和命令以满足特定项目需求# examples/custom_conditions.py from selene import have, command from selene.core.condition import Condition from selene.core.element import Element def have_value_containing(text: str) - Condition[Element]: return have.attribute(value).value_containing(text) Element.type_and_enter command(lambda element, text: element.type(text).press_enter()) # 在测试中使用 browser.element(#search).should(have_value_containing(selene)) browser.element(#new-todo).type_and_enter(Learn custom commands)总结与下一步Selene 与 Pytest 的集成提供了一个强大而灵活的企业级测试解决方案。通过本文介绍的方法你可以构建一个高效、可维护的自动化测试框架支持从简单到复杂的各种测试场景。下一步你可以探索以下高级主题CI/CD 集成将测试集成到 Jenkins、GitHub Actions 等 CI/CD 系统视觉测试结合 Applitools 等工具实现视觉回归测试API 测试集成结合 requests 库实现端到端 APIUI 测试性能测试添加性能监控和基准测试通过不断优化和扩展你的测试框架你可以为团队提供更快、更可靠的质量反馈从而加速产品迭代并提高软件质量。Selene 和 Pytest 都是活跃的开源项目建议定期查看它们的官方文档和更新日志以充分利用最新功能和最佳实践。【免费下载链接】seleneUser-oriented Web UI browser tests in Python项目地址: https://gitcode.com/gh_mirrors/sel/selene创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

City-Roads WebGL大规模地理数据渲染架构技术白皮书
2026/7/19 12:02:50

City-Roads WebGL大规模地理数据渲染架构技术白皮书

City-Roads WebGL大规模地理数据渲染架构技术白皮书 【免费下载链接】city-roads Visualization of all roads within any city 项目地址: https://gitcode.com/gh_mirrors/ci/city-roads 技术执行摘要:高性能城市道路可视化引擎架构分析 City-Roads项目是一…

阅读更多
鸿蒙 ArkTS 实战:Logic Sudoku 从逻辑数独到成绩记录完整解析
2026/7/19 12:02:50

鸿蒙 ArkTS 实战:Logic Sudoku 从逻辑数独到成绩记录完整解析

鸿蒙 ArkTS 实战:Logic Sudoku 从逻辑数独到成绩记录完整解析 前言 Logic Sudoku 是一个面向 逻辑数独 的鸿蒙 ArkTS 单页应用。项目代码集中在 Index.ets,通过 State 管理记录列表、输入内容、声音开关和状态提示,并用 ForEach 把每一轮记…

阅读更多
如何用Path of Building 2轻松打造百万DPS的PoE2角色
2026/7/19 11:02:49

如何用Path of Building 2轻松打造百万DPS的PoE2角色

如何用Path of Building 2轻松打造百万DPS的PoE2角色 【免费下载链接】PathOfBuilding-PoE2 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding-PoE2 还在为《流放之路2》复杂的角色构建而头疼吗?面对海量天赋节点和装备搭配不知从何下手&a…

阅读更多
Xplique 1.5.2新特性详解:10大归因方法与3大实用工具升级
2026/7/19 19:02:50

Xplique 1.5.2新特性详解:10大归因方法与3大实用工具升级

Xplique 1.5.2新特性详解:10大归因方法与3大实用工具升级 【免费下载链接】xplique 👋 Xplique is a Neural Networks Explainability Toolbox 项目地址: https://gitcode.com/gh_mirrors/xp/xplique Xplique 1.5.2作为一款功能强大的神经网络可解…

阅读更多
为什么选择Structurae?探索高性能JavaScript数据结构的终极指南
2026/7/19 19:02:50

为什么选择Structurae?探索高性能JavaScript数据结构的终极指南

为什么选择Structurae?探索高性能JavaScript数据结构的终极指南 【免费下载链接】structurae Data structures for high-performance JavaScript applications. 项目地址: https://gitcode.com/gh_mirrors/st/structurae 在当今快速发展的Web应用领域&#x…

阅读更多
Priceline Design System 测试策略:单元测试与集成测试的完整方案
2026/7/19 19:02:50

Priceline Design System 测试策略:单元测试与集成测试的完整方案

Priceline Design System 测试策略:单元测试与集成测试的完整方案 【免费下载链接】design-system Priceline.com Design System 项目地址: https://gitcode.com/gh_mirrors/desig/design-system Priceline Design System 是一个专业的企业级设计系统&#x…

阅读更多
三分钟掌握社交自动化上传:多平台Cookie状态管理终极方案
2026/7/19 19:02:50

三分钟掌握社交自动化上传:多平台Cookie状态管理终极方案

三分钟掌握社交自动化上传:多平台Cookie状态管理终极方案 【免费下载链接】social-auto-upload 自动化上传视频到社交媒体:抖音、小红书、视频号、tiktok、youtube、bilibili 项目地址: https://gitcode.com/GitHub_Trending/so/social-auto-upload …

阅读更多
GHelper终极完整教程:免费轻量级华硕笔记本性能优化神器
2026/7/19 19:02:50

GHelper终极完整教程:免费轻量级华硕笔记本性能优化神器

GHelper终极完整教程:免费轻量级华硕笔记本性能优化神器 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, …

阅读更多
kableExtra:终极R表格美化工具,快速创建专业级HTML和LaTeX表格
2026/7/19 18:02:50

kableExtra:终极R表格美化工具,快速创建专业级HTML和LaTeX表格

kableExtra:终极R表格美化工具,快速创建专业级HTML和LaTeX表格 【免费下载链接】kableExtra Construct Complex Table with knitr::kable() pipe. 项目地址: https://gitcode.com/gh_mirrors/ka/kableExtra 在R语言的数据分析和报告生成中&…

阅读更多
噗叽短视频界面分析
2026/7/19 0:02:46

噗叽短视频界面分析

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

阅读更多
噗叽自动化评论脚本基本完成
2026/7/19 0:02:46

噗叽自动化评论脚本基本完成

整个开发过程,耗时2.5小时:

阅读更多
游戏服务器性能调优:基于 ECS 架构的确定性帧同步与 Go 协程并发模型实践
2026/7/19 0:02:46

游戏服务器性能调优:基于 ECS 架构的确定性帧同步与 Go 协程并发模型实践

游戏服务器性能调优:基于 ECS 架构的确定性帧同步与 Go 协程并发模型实践 一、游戏服务器的性能铁三角:帧率、延迟、并发数 游戏服务器与普通 Web 服务器的性能指标完全不同。Web 服务器关注 QPS 和 P99 延迟,游戏服务器关注帧速率&#xff0…

阅读更多
噗叽短视频界面分析
2026/7/19 0:02:46

噗叽短视频界面分析

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

阅读更多
噗叽自动化评论脚本基本完成
2026/7/19 0:02:46

噗叽自动化评论脚本基本完成

整个开发过程,耗时2.5小时:

阅读更多
游戏服务器性能调优:基于 ECS 架构的确定性帧同步与 Go 协程并发模型实践
2026/7/19 0:02:46

游戏服务器性能调优:基于 ECS 架构的确定性帧同步与 Go 协程并发模型实践

游戏服务器性能调优:基于 ECS 架构的确定性帧同步与 Go 协程并发模型实践 一、游戏服务器的性能铁三角:帧率、延迟、并发数 游戏服务器与普通 Web 服务器的性能指标完全不同。Web 服务器关注 QPS 和 P99 延迟,游戏服务器关注帧速率&#xff0…

阅读更多
基于Dify与DeepSeek构建私有知识库问答系统实战指南
2026/7/18 10:52:26

基于Dify与DeepSeek构建私有知识库问答系统实战指南

在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…

阅读更多
FAE放射组学分析工具:医学影像特征探索的完整解决方案
2026/7/17 5:34:11

FAE放射组学分析工具:医学影像特征探索的完整解决方案

FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…

阅读更多
DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!
2026/7/18 14:45:26

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖! 【免费下载链接】DesktopNaotu 桌面版脑图 (百度脑图离线版,思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool) 项目地址:…

阅读更多