当前位置: 首页 > article >正文

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


http://www.kler.cn/a/375372.html

相关文章:

  • Linux 中的 cat 命令:使用、原理与源码解析
  • python中的字典数据和标准json格式区别
  • Elasticsearch-分词器详解
  • 读书笔记~管理修炼-缄默效应
  • (OCPP服务器)SteVe编译搭建全过程
  • UIP协议栈 TCP通信客户端 服务端,UDP单播 广播通信 example
  • 校园社团信息管理:Spring Boot技术的优势与实现
  • 提升用户体验优化全攻略
  • !!!Docker 实践与应用实例
  • vue系列==vue3新语法
  • 奥数与C++小学四年级(第十六题 魔法学院)
  • MATLAB生态环境数据处理与分析
  • 【OpenGL】知识点
  • Centos7.9 x86架构部署
  • 基于SSM+小程序的4S店客户管理系统(汽车2)
  • 练习LabVIEW第二十五题
  • WPF中实现PasswordBox的双向绑定
  • 《AI从0到0.5》之提示工程
  • 【办公类-04-04】华为助手导出照片视频分类(根据图片、视频的文件名日期导入“年-月-日”文件夹中,并转移到“年-月”文件中整理、转移到“年”文件夹中整理)
  • 云计算的优势及未来发展趋势
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(5)
  • 《高频电子线路》 —— 反馈型振荡器
  • BERT的中文问答系统27
  • Ceisum无人机巡检视频投放
  • AIGC生成式人工智能——泼天的富贵(三)
  • QT 加载库 找不到指定的模块