paint-brush
加速您的 Pytest 性能以提高代码质量和更快的反馈经过@launchable
79,541 讀數
79,541 讀數

加速您的 Pytest 性能以提高代码质量和更快的反馈

经过 Launchable7m2023/04/26
Read on Terminal Reader

太長; 讀書

Pytest 的优雅和简单使编写测试、断言、固定装置和插件成为开发人员的无缝体验。但是,与任何工具一样,它也有其局限性。 将 Launchable 集成到您的 pytest 测试工作流程中可以节省大量时间和资源,从而使您能够加快开发周期并更高效地交付高质量代码。 探索代码示例和动手操作步骤,以便在不牺牲代码质量的情况下轻松集成 Pytest 和 Launchable 以加快发布速度。
featured image - 加速您的 Pytest 性能以提高代码质量和更快的反馈
Launchable HackerNoon profile picture

将 Launchable 的预测测试选择与 Pytest 集成

在不断发展的软件开发环境中,对可扩展和有效测试过程的需求从未如此重要。随着应用程序复杂性的增加,维护快速、可靠的测试工作流程变得越来越具有挑战性。进入 pytest,这是一个流行的 Python 测试框架,它使开发人员编写和组织测试变得轻而易举。


但是如果我们能让 pytest 变得更好呢?


Launchable利用机器学习来预测哪些测试最有可能发现潜在缺陷,从而大大减少运行不相关测试所花费的时间。通过将 pytest 的简单性和灵活性与 Launchable 的强大预测功能相结合,您将能够将测试效率和准确性提升到一个新的水平。


深入了解将 pytest 与 Launchable 的预测测试选择结合使用的好处,完成设置过程,并了解这些工具如何协同工作以彻底改变您的测试工作流程。准备好改变您测试 Python 应用程序的方式!

了解 Pytest 的基础知识(包括动手代码示例):在 Pytest 中编写测试、断言、夹具和插件

Pytest 的优雅和简单使编写测试、断言、固定装置和插件成为开发人员的无缝体验。凭借其直观的语法和强大的功能,您可以为所有类型的软件测试设计易于理解和维护的测试。让我们更详细地探讨这些概念,看看如何在您的测试工作流程中利用它们。

Pytest 测试和断言

Pytest 允许您使用标准 Python assert 语句编写测试函数,使您的测试清晰易读。要创建测试,只需定义一个名称以test_开头的函数,并使用断言来检查是否满足预期行为。这是一个简单的例子:


 def add(a, b): return a + b def test_add(): assert add(2, 3) == 5 assert add(-1, 5) == 4 assert add(0, 0) == 0


Pytest 夹具

pytest 中的固定装置提供了一种方便的方法来设置和拆除可重用资源,例如数据库连接、临时文件或测试数据。它们帮助您维护一个干净的、模块化的测试套件。要创建夹具,请使用下面示例中显示的 @pytest.fixture 装饰器。


 import pytest @pytest.fixture def sample_data(): return {"name": "John Doe", "age": 30} def test_sample_data(sample_data): assert sample_data["name"] == "John Doe" assert sample_data["age"] == 30


在上面的示例中, sample_data夹具会自动传递给任何请求它作为参数的测试函数,确保测试套件中的测试数据一致。

Pytest 插件

Pytest 的插件系统允许您扩展其功能或将其与其他工具集成,使其更加通用。您可以使用现有的插件或创建自己的插件。要安装现有插件,请使用 pip 包管理器。例如,在命令行中运行以下命令来安装 pytest-cov 插件。


pip install pytest-cov


要创建自定义插件,请定义一个新的 python 模块(示例中名为my_plugin_module )。从那里,您将模块注册为 setup.py 文件中的入口点。


 # setup.py from setuptools import setup setup( ... entry_points={"pytest11": ["my_plugin = my_plugin_module"]}, ... )


Pytest 的优点和局限性

测试是软件开发的一个重要方面,可确保您的代码健壮、可靠且无错误。 Pytest 因其简单、灵活和强大的功能而成为 Python 开发人员的热门选择。但是,与任何工具一样,它也有其局限性。

Pytest 的好处

  1. 易于使用 - 语法简单,易于编写测试,测试自动化: Pytest 提供简单直观的语法,即使对于初学者也可以轻松编写测试。凭借其内置的测试发现,pytest 可以自动检测并运行测试,从而节省开发人员的时间和精力。


  2. 全面的特性:参数化测试、夹具、断言: Pytest 提供了一套强大的特性,如参数化测试、夹具和高级断言功能,使编写全面和可维护的测试变得更加容易。


  3. Extensibility: Plugins,能够扩展功能: Pytest的插件系统使开发者能够扩展其功能或与其他工具集成,增加其通用性。


  4. 全面的文档: 易于理解的说明和示例: Pytest 组织良好的文档提供了清晰的说明和示例,使开发人员可以轻松学习和掌握该框架。 pytest 的 Launchable 集成记录在代码示例中——这对您开始使用 pytest 和 Launchable 很有帮助。


  5. 跨平台兼容性:运行在Windows、Linux和MacOS上: Pytest是跨平台兼容的,这意味着它可以运行在Windows、Linux和MacOS等各种操作系统上,确保流畅的测试体验。


  6. 社区支持:访问大量有用的用户社区: Pytest 拥有一个庞大的支持社区,这在解决问题、分享知识和了解最新发展方面非常宝贵。

Pytest 限制

尽管有很多好处,pytest 也有一些开发人员应该考虑的限制:


  1. 对非 Python 语言的有限支持: Pytest 是为 Python 设计的,因此它没有对其他语言的广泛支持。如果您需要测试用 Python 以外的语言编写的代码,这可能会成为一个问题。


  2. 难以调试复杂测试: Pytest 在处理复杂测试时可能难以调试。如果测试涉及多个组件或需要深入了解被测试的代码,这可能尤其具有挑战性。


  3. 并不总是适合所有项目:虽然 pytest 非常适合单元测试,但它可能并不适合所有项目。例如,如果您的项目需要集成测试或端到端测试,那么 pytest 可能不是最佳选择。


好消息是,如果您使用 Launchable 的预测测试选择,则无需运行数小时的复杂集成测试套件。

Launchable 和 Pytest 如何协同工作

在当今快节奏的开发环境中,每一分钟都很重要。长时间的测试运行会影响生产力、延迟部署、降低开发人员的体验并增加成本。幸运的是,借助 Launchable pytest 集成,您可以利用预测测试选择的强大功能来优化测试工作流程、加快测试速度并改善开发人员体验。


测试智能平台 Launchable使用机器学习来预测哪些测试最有可能检测到潜在缺陷。通过 Launchable 的 pytest 集成,您可以优先运行最相关的测试,节省宝贵的机器时间并为开发人员提供更快的反馈。


将 Launchable 添加到 pytest 允许开发人员和 DevOps 团队:


  1. 减少测试执行时间:通过仅运行最相关的测试,您可以显着减少测试执行所花费的时间,从而实现更快的迭代和更快的部署。


  2. 优化资源利用率:Launchable 的智能测试选择可确保您的计算资源得到高效使用,从而降低测试的总体成本并释放资源用于其他任务。


  3. 提高测试套件的可靠性:通过对最有可能发现缺陷的测试进行优先排序,您可以在开发周期的早期检测并修复问题,从而提高代码库的整体质量和可靠性。

Pytest 和 Launchable 的实践教程

要开始使用 Launchable pytest 插件,需要四个简单的步骤。


✅ 安装可启动的 Pytest 插件

安装 Launchable pytest 插件: pip3 install pytest-launchable


✅ 设置您的 Launchable API Key

https://app.launchableinc.com/signup/注册一个 Launchable 帐户(如果您还没有)并创建您的 API 密钥。将您的密钥导出为 CI 脚本中的环境变量: export LAUNCHABLE_TOKEN=<your_launchable_api_key>

将此密钥保存在安全的地方 - 避免将其留在您的源代码中以供所有人查看。


✅ 记录并提交测试数据到 Launchable:

在 Launchable 可以预测运行哪些测试之前,它需要历史测试数据。要记录和提交测试数据,请设置您的可启动配置。

您可以通过 pip 运行来生成 Launchable 配置: launchable-config --create ,或者您可以将此示例复制到一个名为.launchable.d/config.yml的新文件中:


 # Launchable test session configuration file # See https://docs.launchableinc.com/resources/cli-reference for detailed usage of these options # schema-version: 1.0 build-name: commit_hash record-build: # Put your git repository location here source: . max_days: 30 record-session: subset: # mode can be subset, subset-and-rest, or record-only mode: record-only # if mode is subset or subset-and-rest, you must specify one of target/confidence/time # examples: # target: 30% # Create a variable time-based subset of the given percentage. (0%-100%) # confidence: 30% # Create a confidence-based subset of the given percentage. (0%-100%) # time: 30m # Create a fixed time-based subset. Select the best set of tests that run within the given time bound. (eg 10m for 10 minutes, 2h30m for 2.5 hours, 1w3d for 7+3=10 days. ) confidence: 99 record-tests: # The test results are placed here in JUnit XML format result_dir: launchable-test-result


✅ 启用预测测试选择:

一旦您提交了足够的测试数据,您就可以开始使用 Launchable 的预测测试选择。


您需要做的就是更新您的config.yml文件。将subset mode更改为subset ,设置优化目标( targettimeconfidence之一),然后保存文件。这会在您运行pytest --launchable时启用子集化。


简单的peasy,柠檬挤压!


然后,Launchable 将选择最关键和最相关的测试,优化您的测试工作流程并为您的开发团队提供更快的反馈。


有关全面的文档,请参阅pytest(集成)|可启动的文档


关于 Pytest 和预测测试选择的最后评论

将 Launchable 集成到您的 pytest 测试工作流程中可以节省大量时间和资源,从而使您能够加快开发周期并更高效地交付高质量代码。


通过优先考虑最相关的测试,您不仅可以节省机器时间,还可以让您的开发团队更快地收到反馈从而更快地解决问题并提高整体代码质量。



也发布在这里。