首页 >后端开发 >Python教程 >韦德罗钩子

韦德罗钩子

Susan Sarandon
Susan Sarandon原创
2024-11-30 13:32:11422浏览

Vedro Hooks

Vedro 通过其插件系统提供强大的可扩展性,使您能够创建强大的、可重用的解决方案,并可以在不同的项目和团队之间共享。但是,如果您只是试验代码库、构建概念原型或添加小调整怎么办?编写一个完整的插件可能感觉有点大材小用。这就是 vedro-hooks 发挥作用的地方。

vedro-hooks 是一个轻量级库,可让您将自定义挂钩附加到各种 Vedro 事件。无论您是在测试运行之前启动模拟服务器、启动浏览器进行端到端测试还是设置自定义日志记录,vedro-hooks 都可以让您以最少的样板代码注入功能。

一个实际的例子

假设您想要识别套件中的慢速测试 - 让我们将“慢速”定义为运行时间超过 1 秒的任何测试。传统上,您需要为此创建一个自定义插件。看起来可能是这样的:

from vedro.core import Dispatcher, Plugin, PluginConfig
from vedro.events import ScenarioFailedEvent, ScenarioPassedEvent

class SlowTestPlugin(Plugin):
    def subscribe(self, dispatcher: Dispatcher):
        dispatcher.listen(ScenarioPassedEvent, self.on_scenario_end)
        dispatcher.listen(ScenarioFailedEvent, self.on_scenario_end)

    def on_scenario_end(self, event: ScenarioPassedEvent | ScenarioFailedEvent):
        elapsed = event.scenario_result.elapsed
        if elapsed > 1.0:
            event.scenario_result.add_extra_details("⚠️ Slow test!")

class SlowTestPluginConfig(PluginConfig):
    plugin = SlowTestPlugin

这种方法有效,但是创建一个成熟的插件需要更多的设置和额外的样板。它非常适合可重复使用的解决方案,但对于快速实验来说可能会感觉很麻烦。

使用 Hook 进行简化

使用 vedro-hooks,只需几行代码即可实现相同的功能:

from vedro_hooks import on_scenario_passed, on_scenario_failed

@on_scenario_passed
@on_scenario_failed
def highlight_slow_tests(event):
    elapsed = event.scenario_result.elapsed
    if elapsed > 1.0:
        event.scenario_result.add_extra_details("⚠️ Slow test!")

此代码使用装饰器来注册一个函数,该函数将在场景通过或失败时调用。它会检查经过的时间,如果场景花费的时间超过 1 秒,则会添加额外的详细信息。

Scenarios
*
 ✔ retrieve user info (0.52s)
 ✔ retrieve user repos (1.02s)
   |> ⚠️ Slow test!

# 2 scenarios, 2 passed, 0 failed, 0 skipped (1.54s)

管理 Hook:缺点和解决方案

以这种方式使用钩子的一个缺点是它们可以从项目中的任何位置注册,这可能会使以后更难追踪它们。相比之下,Vedro 中的插件注册在 vedro.cfg.py 文件中,为所有插件配置提供集中位置。

为了帮助减轻在整个代码库中注册钩子的缺点,vedro-hooks 提供了 --hooks-show 命令行参数。启用后,测试过程完成后,将显示所有已注册挂钩的摘要及其源位置。这对于调试和验证哪些钩子处于活动状态非常有用。

Scenarios
*
 ✔ retrieve user repos

# [vedro-hooks] Hooks:
#  - 'highlight_slow_tests' (ScenarioFailedEvent) vedro.cfg.py:26
#  - 'highlight_slow_tests' (ScenarioPassedEvent) vedro.cfg.py:26
# 1 scenario, 1 passed, 0 failed, 0 skipped (0.55s)

虽然 --hooks-show 很有帮助,但您需要记住在调试过程中使用它。最佳实践仍然是在像 vedro.cfg.py 这样的中心位置注册您的钩子,以保持插件配置的清晰度和一致性。

结论

vedro-hooks 是一个很棒的工具,可以增强您的 Vedro 测试,而无需创建自定义插件。当您需要一个快速、集中的解决方案来扩展功能时,它就会大放异彩。通过明智地使用它并保持配置井井有条,您可以享受两全其美:简单性和可维护性。

以上是韦德罗钩子的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn