在不断发展的软件开发环境中,对可扩展和有效测试过程的需求从未如此重要。随着应用程序复杂性的增加,维护快速、可靠的测试工作流程变得越来越具有挑战性。进入 pytest,这是一个流行的 Python 测试框架,它使开发人员编写和组织测试变得轻而易举。
但是如果我们能让 pytest 变得更好呢?
Launchable利用机器学习来预测哪些测试最有可能发现潜在缺陷,从而大大减少运行不相关测试所花费的时间。通过将 pytest 的简单性和灵活性与 Launchable 的强大预测功能相结合,您将能够将测试效率和准确性提升到一个新的水平。
深入了解将 pytest 与 Launchable 的预测测试选择结合使用的好处,完成设置过程,并了解这些工具如何协同工作以彻底改变您的测试工作流程。准备好改变您测试 Python 应用程序的方式!
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.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 的插件系统允许您扩展其功能或将其与其他工具集成,使其更加通用。您可以使用现有的插件或创建自己的插件。要安装现有插件,请使用 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 因其简单、灵活和强大的功能而成为 Python 开发人员的热门选择。但是,与任何工具一样,它也有其局限性。
易于使用 - 语法简单,易于编写测试,测试自动化: Pytest 提供简单直观的语法,即使对于初学者也可以轻松编写测试。凭借其内置的测试发现,pytest 可以自动检测并运行测试,从而节省开发人员的时间和精力。
全面的特性:参数化测试、夹具、断言: Pytest 提供了一套强大的特性,如参数化测试、夹具和高级断言功能,使编写全面和可维护的测试变得更加容易。
Extensibility: Plugins,能够扩展功能: Pytest的插件系统使开发者能够扩展其功能或与其他工具集成,增加其通用性。
全面的文档: 易于理解的说明和示例: Pytest 组织良好的文档提供了清晰的说明和示例,使开发人员可以轻松学习和掌握该框架。 pytest 的 Launchable 集成记录在代码示例中——这对您开始使用 pytest 和 Launchable 很有帮助。
跨平台兼容性:运行在Windows、Linux和MacOS上: Pytest是跨平台兼容的,这意味着它可以运行在Windows、Linux和MacOS等各种操作系统上,确保流畅的测试体验。
社区支持:访问大量有用的用户社区: Pytest 拥有一个庞大的支持社区,这在解决问题、分享知识和了解最新发展方面非常宝贵。
尽管有很多好处,pytest 也有一些开发人员应该考虑的限制:
对非 Python 语言的有限支持: Pytest 是为 Python 设计的,因此它没有对其他语言的广泛支持。如果您需要测试用 Python 以外的语言编写的代码,这可能会成为一个问题。
难以调试复杂测试: Pytest 在处理复杂测试时可能难以调试。如果测试涉及多个组件或需要深入了解被测试的代码,这可能尤其具有挑战性。
并不总是适合所有项目:虽然 pytest 非常适合单元测试,但它可能并不适合所有项目。例如,如果您的项目需要集成测试或端到端测试,那么 pytest 可能不是最佳选择。
好消息是,如果您使用 Launchable 的预测测试选择,则无需运行数小时的复杂集成测试套件。
在当今快节奏的开发环境中,每一分钟都很重要。长时间的测试运行会影响生产力、延迟部署、降低开发人员的体验并增加成本。幸运的是,借助 Launchable pytest 集成,您可以利用预测测试选择的强大功能来优化测试工作流程、加快测试速度并改善开发人员体验。
测试智能平台 Launchable使用机器学习来预测哪些测试最有可能检测到潜在缺陷。通过 Launchable 的 pytest 集成,您可以优先运行最相关的测试,节省宝贵的机器时间并为开发人员提供更快的反馈。
将 Launchable 添加到 pytest 允许开发人员和 DevOps 团队:
减少测试执行时间:通过仅运行最相关的测试,您可以显着减少测试执行所花费的时间,从而实现更快的迭代和更快的部署。
优化资源利用率: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
,设置优化目标( target
、 time
或confidence
之一),然后保存文件。这会在您运行pytest --launchable
时启用子集化。
简单的peasy,柠檬挤压!
然后,Launchable 将选择最关键和最相关的测试,优化您的测试工作流程并为您的开发团队提供更快的反馈。
有关全面的文档,请参阅pytest(集成)|可启动的文档。
将 Launchable 集成到您的 pytest 测试工作流程中可以节省大量时间和资源,从而使您能够加快开发周期并更高效地交付高质量代码。
通过优先考虑最相关的测试,您不仅可以节省机器时间,还可以让您的开发团队更快地收到反馈,从而更快地解决问题并提高整体代码质量。
也发布在这里。