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

自动化测试框架集成:将Selenium集成到pytest与unittest中

目录

引言

一、Selenium简介

二、Selenium与pytest的集成

1. 安装pytest和Selenium

2. 编写测试用例

3. 运行测试

三、Selenium与unittest的集成

1. 编写测试类

2. 运行测试

四、Selenium自动化测试的最佳实践

1. 使用Page Object模式

2. 合理利用等待机制

3. 跨浏览器测试

4. 编写清晰的测试报告

五、总结


引言

随着软件开发的日益复杂,自动化测试在软件开发周期中的重要性愈发凸显。自动化测试不仅提高了测试效率,还确保了软件质量的一致性和可重复性。Selenium作为Web自动化测试领域的佼佼者,以其强大的跨浏览器支持和灵活的API设计,在自动化测试领域占据了重要地位。本文将详细探讨如何将Selenium集成到两种常见的Python测试框架——pytest和unittest中,并通过丰富的案例和代码示例,帮助新手朋友快速上手。

一、Selenium简介

Selenium是一个用于Web应用程序自动化测试的工具集,它直接运行在浏览器中,模拟用户的操作行为,如点击、输入、导航等。Selenium支持多种浏览器和平台,包括Chrome、Firefox、Edge、Safari等,且支持多种编程语言,如Java、Python、C#等。Selenium主要由几个部分组成:

  • Selenium IDE:一个用于记录、编辑和调试测试用例的图形界面工具。
  • Selenium WebDriver:提供了一套API,允许开发者编写代码来控制浏览器。
  • Selenium Grid:支持分布式测试用例执行,可以将测试用例分布到不同的测试机器上执行。
  • Selenium WebDriver API 概览
  • Selenium WebDriver API提供了丰富的功能,用于定位页面元素、模拟用户输入、处理弹窗、执行JavaScript代码等。

以下是一些常用的API示例:

from selenium import webdriver  
from selenium.webdriver.common.by import By  
from selenium.webdriver.common.keys import Keys  # 初始化WebDriver  
driver = webdriver.Chrome()  # 打开网页  
driver.get("http://www.example.com")  # 定位元素并输入文本  
search_box = driver.find_element(By.ID, "search-box")  
search_box.send_keys("Selenium")  # 模拟点击搜索按钮  
search_button = driver.find_element(By.ID, "search-button")  
search_button.click()  # 执行JavaScript代码  
driver.execute_script("alert('Hello, Selenium!');")  # 关闭浏览器  
driver.quit()

二、Selenium与pytest的集成

pytest是Python的一个非常流行的测试框架,以其简单、灵活和可扩展性著称。将Selenium集成到pytest中,可以使Web自动化测试更加高效和灵活。

1. 安装pytest和Selenium

首先,需要确保安装了pytest和Selenium。可以通过pip安装:

bash
pip install pytest selenium

2. 编写测试用例

使用pytest编写Selenium测试用例时,通常会在测试文件中定义多个测试函数,每个函数代表一个测试用例。每个测试函数都会接收一个fixture作为参数,该fixture负责初始化WebDriver并管理其生命周期。

示例:百度搜索测试

# test_baidu.py  
import pytest  
from selenium import webdriver  
from selenium.webdriver.common.by import By  
from selenium.webdriver.support.ui import WebDriverWait  
from selenium.webdriver.support import expected_conditions as EC  # 定义WebDriver fixture  
@pytest.fixture(scope="function")  
def driver():  chrome_options = webdriver.ChromeOptions()  chrome_options.add_argument("--headless")  # 无头模式运行  driver = webdriver.Chrome(options=chrome_options)  yield driver  driver.quit()  def test_baidu_search(driver):  driver.get("https://www.baidu.com")  search_box = driver.find_element(By.ID, "kw")  search_box.send_keys("Selenium")  search_button = driver.find_element(By.ID, "su")  search_button.click()  # 等待搜索结果加载  WebDriverWait(driver, 10).until(  EC.presence_of_element_located((By.CLASS_NAME, "result-op"))  )  # 验证搜索结果  assert "Selenium" in driver.title  # 运行测试  
# pytest test_baidu.py

3. 运行测试

使用pytest命令运行测试文件,pytest会自动发现并执行所有以test_开头的函数。

pytest test_baidu.py

三、Selenium与unittest的集成

unittest是Python自带的单元测试框架,虽然不如pytest灵活,但在一些项目中仍然被广泛使用。将Selenium集成到unittest中,可以实现Web自动化测试的基本需求。

1. 编写测试类

在unittest中,测试通常以测试类的形式组织,每个测试方法都以test_开头。测试类需要继承自unittest.TestCase。

示例:百度搜索测试

# test_baidu_unittest.py  
import unittest  
from selenium import webdriver  
from selenium.webdriver.common.by import By  
from selenium.webdriver.support.ui import WebDriverWait  
from selenium.webdriver.support import expected_conditions as EC  class TestBaidu(unittest.TestCase):  def setUp(self):  self.driver = webdriver.Chrome()  def test_baidu_search(self):  self.driver.get("https://www.baidu.com")  search_box = self.driver.find_element(By.ID, "kw")  search_box.send_keys("Selenium")  search_button = self.driver.find_element(By.ID, "su")  search_button.click()  # 等待搜索结果加载  WebDriverWait(self.driver, 10).until(  EC.presence_of_element_located((By.CLASS_NAME, "result-op"))  )  # 验证搜索结果  self.assertIn("Selenium", self.driver.title)  def tearDown(self):  self.driver.quit()  if __name__ == '__main__':  unittest.main()

2. 运行测试

使用unittest自带的unittest.main()函数运行测试。

python test_baidu_unittest.py

四、Selenium自动化测试的最佳实践

1. 使用Page Object模式

Page Object模式是一种将页面上的元素和操作封装成一个类的设计模式。这样做的好处是可以减少代码重复,提高测试的可维护性。例如,可以将百度首页的搜索功能封装成一个类,然后在多个测试用例中重复使用。

# baidu_page.py  
from selenium.webdriver.common.by import By  class BaiduPage:  def __init__(self, driver):  self.driver = driver  def search(self, keyword):  search_box = self.driver.find_element(By.ID, "kw")  search_box.send_keys(keyword)  search_button = self.driver.find_element(By.ID, "su")  search_button.click()  # test_baidu_with_page_object.py  
import unittest  
from selenium import webdriver  
from selenium.webdriver.support.ui import WebDriverWait  
from selenium.webdriver.support import expected_conditions as EC  
from baidu_page import BaiduPage  class TestBaiduWithPageObject(unittest.TestCase):  def setUp(self):  self.driver = webdriver.Chrome()  self.baidu_page = BaiduPage(self.driver)  def test_baidu_search(self):  self.baidu_page.search("Selenium")  WebDriverWait(self.driver, 10).until(  EC.presence_of_element_located((By.CLASS_NAME, "result-op"))  )  self.assertIn("Selenium", self.driver.title)  def tearDown(self):  self.driver.quit()  if __name__ == '__main__':  unittest.main()

2. 合理利用等待机制

在Web自动化测试中,经常需要等待页面元素加载完成后再进行操作。Selenium提供了显示等待(Explicit Wait)和隐式等待(Implicit Wait)两种机制。显示等待可以根据具体的条件等待元素,更加灵活;隐式等待则是在整个WebDriver的生命周期内设置等待时间,较为简单但不够灵活。

3. 跨浏览器测试

Selenium支持多种浏览器,可以通过修改WebDriver的初始化代码来实现跨浏览器测试。例如,通过修改webdriver.Chrome()为webdriver.Firefox(),即可在Firefox浏览器中运行测试。

4. 编写清晰的测试报告

测试报告是测试结果的重要展示形式。pytest和unittest都支持生成测试报告,但有时候可能需要更详细的HTML报告。可以使用HTMLTestRunner(一个第三方库)来生成HTML格式的测试报告。

pip install HTMLTestRunner

然后,在unittest的测试脚本中添加生成HTML报告的代码。

五、总结

Selenium作为Web自动化测试的强大工具,与pytest和unittest等测试框架的集成,可以极大地提升Web应用的测试效率和测试质量。通过合理的测试设计、Page Object模式的应用、等待机制的使用以及跨浏览器测试,可以构建出稳定、可靠的自动化测试体系。希望本文的介绍和示例能够帮助新手朋友快速入门Selenium自动化测试,并在实际项目中灵活运用。

相关文章:

自动化测试框架集成:将Selenium集成到pytest与unittest中

目录 引言 一、Selenium简介 二、Selenium与pytest的集成 1. 安装pytest和Selenium 2. 编写测试用例 3. 运行测试 三、Selenium与unittest的集成 1. 编写测试类 2. 运行测试 四、Selenium自动化测试的最佳实践 1. 使用Page Object模式 2. 合理利用等待机制 3. 跨浏…...

华为GaussDB数据库(单机版)在ARM环境下的安装指南

一、软件版本 机器配置:8核16G,CPU: Huawei Kunpeng 920 2.9GHz操作系统:EulerOS 2.8 64bit with ARM数据库版本:GaussDB Kernel 505.1.0 build 44f4fa53 二、部署流程 2.1 新建用户 ① 以omm用户为例,添加一个omm用…...

计算机网络笔记002

### 课堂讨论对话 **学生A**: 老师,计算机网络的组成是怎样的?🤔 **老师**: 非常好的问题!计算机网络主要由硬件、软件和通信协议三部分组成。我们先从硬件开始讨论吧。 **学生B**: 硬件包括哪些设备呢?&#x1f60…...

Unity 的Event的Use()方法

对于Event的Use方法,其在调用后将不会再判断同类型的事件 这种情况下,第二个MosueDown不会进入,因为已经Use 如果把Use注释掉 依旧能进入第二个MosueDown 也就是说当使用了Use方法,相同的事件类型不会进第二遍...

数据分析师之Excel数据清洗

前言 目前,掌握一定的Excel技能时,怎么通过自己的技能实现数据分析的操作,就需要进行具体项目的实战,本身数据分析这个行业是非常吃经验的,既然我们是小白入坑,就需要多做实战演练,才能够实际的…...

手机解压软件加密指南:让文件更安全

在数字化时代,文件加密对于保护个人隐私和敏感信息的重要性不言而喻。随着互联网的飞速发展,我们的生活和工作越来越依赖于数字设备和网络。 然而,这也带来了一系列的安全风险,如黑客攻击、数据泄露等。文件加密技术成为了保护我…...

python yield generator 详解

目录 generator基础 generator应用 generator基础应用   generator高级应用 注意事项: 正文 本文将由浅入深详细介绍yield以及generator,包括以下内容:什么generator,生成generator的方法,generator的特点&#…...

MATLAB矩阵下标引用

在MATLAB中,普通的二维数组元素的数字索引分为双下标索引和单下标索引。双下标索引是通过一个二元数组对来对应元素在矩阵中的行列位置,例如A(2,3)表示矩阵A中第2行第3列的元素。单下标索引的方式是采用列元素优先的原则,对m行n列的矩阵按列排…...

syn洪水攻击原理是什么

在网络世界中,正常的网络访问就像一场有序的对话。当我们访问网站时,客户端与服务器要进行 TCP 三次握手来建立连接。首先,客户端向服务器发送一个 SYN 包,请求建立连接,这就如同向服务器打招呼说“我想连接”&#xf…...

前缀和(4)_除自身以外数组的乘积

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 前缀和(4)_除自身以外数组的乘积 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目录…...

第二十一节:学习Redis缓存数据库的Hash操作(自学Spring boot 3.x的第五天)

这节记录下Redis的Hash操作。主要是opsForHash方式和boundHashOps方式。 boundHashOps和opsForHash都是Spring Data Redis中用于操作Redis哈希数据结构的方法,但它们在使用方式和场景上存在一些区别。 boundHashOps 使用方式: boundHashOps方法通过Redi…...

OpenCV视频I/O(1)视频采集类VideoCapture介绍

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 用于从视频文件、图像序列或摄像头捕获视频的类。 该类提供了用于从摄像头捕获视频或读取视频文件和图像序列的 C API。 以下是该类的使用方法&a…...

CVE-2024-46103

前言 CVE-2024-46103 SEMCMS的sql漏洞。 漏洞简介 SEMCMS v4.8中,SEMCMS_Images.php的search参数,以及SEMCMS_Products.php的search参数,存在sql注入漏洞。 (这个之前就有两个sql的cve,这次属于是捡漏了&#x1f6…...

三,MyBatis-Plus 的各种查询的“超详细说明”,比如(等值查询,范围查询,模糊查询...)

三,MyBatis-Plus 的各种查询的“超详细说明”,比如(等值查询,范围查询,模糊查询…) 文章目录 三,MyBatis-Plus 的各种查询的“超详细说明”,比如(等值查询,范围查询,模糊查询...)1. …...

Linux 冯诺依曼体系结构与操作系统概念

目录 0.前言 1. 冯诺依曼体系结构概述 1.1 输入单元 1.2 中央处理单元(CPU) 1.3 输出单元 2. 冯诺依曼体系结构的关键特性 2.1 所有数据流向内存 2.2 数据流动示例:QQ聊天过程 3. 操作系统 3.1 概念 3.2 设计操作系统的目的 3.3 操作系统的“…...

UE4中 -skipbuild -nocompile 有什么区别

在项目开发中,我看到了在调用 Engine\\Build\\BatchFiles\\RunUAT.bat 相关的命令行中,有 -skipbuild、 -nocompile 两个很像的参数,于是想探究一下它们的区别与含义。 -skipbuild 参数 到底有没有 -skipbuild 这个参数?根据 http…...

k8s篇之数据挂载类型及区别

一、K8S集群数据挂载类型及区别 在 Kubernetes 中,数据挂载类型主要有以下几种,每种类型适用于不同的场景。以下是主要的挂载类型及其应用场景的详细说明: 1. emptyDir 描述:emptyDir 是一个空目录,其生命周期与 Pod 相同。 它在 Pod 创建时被创建,并在 Pod 删除时被清…...

LiveQing视频点播流媒体RTMP推流服务功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大

LiveQing视频点播流媒体RTMP推流服务功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大 1、鉴权直播2、视频点播3、RTMP推流视频直播和点播流媒体服务 1、鉴权直播 鉴权直播-》播放 ,左键单击可以拉取矩形框,放大选中的范围&#x…...

fetch怎么使用

fetch 是一个现代、强大的、基于 Promise 的网络请求 API,用于在浏览器中发起网络请求(如异步获取资源)。它提供了一种更加简洁和灵活的方式来替代 XMLHttpRequest。下面是 fetch 的基本使用方法和一些示例。 基本语法 fetch(url, options)…...

回归预测 | Matlab基于SO-SVR蛇群算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于SO-SVR蛇群算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SO-SVR蛇群算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于SO-SVR蛇群算法优化支持向量机的数据多…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...