Pytest-Bdd-Playwright 系列教程(6):在测试步骤函数中设置别名数据共享

Pytest-Bdd-Playwright 系列教程(6):在测试步骤函数中设置别名&数据共享

  • 前言
  • 一、步骤别名
  • 二、特性文件
  • 三、测试脚本
  • 四、运行测试
  • 五、小测验
  • 总结

前言

有的时候,为了提高可读性,我们需要使用不同的名称来声明相同的 fixtures或步骤。在pytest-bdd,要使用同一步骤函数而赋予多个步骤名称,可以简单地对函数进行多次装饰。

通过本文内容的学习,你将能够:

  • 步骤别名:通过为步骤函数添加多个装饰器(例如 @given、@when、@then)来创建步骤别名;
  • target_fixture 参数:利用 target_fixture 共享步骤返回值,使其可被其他步骤引用。

一、步骤别名

steps 目录中定义的 common_steps.py 文件:

import logging
from playwright.sync_api import Page, expect
from pytest_bdd import given, when, then, parsers

log = logging.getLogger(__name__)

@given(parsers.parse('访问网站[{url}]'), target_fixture='get_url')
@given(parsers.parse('王大锤打开网址[{url}]'), target_fixture='get_url')
def goto(page: Page, url: str):
    page.goto(url)
    return url

@given('等待页面加载完成')
@given('页面完全加载')
def wait_for_page_load(page: Page, get_url):
    log.info(f'返回的网址是:{get_url}')
    page.wait_for_load_state()

@when(parsers.parse('王大锤点击元素[{selector}]'))
@when(parsers.parse('点击元素[{selector}]'))
@when(parsers.parse('单击[{selector}]'))
def click(page: Page, selector: str):
    page.locator(selector).click()

@when(parsers.parse('在[{selector}]中输入[{text}]'))
@when(parsers.parse('向[{selector}]输入文本[{text}]'))
def input_text(page: Page, selector: str, text: str):
    page.locator(selector).fill(text)

@then(parsers.parse('元素[{selector}]的文本应为[{text}]'))
@then(parsers.parse('验证元素[{selector}]文本为[{text}]'))
def check_element_has_text(page: Page, selector: str, text: str):
    expect(page.locator(selector)).to_have_text(text)
  • 我们可以通过添加多个装饰器的方式,为每个步骤函数来提供别名。这些步骤别名是独立的,只要被提到就会执行
  • target_fixture 参数,是用来指定步骤返回的 fixture 名称,使其在其他步骤中可以直接引用这个 fixture。在我们希望在多个步骤中共享数据时非常有用。

例如,在上述代码的 goto 步骤中使用 target_fixture ,并在 wait_for_page_load 步骤中引用 goto 的返回值。

二、特性文件

features 目录下的 login.feature 文件:

Feature: 登录功能

  Scenario: 登录

    Given 访问网站[https://parabank.parasoft.com/parabank/index.htm]
    Given 等待页面加载完成

  Scenario: 王大锤登录

    Given 王大锤打开网址[https://parabank.parasoft.com/parabank/index.htm]
    Given 页面完全加载

三、测试脚本

tests目录下的test_login.py文件:

import pytest
from steps.common_steps import *
from pytest_bdd import scenario


@scenario('login.feature', '登录')
def test_login():
    pass

@scenario('login.feature', '王大锤登录')
def test_wang_login():
    pass

四、运行测试

pytest .\tests\test_login.py

运行结果如下:

在这里插入图片描述

五、小测验

为了帮助小伙伴们巩固对步骤别名和 target_fixture 参数的理解,请根据提示补充 login.feature 文件中的缺失测试步骤,以确保覆盖用户登录的完整流程。

请补充完整的 login.feature 文件,确保涵盖所有步骤:

Feature: 登录功能

  Scenario: 登录
    Given 访问网站[https://parabank.parasoft.com/parabank/index.htm]
    Given 等待页面加载完成
    # 请在此处补充缺失的步骤

  Scenario: 王大锤登录
    Given 王大锤打开网址[https://parabank.parasoft.com/parabank/index.htm]
    Given 页面完全加载
    # 请在此处补充缺失的步骤

总结

通过为步骤函数添加多个装饰器,可以提高测试代码的可读性,使其更易于理解和维护。同时,利用 target_fixture 参数,能够有效地共享步骤之间的数据,从而简化测试逻辑并提升代码的复用性。

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

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

相关文章

HTML 分组标签与语义化应用:合理使用 <div>、<span> 和基础语义容器

文章目录 1. `<div>` 标签特点用途示例2. `<span>` 标签特点用途示例3. `<fieldset>` 标签特点用途示例4. `<section>` 标签特点用途示例5. `<article>` 标签特点用途示例总结HTML中的分组(容器)标签用于结构化内容,将页面元素组织成逻辑区域…

关于武汉芯景科技有限公司的马达驱动芯片AT6237开发指南(兼容DRV8837)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 逻辑功能

Android View

前面我们了解了Android四大组件的工作流程&#xff0c;Android中还存在一个和四大组件地位相同的概念&#xff1a;View&#xff0c;用于向用户页面展示内容。我们经常使用的TextView、Button、ImageView控件等都继承于它&#xff0c;也会自定义View实现自定义效果。View类源码内…

谷歌插件开发学习指南

什么是谷歌插件 谷歌插件&#xff08;Chrome Extension&#xff09;是为谷歌浏览器&#xff08;Chrome&#xff09;开发的小程序&#xff0c;旨在增强浏览器的功能或用户体验。它们可以通过添加工具栏按钮、修改网页内容、集成其他服务等方式&#xff0c;实现各种功能&#xf…

linux命令行的艺术

文章目录 前言基础日常使用文件及数据处理系统调试单行脚本冷门但有用仅限 OS X 系统仅限 Windows 系统在 Windows 下获取 Unix 工具实用 Windows 命令行工具Cygwin 技巧 更多资源免责声明 熟练使用命令行是一种常常被忽视&#xff0c;或被认为难以掌握的技能&#xff0c;但实际…

Puppeteer 与浏览器版本兼容性:自动化测试的最佳实践

Puppeteer 支持的浏览器版本映射&#xff1a;从 v20.0.0 到 v23.6.0 自 Puppeteer v20.0.0 起&#xff0c;这个强大的自动化库开始支持与 Chrome 浏览器的无头模式和有头模式共享相同代码路径&#xff0c;为自动化测试带来了更多便利。从 v23.0.0 开始&#xff0c;Puppeteer 进…

知识管理新选择!本地大模型助手“知我AI”全功能解析

抖知书老师推荐&#xff1a; 随着人工智能技术的飞速发展&#xff0c;本地大模型知识管理工具逐渐成为提高工作效率的利器。今天&#xff0c;我要向大家介绍一款名为**“知我AI”**的本地知识管理助手&#xff0c;它以其独特的功能和优势&#xff0c;正在成为众多专业人士的新…

Banana Pi BPI-R3路由器开发板运行 OrayOS物联网系统

近日&#xff0c;Banana PI开发板宣布与贝锐达成战略合作&#xff0c;贝锐OrayOS现已成功适配Banana PI的BPI-R3型号&#xff0c;并计划进一步扩展硬件支持&#xff0c;包括目前Banana PI热销的BPI-R4、BPI-R3 Mini等更多型号。这一合作为用户提供了更广泛的开发板选择&#xf…

No.24 笔记 | WEB安全 - 任意文件包含漏洞 part 6

在 Web 安全领域中&#xff0c;任意文件包含漏洞是一种较为常见且具有潜在危险性的漏洞类型。本文将详细介绍任意文件包含漏洞的概念、原理、分类、利用方法以及防护措施&#xff0c;帮助新手小白更好地理解和防范这一漏洞。&#x1f603; 一、概念 包含的定义 开发人员为了提…

森利威尔SL2516D 耐压60V内置5V功率MOS 支持PWM LED恒流驱动器芯片

一、基本特性 型号&#xff1a;SL2516D封装&#xff1a;ESOP8工作频率&#xff1a;140kHz驱动MOS管&#xff1a;内置 二、电气特性 输入电压范围&#xff1a;8V~100V&#xff08;注意&#xff0c;虽然问题中提到耐压60V&#xff0c;但根据官方信息&#xff0c;其实际耐压范围…

Vscode配置CC++编程环境的使用体验优化和补充说明

文章目录 快速编译运行&#x1f47a;code runner插件方案Code Runner Configuration 直接配置 相关指令和快捷键默认task配置和取消默认 配置文件补充介绍(可选 推荐阅读)&#x1f60a;使用vscode预置变量和环境变量环境变量的使用使用环境变量的好处环境变量可能引起的问题 检…

Linux中rpm包和yum仓库介绍及入门配置

rpm包概述 RPM Package Manager,RPM包管理器 由红帽公司提出&#xff0c;适用于Rocky Linux、Redhat、SUSE等系列操作系统 建立集中数据库&#xff0c;记录软件包安装/卸载等变化信息&#xff0c;分析软件包依赖关系 RPM包 文件名特征 软件名-版本信息.操作系统.硬件架/构.r…

L 波段射频信号采集回放系统

L 波段采集回放系统是一套便携式模拟数字采集系统&#xff0c;该系统主要由射频输入模块、中频接收回放模块、FPGA 信号处理单元、服务器系统和存储单元等组成。 L 波段采集回放系统的功能主要用于对 950MHz〜2150MHz 模拟量射频信号的采集、存储记录与回放&#xff1b;采集与…

百度如何打造AI原生研发新范式?

&#x1f449;点击即可下载《百度AI原生研发新范式实践》资料 2024年10月23-25日&#xff0c;2024 NJSD技术盛典暨第十届NJSD软件开发者大会、第八届IAS互联网架构大会在南京召开。本届大会邀请了工业界和学术界的专家&#xff0c;优秀的工程师和产品经理&#xff0c;以及其它行…

Unity3D 开发教程:从入门到精通

Unity3D 开发教程&#xff1a;从入门到精通 Unity3D 是一款强大的跨平台游戏引擎&#xff0c;广泛应用于游戏开发、虚拟现实、增强现实等领域。本文将详细介绍 Unity3D 的基本概念、开发流程以及一些高级技巧&#xff0c;帮助你从零基础到掌握 Unity3D 开发。 目录 Unity3D…

Vue3和Springboot前后端简单部署

一、Vue3Springboot 的前后端简单部署 (在win下面部署) 1、前端实现部署 思想: 前端打包项目后、放到nginx中进行部署 1、nginx 安装 和 解压 1、下载 nginx.zip win版本 解压就可以 2、解压后、启动程序 3、访问 nginx 欢迎页面 http://localhost/ 80 端口 可以省略 直接访…

中仕公考:2025四川省考今日报名!

2025年四川省考今日开始报名啦&#xff01;准备参加考试的广大考生们不要错过报名时间哦&#xff01; 报名时间&#xff1a; 2024年11月1日至7日上午8:00 资格审查&#xff1a; 2024年11月1日至8日上午8:00 确认缴费&#xff1a; 2024年11月9日上午8:00 准考证打印&#xff…

css 同时实现渐变色和文字阴影(Vue 3 + TypeScript)

UI效果 渐变效果 直接添加text-shadow属性&#xff0c;发现阴影覆盖在了字体之上 解决&#xff1a; 利用::after伪类&#xff0c;将字体的阴影加在伪类之上。 <template><div class"app"><h1 ref"h1Ref">{{ title }}</h1></d…

从美颜SDK到实时视频美颜平台:开发美颜系统的技术解析

今天&#xff0c;笔者将围绕美颜SDK的基本功能、实时视频美颜平台的架构设计&#xff0c;以及实现美颜系统的关键技术进行深入解析。 一、美颜SDK的基础功能 美颜SDK&#xff08;Software Development Kit&#xff09;是实现美颜效果的核心工具包&#xff0c;它通常包含一系列…

【Linux】用户权限管理:创建受限用户并配置特定目录访问权限

本文详细介绍了如何在 Linux 系统中创建一个名为 agent 的新用户&#xff0c;并限制其在特定目录下的权限。通过使用 useradd 命令创建用户&#xff0c;并使用 usermod 命令将新用户添加到现有用户组中&#xff0c;确保其具有适当的权限。接着&#xff0c;通过 chown 和 chmod …