Skip to content

测试套件

信息

关于Rust测试套件的更多信息将在稍后添加到本页面。

py-polars/tests 文件夹包含主要的 Polars 测试套件。本页包含有关测试套件各个组件的一些信息,以及编写新测试的指南。

测试套件包含四个主要组件,每个组件都限制在自己的文件夹中:单元测试、参数化测试、基准测试和文档测试。

请注意,这个测试套件也间接负责测试Rust Polars。为了减少编译时间,Rust测试套件保持较小规模。许多Rust功能在这里进行测试。

单元测试

unit 文件夹包含所有常规单元测试。这些测试旨在确保所有 Polars 功能按预期工作。

运行单元测试

通过从py-polars文件夹运行make test来运行单元测试。这将编译Rust绑定,然后运行单元测试。

如果你只在Python代码中工作,你可以通过简单地运行pytest来避免每次重新编译,直接从你的虚拟环境中运行。

默认情况下,本地测试运行时会跳过“慢速”测试和“仅限CI”测试。这些测试使用自定义pytest标记进行标记。要专门运行这些测试,可以运行pytest -m slowpytest -m ci_onlypytest -m slow ci_only,或者运行pytest -m ""来运行所有测试,无论是否有标记。

请注意,"ci-only"测试可能需要您运行make requirements-all来获取额外的依赖项(例如torch),这些依赖项通常不作为默认的Polars开发环境的一部分安装。

可以通过运行pytest -n auto来并行运行测试。并行化由pytest-xdist处理。

编写单元测试

每当你添加新功能时,你也应该添加相应的单元测试。将你的测试添加到unit文件夹中的适当测试模块。一些需要记住的指导原则:

  • 尝试全面覆盖你能想到的所有可能的输入和边缘情况。
  • 在适当的地方使用pytest工具,如fixtureparametrize
  • 由于许多测试首先需要定义一些数据,因此在单个测试中运行多个检查可能会更高效。这也可以通过使用pytest fixtures来解决。
  • 单元测试不应依赖外部因素,否则测试并行化将会中断。

参数检验

parametric 文件夹包含使用 Hypothesis 框架编写的参数化测试。这些测试旨在通过生成许多随机数据点来发现和测试边缘情况。

运行参数测试

通过运行pytest -m hypothesis来运行参数化测试。

请注意,在运行pytest时,默认情况下会排除参数化测试。您必须明确指定-m hypothesis来运行它们。

这些测试在计算测试覆盖率时被包括在内,并且也将作为make test-all make命令的一部分运行。

文档测试

docs 文件夹包含一个用于运行 doctest 的脚本。此文件夹不包含任何实际的 测试 - 相反,该脚本会检查 Polars 包中的所有文档字符串中的 Examples 部分,运行 代码示例,并验证输出。

运行doctest的目的是确保我们文档字符串中的Examples部分是有效的,并且随着代码的更改保持最新。

运行 doctest

要运行doctest模块,请从py-polars文件夹运行make doctest。你也可以直接从你的虚拟环境中运行该脚本。

请注意,doctests 使用 pytest 运行。虽然 pytest 确实有能力运行文档示例,但其配置选项对于我们的目的来说过于有限。

Doctests 不会 计入测试覆盖率。它们不能替代单元测试,而是旨在向用户传达 Polars API 的预期用途。

编写文档示例

几乎所有作为Polars公共API一部分的类/方法/函数都应该在其文档字符串中包含代码示例。这些示例帮助用户理解基本用法,并允许我们展示更高级的概念。编写良好的文档字符串示例部分的一些指南:

  • 从一个展示默认功能的最小示例开始。
  • 展示其参数的效果。
  • 展示与其他代码结合时的任何特殊交互。
  • 保持简洁,避免展示相同内容的多个示例。

已经有很多很棒的文档字符串示例,如果你需要灵感,只需查看其他代码!

除了编写doctests时可用的常规选项外,脚本配置还允许使用一个新的IGNORE_RESULT指令。如果您想确保代码运行,但输出可能是随机的或不需要检查,请使用此指令。

>>> df.sample(n=2)  # doctest: +IGNORE_RESULT

基准测试

benchmark 文件夹包含用于运行各种基准测试的代码。这部分测试套件的目的是发现代码中的性能回归,并验证 Polars 功能在发布版本或更大规模运行时是否按预期工作。

Polars 使用 CodSpeed 来跟踪基准测试的性能。

生成数据

对于大多数测试,首先必须生成一个相对较大的数据集。这是作为pytest设置过程的一部分完成的。

数据生成逻辑取自 H2O.ai数据库基准测试,这是许多基准测试的基础。

运行基准测试

基准测试可以使用pytest运行。运行pytest -m benchmark --durations 0 -v来运行这些测试并报告运行时间。

请注意,在运行pytest时,基准测试默认是被排除的。你必须明确指定-m benchmark来运行它们。在计算测试覆盖率时,它们也会被排除。

这些测试作为make test-all make命令的一部分运行。