Pytest-Bdd-Playwright 系列教程(13):钩子(hooks)

Pytest-Bdd-Playwright 系列教程(13):钩子(hooks)

  • 前言
  • 一、什么是钩子?
  • 二、Pytest-Bdd 提供的钩子一览
  • 三、钩子用法详解
    • 1. `pytest_bdd_before_scenario`
    • 2. `pytest_bdd_after_scenario`
    • 3. `pytest_bdd_before_step`
    • 4. `pytest_bdd_before_step_call`
    • 5. `pytest_bdd_after_step`
    • 6. `pytest_bdd_step_error`
    • 7. `pytest_bdd_step_func_lookup_error`
  • 四、钩子的最佳实践
  • 总结

前言

  • 在自动化测试中,钩子(hooks)是非常重要的工具,它能够帮助我们在特定的测试执行阶段注入自定义逻辑,从而提高测试的灵活性和可维护性;
  • 对于使用 Pytest-BddPlaywright 进行测试开发的团队而言,了解并正确使用这些钩子不仅可以优化测试流程,还能够在调试和异常处理时提供极大的帮助;
  • 本文将系统讲解 Pytest-Bdd 中的各类钩子,配合 Playwright 实际案例,帮助大家更高效地掌控测试生命周期。

一、什么是钩子?

在 Pytest-Bdd 中,钩子是指在测试生命周期的特定阶段提供的回调函数接口。

通过这些接口,我们可以注入特定的逻辑,例如初始化测试数据、捕获执行信息或处理异常。

Pytest-Bdd 提供了一组钩子,涵盖场景、步骤和函数的不同执行阶段,包括:

  • 测试场景的开始和结束
  • 每个测试步骤的前后
  • 步骤失败或找不到匹配函数时的处理

二、Pytest-Bdd 提供的钩子一览

以下是 Pytest-Bdd 支持的主要钩子及其触发时机:

在这里插入图片描述

三、钩子用法详解

1. pytest_bdd_before_scenario

应用场景
在场景执行前准备必要的测试数据或初始化测试上下文。例如,在 Playwright 测试中,可以通过此钩子初始化浏览器实例。

代码示例

import pytest
from playwright.sync_api import sync_playwright

@pytest.fixture
def browser():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        yield browser
        browser.close()

def pytest_bdd_before_scenario(request, feature, scenario):
    print(f"Starting scenario: {scenario.name}")

功能解析
通过 pytest_bdd_before_scenario 钩子,可以在测试场景开始前输出日志或设置必要的上下文信息,确保测试环境的一致性。


2. pytest_bdd_after_scenario

应用场景
无论场景中是否发生错误,清理资源都是测试中必不可少的一步。使用此钩子可以确保资源的释放和日志记录。

代码示例

def pytest_bdd_after_scenario(request, feature, scenario):
    print(f"Finished scenario: {scenario.name}")

功能解析
在上述代码中,钩子会在场景执行后打印日志。实际使用中,可以在此处清理测试环境,释放数据库连接或关闭服务实例。


3. pytest_bdd_before_step

应用场景
在步骤执行之前注入前置操作,例如记录步骤的名称、验证前置条件或预加载测试数据。

代码示例

def pytest_bdd_before_step(request, feature, scenario, step, step_func):
    print(f"Preparing to execute step: {step.name}")

功能解析
此钩子常用于调试复杂的测试场景。通过打印当前步骤的名称,便于在测试失败时快速定位问题。


4. pytest_bdd_before_step_call

应用场景
在步骤执行之前对函数参数进行修改或注入动态值。例如,在登录测试中为用户生成唯一的会话信息。

代码示例

def pytest_bdd_before_step_call(request, feature, scenario, step, step_func, step_func_args):
    print(f"Step function will be called with arguments: {step_func_args}")

5. pytest_bdd_after_step

应用场景
步骤执行后验证结果或记录成功信息。例如,在 API 测试中,记录每次请求的响应数据。

代码示例

def pytest_bdd_after_step(request, feature, scenario, step, step_func, step_func_args):
    print(f"Successfully executed step: {step.name}")

6. pytest_bdd_step_error

应用场景
捕获步骤执行中的错误并记录异常信息,便于后续分析。例如,在 Playwright 测试中捕获页面加载失败的错误。

代码示例

def pytest_bdd_step_error(request, feature, scenario, step, step_func, step_func_args, exception):
    print(f"Error in step: {step.name} - Exception: {exception}")

7. pytest_bdd_step_func_lookup_error

应用场景
在未找到步骤定义时触发,可以用于提示开发者补充缺失的步骤定义。

代码示例

def pytest_bdd_step_func_lookup_error(request, feature, scenario, step, exception):
    print(f"Step lookup failed: {step.name} - Exception: {exception}")

四、钩子的最佳实践

  1. 保持钩子逻辑简洁
    钩子的主要职责是提供关键点的控制,避免将复杂的业务逻辑堆积在钩子中。

  2. 搭配日志记录
    使用钩子记录场景和步骤的详细信息,方便调试和问题定位。

  3. 与 Playwright 配合使用
    将 Pytest-Bdd 的钩子与 Playwright 的页面控制逻辑结合,可以实现更精细化的测试管理。

  4. 处理异常
    钩子是捕获异常的好帮手。通过 pytest_bdd_step_error 钩子记录失败详情,为后续分析提供支持。

总结

Pytest-Bdd 的钩子机制为自动化测试提供了强大的控制能力。通过在测试生命周期的不同阶段注入自定义逻辑,可以大幅提升测试的灵活性和可维护性。在与 Playwright 集成时,这些钩子不仅能优化测试流程,还能增强调试效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/924235.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

23种设计模式-生成器(Builder)设计模式

文章目录 一.什么是生成器设计模式?二.生成器模式的特点三.生成器模式的结构四.生成器模式的优缺点五.生成器模式的 C 实现六.生成器模式的 Java 实现七.代码解析八. 总结 类图: 生成器设计模式类图 一.什么是生成器设计模式? 生成器模式&am…

HCIP——堆叠技术实验配置

目录 一、堆叠的理论知识 二、堆叠技术实验配置 三、总结 一、堆叠的理论知识 1.1堆叠概述: 是指将两台交换机通过堆叠线缆连接在一起,从逻辑上变成一台交换设备,作为一个整体参与数据的转发。 1.2堆叠的基本概念 堆叠系统中所有的单台…

Python - 函数(四)

函数:在编写程序的过程中,有某一功能代码块出现多次, 但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数 ‌Python中的函数‌是一组被命名的可执行代码,用于完…

豆包MarsCode算法题:三数之和问题

问题描述 思路分析 1. 排序数组 目的: 将数组 arr 按升序排序,这样可以方便地使用双指针找到满足条件的三元组,同时避免重复的三元组被重复计算。优势: 数组有序后,处理两个数和 target - arr[i] 的问题可以通过双指针快速找到所有可能的组…

使用guzzlehttp异步多进程实现爬虫业务

Python和PHP核心技术共享平台 背景 小哥近来在通过动态代理池爬取一些公司需要的大文件pdf规格书的处理。遇到的难点,如何保证服务器CPU、连接数等正常情况下,多进程、异步快速处理这些业务并且保证准确。下面小哥就给看官唠嗑一下,我使用gu…

Chrome和edge浏览器如何为任何网站强制暗模式

前言 因为我的编辑器是黑色,可能是看的时间长了比较喜欢这种颜色了,感觉白色有些刺眼。尤其是看文章时,两边的空白纯白色,所以强迫症搜素设置了谷歌浏览器和edge如何设置成黑色。 Chrome和edge浏览器如何为任何网站强制暗模式 前…

STM32-- keil使用 -设备选择

keil-arm 在project--》manager--》pack installer,更新芯片包, 有些这里不全面,可以在官网下载包进行安装。 比如stm8系列在这里是没有的,因为他的内核是哈弗架构。还有51单片机要在keil c51里面找 keil5中找不到或没有对应的…

K8s内存溢出问题剖析:排查与解决方案

文章目录 一、背景二、排查方案:1. 可能是数据量超出了限制的大小,检查数据目录大小2. 查看是否是内存溢出2.1 排查数据量(查看数据目录大小是否超过limit限制)2.2 查看pod详情发现问题 三、解决过程 一、背景 做redis压测过程中…

在 Mac ARM 架构(例如 M1 或 M2 芯片)上安装 Node.js

文章目录 方法一:使用 Homebrew 安装 Node.js方法二:使用 Node Version Manager (NVM) 安装 Node.js方法三:从 Node.js 官方网站下载安装包注意事项 在 Mac ARM 架构(例如 M1 或 M2 芯片)上安装 Node.js 可以通过几种不…

pycharm2021.1汉化失败 “chinese (simplified) language pack“ was not installed

汉化报错:pycharm plugin “chinese (simplified) language pack” was not installed : Invalid filename returned by a server 翻译:pycharm 插件“中文(简体)语言包”未安装:服务器返回的文件名无效 解决&#…

Java基于 SpringBoot+Vue的口腔管理平台(附源码+lw+部署)

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

图书系统小案例

目前就实现了分页查询,修改,删除功能 这个小案例练习到了很多技能,比如前后端交互、异步请求、三层架构思想、后端连接数据库、配置文件、基础业务crud等等 感兴趣的小伙伴可以去做一个试试 准备工作 1、使用maven构建一个web工程 打开i…

延时系统建模,整数延时与分数延时,连续传函与离散传函,Pade近似与Thiran近似,Matlab实现

连续传递函数 严格建模:指数形式 根据拉普拉斯变换的性质, [ f ( t ) ↔ F ( s ) ] ⇔ [ f ( t − t 0 ) ↔ e − s t 0 F ( s ) ] \left[ {f\left( t \right) \leftrightarrow F\left( s \right)} \right] \Leftrightarrow \left[ {f\left( {t - {t_0…

3.14MayBeSomeStack

栈指针是sp 静态数据在内存中位置不改变 码距就是相邻两个合法的数据之间的差距,如果为2的话,相邻两个合法的数据之间存在一个冗余的数据,这个数据肯定是出错的,但是无法判断是哪个合法的数产生的; 如果码距是3的话&…

NLP 2、机器学习简介

人生的苦难不过伏尔加河上的纤夫 —— 24.11.27 一、机器学习起源 机器学习的本质 —— 找规律 通过一定量的训练样本找到这些数据样本中所蕴含的规律 规律愈发复杂,机器学习就是在其中找到这些的规律,挖掘规律建立一个公式,导致对陌生的数…

springboot视频网站系统的设计与实现(代码+数据库+LW)

摘 要 使用旧方法对视频信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在视频信息的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。 这次开发的视频网站系统管理员功…

探索Python网页解析新纪元:requests-html库揭秘

文章目录 **探索Python网页解析新纪元:requests-html库揭秘**1. 背景介绍:为何选择requests-html?2. requests-html库是什么?3. 如何安装requests-html库?4. 五个简单的库函数使用方法4.1 发起HTTP请求4.2 解析HTML内容…

DataWhale—PumpkinBook(TASK05决策树)

课程开源地址及相关视频链接:(当然这里也希望大家支持一下正版西瓜书和南瓜书图书,支持文睿、秦州等等致力于开源生态建设的大佬✿✿ヽ(▽)ノ✿) Datawhale-学用 AI,从此开始 【吃瓜教程】《机器学习公式详解》(南瓜…

爱尔兰杀菌剂数据分析_1

前言 提醒: 文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。 其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展…

捉虫笔记(七)-再探谁把系统卡住了

捉虫笔记(七)-再探谁把系统卡住 1、内核调试 在实体物理机上,内核调试的第一个门槛就是如何建立调试链接。 这里我选择的建立网络连接进行内核调试。 至于如何建立网络连接后续文章再和大家分享。 2、如何分析 在上一篇文章中,我们…