Python+Playwright+Pytest+BDD,用FSM打造高效测试框架

一、前言

在快速迭代以及业务复杂度有所提升的情况下, 传统的脚本, 渐渐显示出维护困难、扩展性欠佳、覆盖不全面等诸多难题。怎样运用更为科学、更为系统的方式去进行复杂业务流程的自动化测试的建模与实现, 这是每一位测试工程师都必定要思考的问题。

诸如有限状态自动机这般的, 被称为State以及FSM的事物, 作为一种堪称经典的建模工具, 在编译道理、协议策划以及流程控制等众多领域都有着十分广泛的应用。在更为靠近当下的这些年里, FSM所蕴含的思想也慢慢地被引入到自动化测试这个领域之中, 进而成为能够提升测试系统性、可维护性以及自动化程度的极为重要的工具。

以+++BDD作为技术栈, 本文会系统讲解, 怎样在自动化测试框架里引入FSM思想, 期望你能从本文中获取有价值的参考与启发。

二、有限状态自动机(FSM)理论基础

2.1 FSM的基本概念

用于阐述系统于有限个状态之间进行转移的一种数学模型, 是有限状态自动机, 简称为FSM , 该模型它透过以下一些要点予以架构包括。

所谓状态, 乃是系统于某一时刻所身处的那种情形, 举例来说, 存在用户未登录的状况, 存在已登录的状况, 还存在已注册却未验证的状况。

事件, 是引发状态转变的, 外部的动作, 或者条件。像点击登录按钮, 输入验证码, 还有点击退出等, 都属于这类👀。

转移, 是一种由事件触发的状态变化过程, 比如说, 当用户输入正确的账号密码之后, 会从"未登录"这种状态转化到"已登录"这种状态。

  • 初始状态:系统开始时的状态。

  • 终止状态:系统结束时的状态(可选)。

FSM常借助状态转移图或者状态转移表示出, 状态转移图以节点当作是状态, 以有向边当作是转移的, 状态转移表是以二维表格将所有状态和事件的对应关系列举出来的。

2.2 FSM的分类

FSM主要分为两类:

有这样一种自动机, 它叫确定性有限状态自动机, 也就是DFA, 在任何一个时刻, 针对于某一输入, 让系统处于某一状态时, 有着唯独的转移状况。

具有非确定性的有限状态自动机, 也就是NFA, 表现为在特定的某一状态之时, 针对某一个输入, 有可能存在多个转移方向。

在自动化测试这个领域当中, 一般情况下通常会去应用DFA专门来进行流程建模, 这是由于业务流程大部分都是属于确定性的。

2.3 FSM在自动化测试中的优势

FSM在自动化测试中的应用,带来了如下显著优势:

  1. 进行流程建模时清晰, 把复杂的业务流程予以拆解, 拆解成状态以及转移, 以结构化的方式来表达系统行为, 如此便于理解, 也便于沟通。

  2. 可不依据FSM完全不能得出涵盖各种与之相当的情况以及转变情形的测试用例, 难以提高覆盖程度, 无法提升覆盖率效果, 不能达成提升覆盖率目的。

  3. 异常路径实施检测, 可以方便地察觉到系统在出现异常输入状况时的行为表现, 进而实现对系统健壮性的提升。

  4. 针对可维护性以及可扩展性而言, 当流程发生变更之际, 仅仅需要对FSM模型作出调整, 并且测试代码在维护以及扩展方面较为简易且可行。

  5. 能跟自动化框架毫无缝隙地整合在一起: FSM这种思想可以同主流的自动化测试那些框架(像以及各种等等之类的)毫无间隙地相互结合, 从而提高整体的测试能力。

三、FSM在自动化测试中的应用场景

3.1 典型应用场景

  1. 用户进行注册的流程, 以及邮箱验证的过程, 还有登录的有关规定, 以及退出等多种不同状态下的相应流程。

  2. 订单处理流程:如下单、支付、发货、收货、退货等。

  3. 权限与审批流程:如申请、审批、驳回、通过等。

  4. 有多页面的业务流程, 还有多分支的业务流程, 像关于电商购物的那样, 关于内容发布的那样, 关于数据分析的那样。

3.2 适用性分析

FSM适用于以下场景:

  • 业务流程复杂、状态众多、分支多。
  • 流程经常变更、需频繁扩展。

  • 需自动生成测试用例、提升覆盖率。

  • 需对异常路径、边界条件进行系统性测试。

于简易的线性流程而言, FSM虽能够使用, 然而不一定是必需的。于繁杂流程来讲, FSM却能够极大程度地提升测试的系统性以及可维护性。

四、项目结构设计

4.1 推荐项目结构

高效开发以及维护所依托的基础在于良好的目录结构, 将FSM思想予以结合后, 框架项目结构的设计情况如下:

--demo/

├── fsm/

│ └── .py

├── pages/

│ ├── .py

│ ├── .py

│ ├── .py

│ └── .py

├── tests/

│ └── .py

├── .py

├── .txt

└── .md

  • fsm/:存放FSM模型相关代码。

页面对象模型(POM), 它是关于"pages/"的, 当中每个页面对应着一个类, 如此这般是便利了维护的。

  • tests/:测试用例目录。

  • .py:的全局配置。

  • .txt:依赖库清单。

  • .md:项目说明文档。

4.2 页面对象模型(POM)设计

有一种设计模式, 它把页面操作跟测试逻辑分离开来, 此即页面对象模型(POM)。它呢, 将每个页面都封装成一个类, 这个类里含有页面元素以及操作方法, 凭借这些, 能方便地进行维护与复用。

4.3 FSM与POM的结合

  • FSM负责流程建模,POM负责页面操作。

  • 测试用例只需关注流程和断言,页面细节交由POM处理。

  • FSM与POM解耦,提升代码复用性和可维护性。

本文节选自第八十六期《51测试天地》

《有限状态自动机(FSM)在自动化测试框架中的实战》一文

相关推荐
Zane19942 小时前
闭包到底"闭"住了什么?一文讲透 LEGB 规则与循环里的闭包陷阱
后端·python
Lumi_Peak2 小时前
Claude思考了42秒,我的代码质量直接提升了一个档次
python·claude
m沐沐2 小时前
【机器学习】DBSCAN聚类算法——原理、参数调优与实战
人工智能·python·深度学习·算法·机器学习·聚类·dbscan
梅孔立3 小时前
推荐一个 Python 开源项目:AI 模板填充 + Markdown 转 Word,面向 Aspose 模板引擎的效率神器
人工智能·python·开源
码农小韩3 小时前
AIAgent应用开发——大模型理论基础与应用(七)
python·学习·ai·大模型·agent
CodeLinghu3 小时前
LangSmith Evaluate实战评估Agent
人工智能·python·语言模型·llm
起司喵喵4 小时前
推荐一款基于 Python 和 Rust 开发的跨平台 GUI 自动化库!
python·rust·自动化
过期的秋刀鱼!4 小时前
学习曲线-过拟合和欠拟合要做什么以及原因
人工智能·python·深度学习·算法·机器学习·模型评估
Yolanda_20224 小时前
Python学习-第九部分-错误处理与异常处理
开发语言·python·学习