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, parserslog = 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 参数,能够有效地共享步骤之间的数据,从而简化测试逻辑并提升代码的复用性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【笔记】变压器-热损耗-频响曲线推导 - 03 变压器参数-特性

参考《Mn-Zn开关电源用铁氧体磁心 PQ系列》,March 2014版 1.可能选择的型号和参数 PQ系列的这种铁氧体结构设计是TDK首创的。 优势是,相对E, EER磁芯,安装面积更小材质选择 PC47PC90PC95尺寸 PQ20/16 最小PQ50/50 最大 2.特性 2.1 温升与…

Unity性能优化 -- 性能分析工具

Stats窗口Profiler窗口Memory Profiler其他性能分析工具(Physica Debugger 窗口,Import Activity 窗口,Code Coverage 窗口,Profile Analyzer 窗口,IMGUI Debugger 窗口) Stats 统级数据窗口 game窗口 可…

一些swift问题

写得比较快,如果有问题请私信。 序列化和反序列化 反序列化的jsonString2只是给定的任意json字符串 private func p_testDecodeTable() {let arr ["recordID123456", "recordID2"]// 序列化[string] -> json datalet jsonData try? JSO…

VMware虚拟机Debian扩展磁盘

一、 版本 VMware:Workstation 17 Pro虚拟机:Debian11 二、 VMware虚拟机扩展 虚拟机关机状态快照或者备份:以免扩容失败导致文件丢失虚拟机——设置——硬盘——磁盘使用工具——扩展——扩展磁盘容量——设置为想要的大小 三、 虚拟机…

GameFramework教程☀️福利(五):关于该框架的一些意义

文章目录 📢 不同模式的意义本章探讨GF这样编写的意义和使用场景。 📢 不同模式的意义 最近在做一个app,现在在调研阶段。 代码上后期可能用华佗进行C#热更新。 在调研华佗打包完的热更代码如何和UI AB结合起来时,看到了: "> 从这一点可以延伸理解出,当我们使…

【漏洞复现】某平台-QRcodeBuildAction-LoginSSO-delay-mssql-sql注入漏洞

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect 《Web安全》h…

Armv8的安全启动

目录 1. Trust Firmware 2. TF-A启动流程 3. TF-M启动流程 3.1 BL1 3.2 BL2 4.小结 在之前汽车信息安全 -- 再谈车规MCU的安全启动文章里,我们详细描述了TC3xx 、RH850、NXPS32K3的安全启动流程,而在车控类ECU中,我们也基本按照这个流程…

vue+django+neo4j航班智能问答知识图谱可视化系统

🔞 友友们,有需要找我,懂的都懂 🩵 基于NLP技术知识图谱的航班知识智能问答 🩵 技术架构:vue django mysql neo4j 🩵 数据:航班数据7万多条 🩵 vue知识图谱的模糊查询…

DICOM标准:核医学图像模块属性——核医学(Nuclear Medicine, NM)DICOM标准详解

目录 引言 1. NM 序列模块(NM Sequence Module) 1.1 NM序列模块属性 2. NM 设备模块(NM Equipment Module) 2.1 NM设备模块属性 3. NM 图像模块(NM Image Module) 3.1 NM图像模块属性 3.2 帧增量指针…

ViT面试知识点

文章目录 VITCLIPBlipSAMFast TransformerYOLO系列问题 BatchNorm是对一个batch-size样本内的每个特征做归一化,LayerNorm是对每个样本的所有特征做归一化。 Layer Normalization(层归一化,简称LayerNorm)是一种在深度学习中常用…

WPF使用Prism框架首页界面

1. 首先确保已经下载了NuGet包MaterialDesignThemes 2.我们通过包的项目URL可以跳转到Github上查看源码 3.找到首页所在的代码位置 4.将代码复制下来&#xff0c;删除掉自己不需要的东西&#xff0c;最终如下 <materialDesign:DialogHostDialogTheme"Inherit"Ide…

CTFshow之信息收集第1关到10关。详细讲解

得而不惜就该死&#xff01; --章总 开始新的篇章&#xff01; 零、目录 一、实验准备 1、ctf网站&#xff1a;ctf.show 2、工具&#xff1a;chrome浏览器、hackbar插件 3、burpsuite抓包工具 二、实验技巧 &#xff08;一&#xff09;F12摸奖 源码泄露 &#xff08;二…

企业CRM管理系统PHP源码/PHP客户关系CRM客户管理系统源码

系统功能实现 1、 公海管理:公海类型、客户公海。 2、 线索管理:我的线索、线索列表、线索状态、线索来源。 3、 客户管理:我的客户、客户列表、成交客户、行业类别、预查、地区列表、客户状态、客户级别。 4、 业绩订单:订单列表、我的订单。 5、 系统设置:系统设置…

40.第二阶段x86游戏实战2-初识lua

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

DAY17|二叉树Part03|LeetCode: 530.二叉搜索树的最小绝对差、501. 二叉搜索树中的众数、236.二叉树的最近公共祖先

目录 LeetCode: 530.二叉搜索树的最小绝对差 基本思路 有序数组法 C代码 双指针法 C代码 LeetCode: 501. 二叉搜索树中的众数 哈希法 C代码 双指针法 C代码 LeetCode: 236.二叉树的最近公共祖先 基本思路 C代码 LeetCode: 530.二叉搜索树的最小绝对差 力扣代码链…

「Mac畅玩鸿蒙与硬件27」UI互动应用篇4 - 猫与灯的互动应用

本篇将带领你实现一个趣味十足的互动应用&#xff0c;用户点击按钮时猫会在一排灯之间移动&#xff0c;猫所在的位置灯会亮起&#xff08;on&#xff09;&#xff0c;其余灯会熄灭&#xff08;off&#xff09;。应用会根据用户的操作动态更新灯光状态和文本提示当前亮灯的位置&…

【网络】套接字编程——UDP通信

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;UDP网络服务器简单模拟实现。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! > 专栏选自&#xff1a;…

黑马官网2024最新前端就业课V8.5笔记---HTML篇

Html 定义 HTML 超文本标记语言——HyperText Markup Language。 标签语法 标签成对出现&#xff0c;中间包裹内容<>里面放英文字母&#xff08;标签名&#xff09;结束标签比开始标签多 /拓展 &#xff1a; 双标签&#xff1a;成对出现的标签 单标签&#xff1a;只有开…

openfoam中生成的3d案例提取得到slice后的2d案例

问题&#xff1a; 由于前期准备做3d的案例&#xff0c;并且模拟也比较费时间&#xff0c;现在生成了几十份3d的数据&#xff0c;但是现在只想要2d的数据来演示&#xff0c;该如何提取或者转换呢&#xff1f; 解决方法&#xff1a; 1.说明图片中的每个2d视图的points都是恒定不…