pytest断言与Selenium模拟操作的规划案例

news/2024/7/25 2:18:04/文章来源:https://blog.csdn.net/weixin_42771529/article/details/139282209

pytest断言与Selenium模拟操作的规划案例

在使用pytest进行自动化测试时,断言是验证测试结果是否符合预期的关键步骤。pytest提供了简洁的断言语法,使得编写测试用例更加直观和易于维护。以下是一个简单的规划案例,展示了如何在pytest中使用断言来验证Selenium模拟操作的结果。

实验目的

  • 学习使用pytest进行自动化测试的基本流程。

  • 掌握pytest中的断言方法及其在Selenium测试中的应用。

  • 通过实际操作,理解断言失败时的处理机制。

实验步骤

  1. 环境准备:确保已安装pytest和Selenium WebDriver,并配置好环境变量以指向正确的WebDriver执行文件。

  2. 编写测试用例:在pytest测试文件中编写测试用例,使用pytest的assert关键字来进行断言。

  3. 运行测试用例:使用pytest命令行工具运行测试用例,观察测试结果,特别注意断言失败时的输出信息。

  4. 分析测试结果:根据测试结果分析测试用例是否通过,如果失败,则根据断言信息定位问题所在。

断言示例

def test_example():from selenium import webdriverdriver = webdriver.Chrome()driver.get("http://example.com")assert "Example Domain" in driver.title  # 断言网页标题包含"Example Domain"driver.quit()

在上述示例中,测试用例test_example会打开一个网页,并断言网页标题中包含"Example Domain"。如果标题不包含该字符串,pytest将标记该测试用例为失败,并输出失败的断言信息。

注意事项

  • 在编写断言时,确保断言的条件清晰且易于理解,以便于后续的调试和维护。

  • 使用断言时,应当考虑到可能的异常情况,并提供适当的错误处理逻辑。

  • 在实际应用中,可能需要结合使用pytest的其他特性,如fixtures、参数化测试等,以提高测试的灵活性和覆盖率。

通过上述规划案例,可以初步了解如何在pytest中使用断言来验证Selenium模拟操作的结果,并逐步掌握自动化测试的基本技能。

深入研究

如何在Python中使用Selenium模拟浏览器访问特定URL?

使用Selenium模拟浏览器访问特定URL的步骤

要在Python中使用Selenium模拟浏览器访问特定URL,您可以按照以下步骤操作:

  1. 安装Selenium库
    首先,确保您的系统中已经安装了Python。然后,通过pip命令安装Selenium库:

    pip install selenium
    
  2. 下载WebDriver
    根据您选择的浏览器,下载对应的WebDriver。例如,如果您使用的是Chrome浏览器,则需要下载ChromeDriver。请确保WebDriver的版本与您的浏览器版本相匹配。

  3. 编写代码
    接下来,编写Python代码来使用Selenium模拟浏览器访问URL。以下是一个简单的示例代码:

    from selenium import webdriver# 指定WebDriver的路径
    driver_path = '/path/to/your/webdriver'
    browser = webdriver.Chrome(executable_path=driver_path)# 访问特定URL
    url = 'http://www.example.com'
    browser.get(url)# 在此处添加您需要的任何操作,比如查找元素、点击等# 关闭浏览器
    browser.quit()
    

    请将/path/to/your/webdriver替换为实际的WebDriver路径,http://www.example.com替换为您想要访问的URL。

  4. 运行代码
    保存上述代码到.py文件中,然后在终端或命令提示符中运行该文件。如果一切设置正确,Selenium将自动打开指定的URL。

以上步骤基于搜索结果中的信息整理而成,确保了准确性和完整性。在实际操作中,您可能需要根据自己的需求调整代码,例如添加等待元素加载的逻辑、处理弹出窗口等。

Selenium中常用的断言语句有哪些?

Selenium中常用的断言语句

在Selenium自动化测试中,断言是用来验证应用程序状态是否符合预期的重要工具。以下是一些常用的断言语句:

断言页面属性

  • assertLocation:判断当前是否在正确的页面。

  • assertTitle:检查当前页面的标题是否正确。

  • assertValue:检查输入框的值,单选按钮或复选框是否正确。

  • assertSelected:检查下拉菜单中是否选中了正确的选项。

  • assertText:检查指定元素的文本是否正确。

  • assertTextPresent:检查页面上是否存在指定的文本。

  • assertTextNotPresent:检查页面上是否不存在指定的文本。

  • assertAttribute:检查指定元素的属性值是否正确。

  • assertTable:检查表格中的某个单元格的值是否正确。

  • assertEditable:检查指定的输入框是否可以编辑。

  • assertNotEditable:检查指定的输入框是否不可以编辑。

  • assertAlert:检查是否存在带有指定消息的警告对话框。

断言元素存在

  • verifyTitle:验证预期的页面标题。

  • verifyTextPresent:验证预期的文本是否在页面上的某个位置。

  • verifyElementPresent:验证预期的UI元素是否存在。

  • verifyText:核实预期的文本和相应的HTML标签是否都存在于页面上。

  • verifyTable:验证表的预期内容。

  • waitForPageToLoad:暂停执行,直到预期的新页面加载。

  • waitForElementPresent:等待检验某元素的存在,为真时则执行。

这些断言语句可以帮助测试人员确保应用程序按照预期工作,及时发现和解决问题。在编写测试脚本时,可以根据实际情况选择合适的断言语句来验证应用程序的各个方面.

如何处理Selenium测试中出现的常见错误?

Selenium测试中常见错误及其处理方法

在使用Selenium进行自动化测试时,可能会遇到多种错误。以下是一些常见的错误及其相应的处理方法:

1. 浏览器驱动未安装或配置错误

确保已经正确安装了对应浏览器的驱动程序,并将其路径配置到系统环境变量中,或者在代码中指定驱动程序的路径。

2. 页面元素定位失败

如果无法找到页面元素,可能是因为元素定位表达式有误或页面元素尚未加载。可以尝试重新定位元素,使用正确的等待策略,或者确保页面元素已经加载完毕。

3. 浏览器与驱动程序版本不匹配

确保浏览器的版本与驱动程序的版本相匹配。如果不匹配,需要下载与浏览器版本相对应的驱动程序。

4. 网络或防火墙设置问题

如果是远程WebDriver测试,确保网络连接稳定,并且防火墙设置允许WebDriver服务的连接。

5. 浏览器安全设置问题

某些浏览器的安全设置可能会阻止WebDriver与浏览器进行通信。可以尝试调整浏览器的安全设置或使用其他浏览器进行测试。

6. 脚本错误

检查测试脚本是否有语法错误或逻辑错误,并进行修正。

7. 硬件问题

确保计算机的硬件配置能够满足Selenium测试的要求,特别是内存和处理器的性能。

8. 非法的选择器

在使用Selenium时,如果选择器不合法,可能会导致测试失败。确保使用的选择器是合法的,并且能够正确地定位到页面元素。

以上是一些常见的Selenium测试错误及其处理方法。在实际操作中,可能还会遇到其他特殊情况,需要根据具体情况进行排查和解决。


Pytest的断言机制

Pytest的断言机制是基于Python语言的内置assert语句,并在此基础上进行了增强,使其更适合测试场景。Pytest鼓励直接使用Python的assert语句来进行断言。在测试函数中,只需编写assert condition或assert expression,当条件为False或表达式求值结果为False时,assert语句将抛出AssertionError异常,标志着测试失败。

基本断言

Pytest的断言机制包括多种基本断言形式,例如:

1.assert condition: 最基础的断言形式,检查condition是否为真。

2.assert expr1 == expr2: 检查两个表达式是否相等。

3.assert expr1 != expr2: 检查两个表达式是否不相等。

4.assert expr1 is expr2: 检查两个对象是否是同一个对象。

5.assert expr1 is not expr2: 检查两个对象是否不是同一个对象。

6.assert expr1 in collection: 检查expr1是否是collection(如列表、元组、集合、字典键等)的成员。

7.assert expr1 not in collection: 检查expr1是否不是collection的成员。

8.assert expr1 < expr2: 对于数值或可比较的对象,检查它们之间的关系是否满足指定的条件。

9.assert almost_equal(expr1, expr2, *, rel_tol=..., abs_tol=...): 检查两个浮点数或可迭代的浮点数集合是否近似相等。

10.assert raises(ExpectedException, func, *args, **kwargs): 检查调用func(*args, **kwargs)是否引发指定的异常ExpectedException。

兼容unittest断言方法

尽管Pytest鼓励使用原生assert,但它也完全兼容unittest模块中的断言方法,如assertEqual、assertTrue、assertFalse、assertIn等。如果你更喜欢使用这些方法,Pytest同样能够正确处理它们引发的异常。

断言重写

在某些情况下,可能需要自定义断言行为,例如添加更详细的错误消息、改变失败条件,或者实现特定领域的复杂验证逻辑。Pytest允许通过以下方式实现断言重写:

1.使用assert语句配合自定义错误消息。

2.编写自定义断言函数,这些函数内部执行具体的验证逻辑,并在断言失败时抛出AssertionError。

3.使用unittest.TestCase及其断言方法,这些方法提供了更详细的错误消息和特定类型的断言。

断言的丰富表达

Pytest的断言不仅限于简单的布尔条件判断,还可以利用Python的表达式能力创建更复杂的验证逻辑。例如:

1.使用逻辑运算符组合断言。

2.利用列表推导式或生成器表达式验证集合中所有元素是否满足某种条件。

3.结合使用上下文管理器和断言,以优雅地处理预期的异常或资源清理。

4.使用集合操作验证元素存在性。

以上信息综合自最新的相关资料,希望能帮助您更好地理解Pytest的断言机制。

 

参考:

[1]:https://blog.csdn.net/qq_52758588/article/details/137866959

[2]:https://blog.csdn.net/u014694915/article/details/133878034

[3]:https://www.cnblogs.com/qican/p/14007536.html

[4]:https://zhuanlan.zhihu.com/p/641572316


在Pytest中使用上下文管理器

在Pytest中使用上下文管理器通常涉及到with语句,它可以确保在测试过程中资源得到适当的管理。上下文管理器通常通过实现__enter____exit__两个特殊方法来工作。__enter__方法在进入上下文时执行,而__exit__方法在退出上下文时执行。

使用类实现上下文管理器

您可以创建一个类,并重写__enter____exit__方法来实现上下文管理器。以下是一个简单的例子:

import pytestclass DatabaseConnection:def __init__(self, db_name):self.db_name = db_namedef __enter__(self):print(f"Connecting to database {self.db_name}")# 假设这里是连接数据库的代码return selfdef __exit__(self, exc_type, exc_val, exc_tb):print(f"Disconnecting from database {self.db_name}")# 假设这里是断开数据库连接的代码if exc_type is not None:# 如果有异常,执行异常处理代码print(f"An error occurred: {exc_val}")return True  # 表示异常已处理,不需要重新抛出

在测试中,您可以这样使用这个上下文管理器:

def test_database_operation(db_connection):with db_connection as conn:# 在这里执行数据库操作assert conn.some_database_method() == expected_result

使用@contextmanager装饰器

除了使用类,您还可以使用contextlib.contextmanager装饰器来创建上下文管理器。这是一个基于生成器的解决方案,它允许您将上下文管理逻辑封装在一个生成器函数中。

from contextlib import contextmanager@contextmanager
def database_session(db_name):try:print(f"Connecting to database {db_name}")# 假设这里是连接数据库的代码yieldfinally:print(f"Disconnecting from database {db_name}")# 假设这里是断开数据库连接的代码

在测试中,您可以这样使用这个上下文管理器:

def test_database_operation():with database_session("example_db") as session:# 在这里执行数据库操作assert some_database_function() == expected_result

注意事项

  • 确保在__exit__方法中正确处理异常,以便在出现错误时能够进行适当的清理。

  • 如果您在__exit__方法中处理了异常,记得返回True,这样Python解释器就知道异常已经被处理,不会再次抛出。

  • 使用上下文管理器可以简化代码,使得资源管理变得更加直观和安全。

以上信息综合自最新的相关资料,希望能帮助您更好地理解如何在Pytest中使用上下文管理器.


在Pytest中使用上下文管理器的具体示例

在Pytest中,上下文管理器通常用于在测试之前准备资源,在测试之后清理资源。这可以通过使用@pytest.fixture装饰器来实现,该装饰器允许你定义一个函数,该函数在测试执行前被调用,并在测试执行后被调用。

以下是一个使用@pytest.fixture的示例,它演示了如何在测试中使用上下文管理器来管理数据库连接:

import pytest# 定义一个上下文管理器,用于管理数据库连接
@pytest.fixture
def connection():print("Opening the database connection...")# 假设这里是打开数据库连接的代码yieldprint("Closing the database connection...")# 假设这里是关闭数据库连接的代码# 使用上下文管理器的测试函数
def test_query(connection):# 在这里执行数据库查询assert "SELECT * FROM users" in connection.execute("SELECT * FROM users").sql

在这个例子中,connection是一个上下文管理器,它在测试函数test_query执行之前打开数据库连接,并在测试函数执行完毕后关闭数据库连接。yield语句用于标记上下文管理器的执行点,在yield之前执行初始化代码,在yield之后执行清理代码。

此外,如果你想在测试中捕获特定的异常,可以使用pytest.raises上下文管理器。以下是一个使用pytest.raises的示例:

import pytest# 定义一个测试函数,使用pytest.raises来捕获特定的异常
def test_error():with pytest.raises(ZeroDivisionError):assert 1 / 0 == 1

在这个例子中,pytest.raises上下文管理器用于捕获除以零的错误。如果测试中发生了除以零的错误,pytest将捕获该异常,并将测试视为成功。如果没有发生预期的错误,pytest将报告测试失败。

以上就是在Pytest中使用上下文管理器的一些基本用法。通过这些示例,你可以了解到如何在Pytest测试中有效地管理资源和处理异常.

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1054002.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

冯喜运:5.29市场避险情绪升温,黄金原油小幅收涨

【黄金消息面分析】&#xff1a;周二&#xff08;5月28日&#xff09;美盘时段&#xff0c;由于美元走弱且市场情绪出现负面变化&#xff0c;黄金收复早前跌幅&#xff0c;站上2350美元关口。金价早盘一度走弱&#xff0c;源于美联储降息可能性降低带来压力&#xff0c;投资者在…

(四十八)第 7 章 图(图的数组(邻接矩阵)存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

关于已配好java环境但双击无法打开jar包的解决方案

如果你已经装好了 java 环境直接跳到最后看解决方法即可 先说一下你安装的 java 环境&#xff0c;如果完全是默认选项安装&#xff0c;则会安装 jdk 和 jre&#xff0c;并且在安装 jre 时还需要安装目录下为空&#xff0c;其实 jre 的安装是多余的&#xff0c;因为安装的 jdk 里…

LES物流执行系统,在离散制造行业有那些作用和价值?

离散制造企业往往面临的是多品种、小批量的非标订单生产&#xff0c;传统推动式物流系统已经无法应对计划变化滞后&#xff0c;各车间、工序之间难以衔接等情况&#xff0c;特别是密集劳动力的电子行业&#xff0c;非标产品 SKU 种类繁多&#xff0c;物料配送复杂&#xff0c;对…

Sentinel-2 哨兵二号数据介绍及下载

1 Sentinel-2简介 SENTINEL-2 is a European wide-swath, high-resolution, multi-spectral imaging mission. Sentinel-2 是高分辨率多光谱成像卫星&#xff0c;一颗卫星的重访周期为10天&#xff0c;两颗互补&#xff0c;重访周期为5天。分为2A和2B两颗卫星。2A于2015年6月…

【ubuntu20】--- 定时同步文件

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Linux命令】--- 多核压缩命令大全&…

【IDEA】Redis可视化神器

在开发过程中&#xff0c;为了方便地管理 Redis 数据库&#xff0c;我们可能会使用一些数据库可视化插件。这些插件通常可以帮助你在 IDE 中直观地查看和管理 Redis 数据库&#xff0c;包括查看键值对、执行命令、监视数据库活动等。 IDEA作为IDE界的Jenkins&#xff0c;本身自…

基于OrangePi AIpro的后端服务器构建

一. OrangePi AIpro简介 1.1 OrangePi AIpro外观 1.2 OrangePi AIpro配置 OrangePi AIpro(8T)采用昇腾AI技术路线&#xff0c;具体为4核64位处理器AI处理器&#xff0c;集成图形处理器&#xff0c;支持8TOPS AI算力&#xff0c;拥有8GB/16GB LPDDR4X&#xff0c;可以外接32GB…

[java基础揉碎]文件IO流

目录 文件 什么是文件 文件流​编辑 常用的文件操作 创建文件方式一 创建文件方式二 创建文件方式三 tip:为什么new file 了还有执行createNewFile?new File的时候其实是在内存中创建了文件对象, 还没有在磁盘中, 当执行createNewFile的时候才是往磁盘中写入​编辑 …

Apache、Nginx、IIS文件解析漏洞

目录 1、文件解析漏洞介绍 2、Apache相关的解析漏洞 &#xff08;1&#xff09;多后缀解析漏洞 &#xff08;2&#xff09;Apache配置问题 &#xff08;3&#xff09;换行符解析漏洞 &#xff08;4&#xff09;罕见后缀解析 3、Nginx相关的解析漏洞 &#xff08;1&…

nginx源码阅读理解 [持续更新,建议关注]

文章目录 前述一、nginx 进程模型基本流程二、源码里的小点1.对字符串操作都进行了原生实现2.配置文件解析也是原生实现待续 前述 通过对 nginx 的了解和代码简单阅读&#xff0c;发现这个C代码的中间件确实存在过人之处&#xff0c;使用场景特别多&#xff0c;插件模块很丰富…

gmssl vs2010编译

1、虚拟机win10 x64&#xff0c;离线安装vs2010和2010sp1补丁&#xff1b; 2、安装ActivePerl_v5.28.1.0000和nasm-2.16.03-installer-x64均是默认完整安装&#xff1b; nasm官网下载&#xff1a; Index of /pub/nasm/releasebuilds/2.16.03/win64https://www.nasm.us/pub/nas…

QT-demo:0轴分布图表

版本&#xff1a;5.9 第一种: 使用 PyQt5 和 Matplotlib 库 安装所需的库&#xff1a; pip install PyQt5 matplotlib创建和显示图表&#xff1a; import sys import numpy as np import matplotlib.pyplot as plt from PyQt5.QtWidgets import QApplication, QMainWindow f…

window安装ffmpeg播放本地摄像头视频

1、安装ffmpeg ffmpeg官方网站&#xff1a;FFmpeg 下载后解压文件夹名为ffmpeg 2、设置环境变量 目录 1、安装ffmpeg 设置环境变量 以F:\software\after\ffmpeg\bin为例 在命令行中输入ffmpeg出现下方代表安装成功 3、通过ffmpeg播放本地电脑摄像头 鼠标右击开始按钮&…

SQOOP详细讲解

SQOOP安装及使用 SQOOP安装及使用SQOOP安装1、上传并解压2、修改文件夹名字3、修改配置文件4、修改环境变量5、添加MySQL连接驱动6、测试准备MySQL数据登录MySQL数据库创建student数据库切换数据库并导入数据另外一种导入数据的方式使用Navicat运行SQL文件导出MySQL数据库impo…

Javascript--词法作用域

词法作用域 词法阶段 大部分标准化语言编辑器的第一个工作阶段叫做词法化&#xff0c;词法化会对源代码中的字符进行检查&#xff0c;如果是有状态的解析过程&#xff0c;还会赋予单词语义。 简单来说&#xff0c;词法作用域就是在词法阶段的作用域&#xff0c; function fo…

【乐吾乐3D可视化组态编辑器】模型类型与属性

编辑器地址&#xff1a;3D可视化组态 - 乐吾乐Le5le 本章主要为您介绍模型的属性功能。 一个模型至少会包含一个节点&#xff08;Node&#xff09;&#xff0c;从节点类型上可以分为转换节点&#xff08;TransformNode&#xff09;、网格&#xff08;Mesh&#xff09;、实例网…

基于 React + Nest 全栈开发的后台系统

Xmw Admin 基于 React Nest 全栈开发的后台系统 &#x1fab4; 项目简介 &#x1f3af; 前端技术栈&#xff1a; React、Ant Design、Umi、TypeScript&#x1f3af; 后端技术栈&#xff1a; Nest.js、Sequelize、Redis、Mysql&#x1f61d; 线上预览&#xff1a; https://r…

4K型护套连接器与喇叭口替换插座

4K型护套连接器概述 4K型护套连接器作为煤矿一款关键的电气连接产品&#xff0c;一般安标认证型号包含&#xff1a;LCFB-4、LCFB-6、LCYB-8、LCYB-4、LCYB-8。根据不同的厂家也会有不同订货型号ZE0703-09/DLJ0601/conmN/4c等 4K型护套连接器是一种专为煤矿、非煤矿、石油化工等…

matplotlib ---词云图

词云图是一种直观的方式来展示文本数据&#xff0c;可以体现出一个文本中词频的使用情况&#xff0c;有利于文本分析&#xff0c;通过词频可以抓住一篇文章的重点 本文通过处理一篇关于分析影响洋流流向的文章&#xff0c;分析影响洋流流向的主要因素都有哪些 文本在文末结尾 …