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

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

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.kler.cn/a/378385.html

相关文章:

  • 优选算法精品——双指针
  • angular实现list列表和翻页效果
  • el-upload,上传文件,后端提示信息,前端需要再次重新上传(不用重新选择文件)
  • ENSP (虚拟路由冗余协议)VRRP配置
  • ubuntu22.04安装conda
  • 每周算法比赛
  • 【已解决】群晖docker无法删除容器 “Error response from daemon: container” 终极解决办法
  • AUTOSAR CP MCAL微控制器抽象层介绍
  • 本地部署开源在线即时通讯软件Fiora打造个人私密聊天室
  • UE5动画控制 基础
  • 不规则区域+PPP
  • 开源OCR免费助力法律文档数字化,提升文档管理效率
  • goframe开发一个企业网站 logic 开发 再生成service8
  • 【嵌入式】基础入门步骤
  • Leetcode - 周赛421
  • ChatGPT 越狱:研究人员使用十六进制编码和表情符号绕过 AI 保护措施
  • 双目视觉标定——1原理与实践
  • 软件测试--BUG篇
  • 基于Retinex算法的图像去雾matlab仿真
  • WPF 实现冒泡排序可视化
  • Pr 视频效果:ASC CDL
  • 基于物联网的户外环境检测装置教学文章
  • Qt中的Model与View 4:QStandardItemModel与QTableView
  • 【FL0013】基于SpringBoot和微信小程序的机电公司管理信息系统
  • 人工智能如何改变未来生活:从医疗到日常的全面升级
  • 项目学习总结