Pytest-Bdd-Playwright 系列教程(4):基于敏捷的通用步骤定义

news2024/10/30 7:46:51

Pytest-Bdd-Playwright 系列教程(4):基于敏捷的通用步骤定义

  • 前言
  • 一、项目结构
  • 二、通用步骤定义
  • 三、特性文件设计
  • 四、测试脚本实现
  • 五、运行测试
  • 总结

前言

  • 在敏捷迭代中,为了适应快速、高频的交付,自动化测试框架的设计需要注重简洁灵活性易于维护的特点,尤其是对初级工程师而言,降低学习成本尤为重要;
  • 本文将通过实战案例,详细介绍如何构建通用步骤特性文件设计测试脚本实现,使本框架让初学者能够快速上手并投入到敏捷项目的测试工作中。

一、项目结构

│
├── features/                # BDD特性文件
│   └── search.feature
│   └── login.feature(新增)
│
├── pages/                   # 页面对象
│   └── search_page.py
│
├── steps/                   # 步骤定义
│   └── search_steps.py
│   └── common_steps.py(新增)
│
├── tests/                   # 测试脚本
│   └── test_search.py
│   └── test_login.py(新增)
│
├── utils/                   # 工具函数
│   └── config.py   # 配置管理
│
├── conftest.py              # pytest钩子、fixture
├── pytest.ini               # pytest配置
├── requirements.txt         # 项目依赖
└── README.md                # 项目说明

二、通用步骤定义

代码的复用性是提升自动化测试脚本编写效率的关键所在。通过将共用的操作步骤提取到一个模块中,我们可以在多个场景中直接调用这些步骤,从而减少重复代码量

下面是在 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}]'))
def goto(page: Page, url: str):
    page.goto(url)
    log.info(f"访问 {url}")

@given('等待页面加载完成')
def wait_for_page_load(page: Page):
    page.wait_for_load_state()

@when(parsers.parse('点击元素[{selector}]'))
def click(page: Page, selector: str):
    page.locator(selector).click()
    log.info(f"点击元素 {selector}")

@when(parsers.parse('在[{selector}]中输入[{text}]'))
def input_text(page: Page, text: str, selector: str):
    page.locator(selector).fill(text)
    log.info(f"在 {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)
    log.info(f"元素 {selector} 的文本应为 {text}")

按需自行添加相应的 playwright 方法,零基础的小伙伴,可以通过我的专栏进行学习,这里有详细的 playwright 教程:https://blog.csdn.net/weixin_48321392/category_12651716.html?spm=1001.2014.3001.5482

三、特性文件设计

features 目录下创建一个 login.feature 文件:

Feature: 登录功能
  为了能够访问银行系统
  作为一名客户
  我希望能够登录

  Scenario: 登录成功

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

      When 在[input[name="username"]]中输入[user]
      And 在[input[name="password"]]中输入[pwd]
      And 点击元素[input[type="submit"]]
      Then 元素[#leftPanel h2]的文本应为[Account Services]

四、测试脚本实现

有了特性文件后,我们需要编写测试脚本来执行这些场景。在tests目录下创建test_login.py文件,通过pytest_bdd模块将BDD场景映射为测试用例。

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


@pytest.mark.smoke
@scenario('login.feature', '登录成功')
def test_login_success():
    pass

五、运行测试

使用以下命令运行测试:

pytest .\tests\test_login.py 

运行结果如下:

在这里插入图片描述

总结

到目前为止,本框架已具备以下特点

  • 降低学习成本:通过BDD语法,非技术人员也能理解测试场景,有助于跨团队沟通。
  • 提高代码复用性:通用步骤定义减少了代码冗余,降低维护成本。
  • 适合敏捷项目:快速搭建、执行便捷,适用于频繁交付的敏捷团队。

通过这种设计,即便是初学者也能快速上手自动化测试框架,为项目质量保障提供支持。

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

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

相关文章

银行信贷风控专题:Python、R 语言机器学习数据挖掘应用实例合集:xgboost、决策树、随机森林、贝叶斯等...

全文链接:https://tecdat.cn/?p38026 分析师:Fanghui Shao 在当今金融领域,风险管控至关重要。无论是汽车贷款违约预测、银行挖掘潜在贷款客户,还是信贷风控模型的构建,以及基于决策树的银行信贷风险预警,…

Ubuntu22.04环境搭建MQTT服务器

官网: https://mosquitto.org 1.引入库 sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa2.升级安装工具 sudo apt-get update 3.安装 sudo apt-get install mosquitto 4.安装客户端 sudo apt-get install mosquitto-clients5.添加修改配置文件 进…

Python | Leetcode Python题解之第519题随机翻转矩阵

题目: 题解: class Solution:def __init__(self, m: int, n: int):self.m mself.n nself.total m * nself.map {}def flip(self) -> List[int]:x random.randint(0, self.total - 1)self.total - 1# 查找位置 x 对应的映射idx self.map.get(x,…

【linux网络编程】| socket套接字 | 实现UDP协议聊天室

前言:本节内容将带友友们实现一个UDP协议的聊天室。 主要原理是客户端发送数据给服务端。 服务端将数据再转发给所有链接服务端的客户端。 所以, 我们主要就是要实现客户端以及服务端的逻辑代码。 那么, 接下来开始我们的学习吧。 ps:本节内容…

Windows 下实验视频降噪算法 MeshFlow 详细教程

MeshFlow视频降噪算法 Meshflow 视频降噪算法来自于 2017 年电子科技大学一篇高质量论文。 该论文提出了一个新的运动模型MeshFlow,它是一个空间平滑的稀疏运动场 (spatially smooth sparse motion field),其运动矢量 (motion vectors) 仅在网格顶点 (m…

随机采样方法之逆变换采样

抽样或采样是指从目标总体中抽取出部分个体也就是样本,通过对样本的属性或特征进行分析,以此对总体进行评估。采样作为一种重要的数据分析方法,在深度学习、渲染等诸多方面具有广泛的应用。本文将回顾一种基本的采样方法即逆变换采样。 一、…

国自然地学部立项名单(2021-2023年)和标书范本(2007-2017年33份)-最新出炉 附下载链接

国自然地学部立项名单(2021-2023年)和标书范本(2007-2017年33份) 下载链接-点它👉👉👉: 国自然地学部立项名单(2021-2023年)和标书范本(2007-201…

C++之多态的深度剖析

目录 前言 1.多态的概念 2.多态的定义及实现 2.1多态的构成条件 2.1.1重要条件 2.1.2 虚函数 2.1.3 虚函数的重写/覆盖 2.1.4 选择题 2.1.5 虚函数其他知识 协变(了解) 析构函数的重写 override 和 final关键字 3. 重载,重写&…

信息安全数学基础(34)正规子群和商群

正规子群详述 定义: 设G是一个群,H是G的子群。若H的左陪集与右陪集总是相等(即对任何的a∈G,都有aHHa),则称H是G的正规子群或不变子群,记为H⊴G。 性质: 平凡性:任何群G…

日期选择简化版今日、本周、本月、本季度、本年

function 未来之窗_时间_现在() {let date new Date(),year date.getFullYear(), //获取完整的年份(4位)month date.getMonth() 1, //获取当前月份(0-11,0代表1月)strDate date.getDate() // 获取当前日(1-31),小时 date.getHours(),分钟 date.getMinutes();if (month &…

C语言笔记(指针题目)例题+图解

本文分为两部分 ,第一部分为数组、字符串、字符指针在sizeof和strlen中的辨析,第二部分是一些笔试题目。若有错误,请批评指正。 目录 1.第一部分 1.1.数组名的使用 1.1.1一维整型数组在sizeof中的使用 1.1.2一维字符数组在sizeof中的使用…

Android Input的流程和原理

Android Input事件机制 Android系统是由事件驱动的,而Input是最常见的事件之一,用户的点击、滑动、长按等操作,都属于Input事件驱动,其中的核心就是InputReader和InputDispatcher。InputReader和InputDispatcher是跑在system_serv…

Manus在虚拟现实仿真模拟中的应用案例分享

Manus虚拟现实手套作为一种高精度的人机交互设备,在仿真模拟领域展现出了巨大的应用潜力。通过提供实时、准确的手指动作捕捉数据,Manus手套为多个行业带来了前所未有的仿真体验,推动了技术发展和应用创新。 技术特点 1. 高精度手指跟踪 Manu…

windows 驱动实例分析系列: NDIS 6.0的Filter 驱动改造(四)

驱动的测试代码解读 1. 打开设备对象: // 1. 打开底层设备对象HANDLE hDevice CreateFile(L"\\\\.\\NDISFilter", // 设备名称GENERIC_READ | GENERIC_WRITE, // 访问权限0, // 不共享NULL, // 默认安全属性OPEN_EXISTING, // 打开现有设备0, // 无特殊标志NULL /…

加强版 第四节联通组件分析与演示

得到二值图像的目的是为了后面的分析 基本概念解释 -图像联通组件 -四邻域与八邻域联通 ccl联通组件标记 通过四邻域和八邻域来对图像进行边缘寻找与噪声处理的功能 常见算法来寻找联通组件 -基于像素扫描方法 -基于块扫描的方法 -两步法扫描 API: OpenCV中支持连通组件…

闯关leetcode——232. Implement Queue using Stacks

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/implement-queue-using-stacks/description/ 内容 Implement a first in first out (FIFO) queue using only two stacks. The implemented queue should support all the functions of a normal …

【Unity基础】初识UI Toolkit - 编辑器UI

(本文所需图片在文章上面的资源中,点击“立即下载”。) 本文介绍了如何通过UI工具包(UI Toolkit)来创建一个编辑器UI。 一、创建项目 1. 打开Unity创建一个空项目(任意模板),这里我…

什么?Flutter 又要凉了? Flock 是什么东西?

今天突然看到这个消息,突然又有一种熟悉的味道,看来这个月 Flutter “又要凉一次了”: 起因 flutter foundation 决定 fork Flutter 并推出 Flock 分支用于自建维护,理由是: foundation 推测 Flutter 团队的劳动力短缺…

windows文件实时同步

在现今这个高效运转的工作时代,数据同步与备份的重要性愈发凸显。特别是对于Windows用户,实现文件在不同设备间的实时流转,不仅能够显著提升工作效率,更是数据安全的一道重要防线。接下来,我们将深入剖析Windows文件实…

全桥PFC电路及MATLAB仿真

一、PFC电路原理概述 PFC全称“Power Factor Correction”(功率因数校正),PFC电路即能对功率因数进行校正,或者说是能提高功率因数的电路。是开关电源中很常见的电路。功率因数是用来描述电力系统中有功功率(实际使用…