![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
pytest中文操作手册
文章平均质量分 88
pytest 8.x 版本-中文操作手册
雨中夜归人
这个作者很懒,什么都没留下…
展开
-
pytest8.x版本 中文使用文档-------24.解释:不稳定的测试
不稳定的测试”是指表现出间歇性或偶发性失败的测试,其行为似乎具有非确定性。有时它通过,有时它失败,并且不清楚原因是什么。本页面讨论了 pytest 的一些功能,这些功能可以帮助识别、修复或缓解不稳定测试,以及其他一般策略。使用持续集成(CI)服务器时,不稳定测试尤其令人头疼,因为所有测试都必须通过,新的代码更改才能被合并。如果测试结果不是一个可靠的信号——即测试失败意味着代码更改破坏了测试——那么开发人员可能会对测试结果产生不信任,这可能导致他们忽视真正的失败。原创 2024-07-24 08:53:16 · 664 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------25.解释:pytest导入机制和sys.path/PYTHONPATH
如果测试目录树没有按包的形式组织,那么每个测试文件都需要有一个与其他测试文件不同的唯一名称,否则如果pytest找到两个同名测试,将会引发错误。当测试模块位于包中时,保留完整的包名称非常重要,这可以避免问题并允许测试模块具有重复的名称。这样做将使测试成为正式的Python包的一部分,允许pytest解析它们的全名(例如,对于。相同,当测试目录树未按包进行组织时,要求测试模块名称必须是唯一的,因为模块在导入后会被放入。成为默认选项,但现在很明显,它也有自己的一系列缺点,因此在可预见的未来,默认选项将仍然是。原创 2024-07-25 10:05:06 · 905 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------26.示例:基本模式和示例
每次使用 pytest 时都输入相同的命令行选项序列可能会很繁琐。这里-ra选项表示“显示所有额外的测试摘要信息”,包括跳过的和预期失败的测试;-q选项表示“更简洁的进度输出”,即只显示测试进度的点。另外,你可以设置一个这会将-v(表示“详细输出”)选项添加到 pytest 的命令行中,而无需修改配置文件或每次手动输入。这种方式在临时需要更改 pytest 的行为时特别有用,比如当你想在特定的终端会话中启用更详细的输出时。在存在addopts。原创 2024-07-26 15:59:21 · 1010 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------27.示例:参数化测试
pytest允许你轻松地参数化测试函数。对于基础文档,请参阅如何参数化固件和测试函数以下我们将通过内置机制提供一些示例。原创 2024-07-27 13:42:46 · 980 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------2.pytest如何调用
通常,pytest是用命令pytest调用的(关于调用pytest的其他方式,请参见下文)。这将执行当前目录及其子目录中所有文件名以test_*.py或\*_test.py形式结尾的文件中的所有测试。更一般地说,pytest遵循标准的测试发现规则。原创 2024-07-15 15:53:42 · 925 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------1.pytest安装、入门
pytest是一个可以使构建简单和可伸缩的测试变得容易的框架。测试具有表达性和可读性,不需要样板代码。几分钟后就可以开始对应用程序或库进行小的单元测试或复杂的功能测试。原创 2024-07-15 15:52:42 · 577 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------0.pytest简单介绍
由于pytest具有详细的断言自省功能,因此只使用普通的断言语句。有关使用pytest的基本介绍,参阅门介绍。pytest框架可以很容易地编写小型、可读的测试,并且可以扩展以支持应用程序和库的复杂功能测试。pytest是一个成熟的全功能Python测试工具,可以帮助您编写更好的程序。pytest要求:Python 3.8+或PyPy3。丰富的插件架构,超过1300+外部插件。用于管理小型或参数化的长期测试资源。Python 3.8+或PyPy 3。自动发现测试模块和功能。(包括试用)测试套件。原创 2024-07-15 15:51:52 · 267 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------4-1.如何使用夹具(Fixtures)
这意味着,如果某个 yield fixture 在其 yield 语句之前失败(比如,在创建资源时出错),那么该 fixture 的拆解代码将不会被执行,但 pytest 会尽力拆解那些已经成功运行的 fixture,以确保测试环境的清理。例如,在开发过程中,你可能希望每个测试函数都使用一个新的容器来避免潜在的副作用,而在CI/CD流程中,为了节省时间和资源,你可能希望整个测试会话只使用一个容器。需要注意的是,即使拆解的顺序是正确的,也不能保证清理过程是绝对安全的。它们可以请求任意数量的夹具。原创 2024-07-15 15:54:33 · 917 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------3.如何在测试中编写和报告断言
通过实现钩子,可以添加你自己详细的解释说明。configopleftright[source]该钩子函数用于在断言表达式失败时,为比较操作返回详细的解释说明。config:一个pytest配置对象,可以用来访问pytest的配置信息。op:一个字符串,表示比较操作符(如==!等)。left:比较操作符左边的值。right:比较操作符右边的值。这个函数应该返回一个字符串,该字符串包含了关于为什么断言失败的详细解释。如果你没有实现这个钩子,pytest将使用其默认的解释机制。原创 2024-07-15 15:54:08 · 919 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------4-2.如何使用夹具(Fixtures)
pytest 的 fixture 系统非常强大,但它仍然是由计算机运行的,因此它无法弄清楚如何安全地拆解我们抛给它的所有内容。如果我们不小心,error错误地出现在某个位置可能会导致测试遗留一些内容,这可能会迅速引发更多问题。在测试框架pytest中,夹具(fixtures)是用来为测试提供依赖项(如数据、配置、外部资源等)的。它们可以是函数、类或生成器,并且可以根据需要在测试执行之前、之后或测试过程中被调用。原创 2024-07-15 15:55:05 · 908 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------5.如何用属性标记测试函数
通过使用辅助工具,您可以轻松地在测试函数上设置元数据。您可以在API参考()中找到内置标记的完整列表。或者,您可以使用命令行接口(CLI)来列出所有标记,包括内置的和自定义的。这些标记提供了一种灵活的方式来控制测试的执行,包括跳过某些测试、在特定条件下修改测试行为,以及基于不同参数集运行测试。通过使用这些标记,您可以更细致地控制测试套件的行为,以适应不同的测试场景和需求。创建自定义标记或将标记应用于整个测试类或模块很容易。这些标记可以由插件使用,并且也常用于通过命令行上的-m选项来选择测试(原创 2024-07-15 16:32:03 · 533 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------19.测试夹具Fixtures参考
夹具的可用性是从测试的角度来确定的。一个夹具只有在它所定义的范围内才能被测试请求使用。如果夹具是在某个类内部定义的,那么只有该类内部的测试才能请求使用它。但是,如果夹具是在模块的全局范围内定义的,那么该模块内的每一个测试,即使它们定义在类内部,也可以请求使用这个夹具。类似地,一个测试也只有在与自动使用夹具(autouse fixture)处于相同的作用域时,才会受到该自动使用夹具的影响(请参考“自动使用夹具在其作用域内首先执行”)。此外,一个夹具也可以请求使用任何其他夹具,无论这些夹具是在哪里定义的原创 2024-07-20 14:58:15 · 935 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------10.如何重新运行失败的测试并在测试运行之间保持状态
-lf- 仅重新运行失败的测试。--ff- 首先运行失败的测试,然后运行其余测试。这些选项对于快速迭代和修复测试套件中的问题时非常有用,因为它们允许你专注于那些最近失败的测试,而不是每次都运行整个测试套件。通过仅重新运行失败的测试,你可以更快地得到反馈,并减少不必要的测试运行时间。同时,选项还允许你优先解决最关键的问题,即那些最近失败的测试,然后再处理可能不那么紧急的其他测试。对于清理(通常不需要),选项允许在测试运行之前删除所有跨会话的缓存内容。其他插件可以访问。原创 2024-07-17 09:08:05 · 515 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------6.如何参数化夹具和测试函数
例如,假设我们想要运行一个测试,该测试接受字符串输入,而我们希望通过一个新的 pytest 命令行选项来设置这些输入。但是,请注意,如果模块中还有其他不在类中的测试函数,它们也会接收到这些参数,除非它们显式地不接受这些额外的参数。参数为参数化测试中的特定实例添加标记,是一种灵活的方式来控制测试的期望行为,特别是当您想要明确指出某些测试用例是已知的问题或尚未实现的特性时。选项提供的值参数化测试函数。但是,请记住,这可能会根据你使用的操作系统和当前安装的插件产生不希望的副作用甚至错误,因此请自行承担风险使用。原创 2024-07-16 09:31:34 · 1391 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------16.编写插件
如果你的插件使用了任何标记(marker),你应该注册它们,以便它们能够出现在pytest的帮助文本中,并且不会导致虚假的警告。例如,下面的插件将为所有用户注册和mark_with这段代码通过钩子函数在pytest配置阶段执行。方法用于向pytest的配置系统添加一条关于标记的说明,这些说明会出现在命令的输出中,帮助用户了解可用的标记及其用途。在上面的例子中,被描述为“这个标记用于酷炫的测试”,而mark_with则被描述为“这个标记接受参数”,并展示了如何接受多个参数(虽然示例中只明确提到了arg和。原创 2024-07-18 13:58:14 · 774 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------17.编写插件
对于任何给定的钩子规范,可能存在多个实现,因此我们通常将钩子执行视为1:N函数调用,其中N是已注册函数的数量。选项,这样钩子调用就只会执行到N个已注册函数中的第一个返回非None结果为止,该结果随后被视为整个钩子调用的结果。如上所述,使用插件中的新钩子可能会因为标准的验证机制而稍显复杂:如果你依赖的插件没有被安装,验证将失败,并且错误消息对于你的用户来说可能难以理解。大多数对 pytest 钩子的调用会生成一个结果列表,该列表包含了所有被调用的钩子函数返回的非None结果。原创 2024-07-18 15:13:53 · 755 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------15.如何安装和使用插件
本节讨论安装和使用第三方插件。如果想自己编写插件,请参考“编写插件”部分。如果插件已安装,pytest 会自动发现并集成它,无需手动激活。:使用pytest集成来编写针对应用的测试。:编写针对应用的测试,启动一个reactor并从测试函数中处理deferreds。:提供覆盖率报告,与分布式测试兼容。:将测试分发到CPU和远程主机上,以在盒装模式下运行(允许在发生段错误时继续运行),在循环失败模式下运行,在文件更改时自动重新运行失败的测试。:在测试运行时立即报告失败。:使用行为驱动测试(BDD)编写测试。原创 2024-07-18 10:07:34 · 757 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------20.配置参考
设置要使用的 pygments 样式。设置此样式的亮度模式为亮色或暗色。原创 2024-07-22 13:17:48 · 1161 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------14.如何使用 skip 和 xfail 处理无法成功的测试
以下是在不同情况下如何在一个模块中无条件跳过测试的快速指南:XFail: 将测试函数标记为预期失败你可以使用xfail...当这个测试运行时,如果它失败了,则不会报告回溯信息。相反,终端报告会将其列在“预期失败”(XFAIL)或“意外通过”(XPASS)部分。如果测试按预期失败,它将被视为“通过”的测试(虽然是以失败的形式),不会影响测试套件的整体通过状态。如果测试意外地通过了(即你没有预期它会通过但实际上它通过了),则会被特别标记为“XPASS”,以便你能够注意到并可能需要进一步的调查。原创 2024-07-18 09:10:04 · 862 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------21.解释:测试的解剖
这可能意味着准备对象、启动/停止服务、在数据库中记录条目,甚至包括定义要查询的URL、为尚不存在的用户生成一些凭据,或者只是等待某个进程完成。断言步骤是我们查看结果状态并检查它是否符合我们预期的尘埃落定后的样子。测试中的断言是我们采取测量/观察并应用我们的判断力的地方。执行步骤是引发我们想要测试的行为的单一、状态改变的动作。这个行为是执行对被测系统(SUT)状态改变的操作,而我们可以通过观察结果改变的状态来评估这个行为。简而言之,测试的目的是查看某个特定行为的结果,并确保该结果与你的预期相符。原创 2024-07-22 13:18:31 · 151 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------11.如何管理日志
如果启用了彩色终端输出,则日志级别会以彩色显示。通过方法可以更改默认颜色或为自定义日志级别设置颜色。警告此功能及其API被认为是实验性的,可能会在不通知弃用的情况下在不同版本之间发生变化。原创 2024-07-17 10:38:34 · 1008 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------8.如何对模块和环境进行monkeypatch/模拟
有时测试需要调用依赖于全局设置的功能,或者调用那些不易测试的代码,如网络访问。夹具(fixture)可以帮助你安全地设置/删除属性、字典项或环境变量,或者修改sys.path以便进行导入。是一种在测试期间临时修改或覆盖代码行为的技术,常用于单元测试中以隔离测试环境或模拟外部依赖。使用:你可以修改对象的属性,以便在测试期间改变其行为。这对于测试依赖于某些对象状态的代码特别有用。:如果你需要修改配置字典或任何其他类型的字典,可以帮助你安全地进行这些修改,而不会影响到原始数据。原创 2024-07-16 16:15:06 · 966 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------18.如何设置bash自动补全
这个命令将在当前bash会话中启用pytest的自动补全功能,但如果你关闭并重新打开终端,这个功能就会失效,除非你再次运行这个命令或将其添加到你的bash配置文件中。但是,如果你只想为pytest永久启用(但非全局)的自动补全功能,可以使用以下命令,并将其输出追加到你的。当你使用bash作为你的shell时,pytest可以使用argcomplete(之后,你需要重新加载你的bash配置文件(可以通过运行。命令或重新打开你的终端会话来实现)。原创 2024-07-19 09:14:36 · 102 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------23.解释:良好的集成实践
此外,由于它是在已安装的包上运行测试,因此它更接近于模拟用户实际使用包的情况,这有助于识别任何与打包或分发相关的问题。它会对已安装的包进行测试,而不是对您的源代码检出进行测试,这有助于检测打包过程中的问题。这种略显复杂的导入技术的原因是,在大型项目中,多个测试模块可能会相互导入,因此推导出规范的导入名称有助于避免诸如测试模块被重复导入等意外情况。其中一些规则强制执行特定的风格选择,例如使用。这样的工具在虚拟环境中测试您的包,那么这将会是一个问题,因为您想要测试的是已安装的包版本,而不是仓库中的本地代码。原创 2024-07-23 09:06:18 · 999 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------22.解释:关于夹具 fixtures
在测试中,fixtures为测试提供了一个定义好的、可靠且一致的环境或上下文。这可能包括环境(例如,配置有已知参数的数据库)或内容(如数据集)。fixtures定义了构成测试准备阶段(参见“测试的解剖”)的步骤和数据。在pytest中,它们是您定义的用于此目的的函数。它们也可以用于定义测试的执行阶段;这是设计更复杂测试的一种强大技术。通过参数,测试函数可以访问由fixtures设置的服务、状态或其他运行环境。对于测试函数使用的每个fixture,通常在测试函数的定义中有一个以该fixture命名的参数。原创 2024-07-23 09:05:42 · 1071 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------12.如何捕获标准输出(stdout)/标准错误输出(stderr)
这意味着,在默认情况下,pytest会捕获并保存你的测试代码(包括测试函数、测试类中的设置和清理方法等)中产生的所有标准输出(stdout)和标准错误输出(stderr),以便在测试失败时提供有用的调试信息。夹具来捕获测试执行过程中的输出。选项更进一步,它不仅捕获通过 Python 标准库的输出,还捕获了所有通过文件描述符 1(标准输出)和 2(标准错误)的输出,即使这些输出并非来自 Python 代码。的输出,但请注意,这不是通过 pytest 的标准机制捕获的,可能是通过其他方式或假设的)。原创 2024-07-17 14:05:31 · 969 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------4-3.如何使用夹具(Fixtures)
是在会话作用域内缓存的,这个示例仍然可以工作:fixture使用“更广泛”作用域的fixture是可以的,但反过来则不行:一个会话作用域的fixture不能以一种有意义的方式使用模块作用域的fixture。例如,如果你有一个用于数据库连接的fixture,你可以在多个fixture中重用它,这些fixture分别用于设置不同的测试数据或执行不同的数据库操作,而无需在每个fixture中都重新建立数据库连接。文件中定义的fixture同名的fixture,从而在该测试模块内部使用新的fixture定义。原创 2024-07-15 15:55:33 · 960 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------9.如何运行 doctests
默认情况下,所有符合test*.txt模式的文件都将通过 Python 的标准模块运行。这条命令会告诉 pytest 运行所有符合*.rst(即所有以.rst结尾的文件)模式的文件的 doctests。这样,您就可以让 pytest 运行使用 ReStructuredText(RST)编写的文档中的 doctests,而不仅仅是传统的文本文件。在命令行上,参数可以多次给出。默认情况下,pytest 会收集所有符合test*.txt模式的文件,并查找其中的 doctest 指令。但是,你可以使用。原创 2024-07-17 09:07:18 · 516 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------13.如何捕获警告warnings
虽然不推荐这样做,但你可以使用命令行选项来完全抑制测试运行输出中的警告摘要。记录警告提供了一种机会,用于在没有发出警告或满足其他条件时生成自定义的测试失败消息。f() # 假设f是一个可能发出警告的函数")如果在调用f()时没有发出任何警告,那么not record将评估为True。随后,你可以使用自定义的错误消息调用,以指示测试失败的原因。在这个例子中,如果f()没有发出任何警告,测试将失败,并显示消息“Expected a warning!”,这有助于测试人员或开发者理解测试失败的原因。原创 2024-07-17 16:26:30 · 621 阅读 · 0 评论 -
pytest8.x版本 中文使用文档-------7.如何在测试中使用临时目录和文件
在编写测试时,经常需要创建临时目录和文件来模拟或存储测试过程中产生的数据。这样做的好处是测试完成后可以轻松地清理这些临时数据,避免对测试环境造成污染。tmp_path。原创 2024-07-16 10:37:01 · 694 阅读 · 0 评论