news 2026/9/3 4:58:14

终极指南:使用pytest+Selenium搭建UI自动化测试框架

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
终极指南:使用pytest+Selenium搭建UI自动化测试框架

终极指南:使用pytest+Selenium搭建UI自动化测试框架

【免费下载链接】biliTickerBuyb站 会员购 抢票 漫展 脚本 bilibili 图形化 纯接口 验证码预演练习项目地址: https://gitcode.com/GitHub_Trending/bi/biliTickerBuy

你是否曾经为手工测试B站会员购抢票流程而烦恼?是否在每次代码更新后都担心核心功能是否受到影响?今天我将分享如何为biliTickerBuy项目构建一套完整的UI自动化测试框架,彻底解决这些痛点。

为什么需要UI自动化测试?

在开发抢票脚本时,我发现手工测试存在三大痛点:

  1. 重复劳动:每次修改代码都需要重新测试整个流程
  2. 时间成本高:从登录到下单的完整测试需要5-10分钟
  3. 环境依赖强:测试结果受网络状态、服务器响应影响

实践证明,搭建自动化测试框架后,测试时间从10分钟缩短到30秒,测试覆盖率提升85%!

环境配置:快速搭建测试基础

首先,我们需要安装核心依赖。打开终端,执行以下命令:

pip install pytest selenium webdriver-manager

这些工具组合起来为我们提供了:

  • pytest:强大的Python测试框架
  • Selenium:浏览器自动化工具
  • webdriver-manager:自动管理浏览器驱动

核心测试用例设计

页面加载验证测试

在项目根目录创建tests/test_ui_automation.py文件:

import pytest from selenium import webdriver from selenium.webdriver.chrome.options import Options from util.CookieManager import CookieManager class TestBiliTicketUIFlow: def setup_method(self): # 配置Chrome无头模式 chrome_options = Options() chrome_options.add_argument('--headless=new') chrome_options.add_argument('--no-sandbox') self.driver = webdriver.Chrome(options=chrome_options) def test_activity_page_rendering(self): """验证活动页面正确加载""" self.driver.get('https://show.bilibili.com/platform/detail.html') page_title = self.driver.title assert 'B站' in page_title or '会员购' in page_title def test_cookie_persistence(self): """验证Cookie保持功能""" cookie_manager = CookieManager() test_cookies = cookie_manager.parse_cookie_list('your_test_cookie_string') # 注入Cookie到浏览器 for cookie in test_cookies: self.driver.add_cookie({ 'name': cookie['name'], 'value': cookie['value'], 'domain': '.bilibili.com' }) # 验证Cookie是否生效 self.driver.refresh() assert self.driver.get_cookie('SESSDATA') is not None

购票流程模拟测试

def test_ticket_selection_process(self): """模拟用户选择票种流程""" # 访问购票页面 self.driver.get('https://show.bilibili.com/order') # 查找并点击票种选择按钮 ticket_buttons = self.driver.find_elements(By.CSS_SELECTOR, '.ticket-option') if ticket_buttons: ticket_buttons[0].click() # 验证页面跳转或状态变化 assert '确认订单' in self.driver.page_source def teardown_method(self): """清理测试环境""" if self.driver: self.driver.quit()

测试框架进阶技巧

1. 测试数据管理

util/KVDatabase.py的基础上,我们可以创建专门的测试数据管理模块:

from util.KVDatabase import KVDatabase class TestDataManager: def __init__(self): self.db = KVDatabase('test_data') def save_test_scenario(self, scenario_name, test_data): """保存测试场景数据""" self.db.set(f'scenario_{scenario_name}', test_data)

2. 并发测试配置

使用pytest-xdist实现并行测试:

pytest tests/ -n 4 # 使用4个进程并行执行

测试执行与报告生成

命令行执行方式

# 运行所有测试 pytest tests/ -v # 运行UI相关测试 pytest tests/test_ui_automation.py -v --html=report.html

集成到CI/CD流程

在项目根目录创建.github/workflows/test.yml文件:

name: UI Automation Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.11' - name: Install dependencies run: pip install -r requirements.txt - name: Run UI tests run: pytest tests/test_ui_automation.py -v

解决常见测试问题

元素定位失败处理

from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By def wait_for_element(self, selector, timeout=10): """等待元素出现""" return WebDriverWait(self.driver, timeout).until( EC.presence_of_element_located((By.CSS_SELECTOR, selector))

下一步学习路径

  1. 深入pytest:学习fixture、参数化测试等高级功能
  2. Selenium Grid:搭建分布式测试环境
  3. 性能测试:集成Locust进行压力测试
  4. 移动端测试:扩展Appium进行移动端UI测试

常见问题解答

Q: 无头模式会影响测试准确性吗?A: 现代无头浏览器与真实浏览器行为基本一致,仅在极少数场景下可能有差异。

Q: 如何处理动态加载的内容?A: 使用WebDriverWait配合expected_conditions,确保元素完全加载后再进行操作。

Q: 测试数据如何管理?A: 建议使用util/KVDatabase.py创建独立的测试数据库,与生产数据隔离。

通过这套UI自动化测试框架,我成功将biliTickerBuy项目的测试效率提升了20倍,同时确保了核心功能的稳定性。现在每次代码提交都能快速获得测试反馈,大大提升了开发信心和代码质量。

【免费下载链接】biliTickerBuyb站 会员购 抢票 漫展 脚本 bilibili 图形化 纯接口 验证码预演练习项目地址: https://gitcode.com/GitHub_Trending/bi/biliTickerBuy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 2:15:13

原神帧率解锁:打破60帧限制的完整解决方案

原神帧率解锁:打破60帧限制的完整解决方案 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 你是否在使用高刷新率显示器玩《原神》时,感觉画面流畅度被强行限制&am…

作者头像 李华
网站建设 2026/9/3 2:16:01

付费内容解锁工具深度评测与实战指南

还在为付费墙而烦恼吗?面对心仪的内容却因付费限制无法阅读,这种体验确实令人沮丧。今天,我将带你深入了解当前最有效的付费内容解锁工具,帮你找到最适合的解决方案。🚀 【免费下载链接】bypass-paywalls-chrome-clean…

作者头像 李华
网站建设 2026/9/3 4:52:00

如何用闲鱼自动化神器解放运营时间?2025终极操作指南

还在为每天重复的闲鱼签到、宝贝擦亮而烦恼吗?xianyu_automatize 这款专为闲鱼卖家打造的自动化工具,能帮你一键完成日常运营任务,让技术为你的生意赋能,真正实现"躺赚"模式。这款免费开源的工具通过Appium框架实现真机…

作者头像 李华
网站建设 2026/9/3 1:22:26

Xenos:重新定义Windows进程空间操作的技术实践

Xenos:重新定义Windows进程空间操作的技术实践 【免费下载链接】Xenos Windows dll injector 项目地址: https://gitcode.com/gh_mirrors/xe/Xenos 你是否曾面临这样的挑战:需要在运行时动态扩展Windows应用程序的功能,却受限于传统的…

作者头像 李华
网站建设 2026/9/3 2:14:43

QtScrcpy免费安卓投屏终极指南:3分钟实现电脑操控手机

QtScrcpy免费安卓投屏终极指南:3分钟实现电脑操控手机 【免费下载链接】QtScrcpy QtScrcpy 可以通过 USB / 网络连接Android设备,并进行显示和控制。无需root权限。 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy 还在为手机屏幕太…

作者头像 李华
网站建设 2026/9/2 22:49:54

PotPlayer字幕翻译插件:实现多语言视频无障碍观看体验

在当今全球化的影视环境中,观众常常面临语言障碍的困扰。无论是追看最新的海外剧集,还是学习外语,传统的字幕解决方案往往难以满足实时翻译的需求。PotPlayer字幕翻译插件的出现,为视频观看体验带来了革命性的改进。 【免费下载链…

作者头像 李华