一、前言
在快速迭代以及业务复杂度有所提升的情况下, 传统的脚本, 渐渐显示出维护困难、扩展性欠佳、覆盖不全面等诸多难题。怎样运用更为科学、更为系统的方式去进行复杂业务流程的自动化测试的建模与实现, 这是每一位测试工程师都必定要思考的问题。
诸如有限状态自动机这般的, 被称为State以及FSM的事物, 作为一种堪称经典的建模工具, 在编译道理、协议策划以及流程控制等众多领域都有着十分广泛的应用。在更为靠近当下的这些年里, FSM所蕴含的思想也慢慢地被引入到自动化测试这个领域之中, 进而成为能够提升测试系统性、可维护性以及自动化程度的极为重要的工具。
以+++BDD作为技术栈, 本文会系统讲解, 怎样在自动化测试框架里引入FSM思想, 期望你能从本文中获取有价值的参考与启发。
二、有限状态自动机(FSM)理论基础
2.1 FSM的基本概念
用于阐述系统于有限个状态之间进行转移的一种数学模型, 是有限状态自动机, 简称为FSM , 该模型它透过以下一些要点予以架构包括。
所谓状态, 乃是系统于某一时刻所身处的那种情形, 举例来说, 存在用户未登录的状况, 存在已登录的状况, 还存在已注册却未验证的状况。
事件, 是引发状态转变的, 外部的动作, 或者条件。像点击登录按钮, 输入验证码, 还有点击退出等, 都属于这类👀。
转移, 是一种由事件触发的状态变化过程, 比如说, 当用户输入正确的账号密码之后, 会从"未登录"这种状态转化到"已登录"这种状态。
-
初始状态:系统开始时的状态。
-
终止状态:系统结束时的状态(可选)。
FSM常借助状态转移图或者状态转移表示出, 状态转移图以节点当作是状态, 以有向边当作是转移的, 状态转移表是以二维表格将所有状态和事件的对应关系列举出来的。
2.2 FSM的分类
FSM主要分为两类:
有这样一种自动机, 它叫确定性有限状态自动机, 也就是DFA, 在任何一个时刻, 针对于某一输入, 让系统处于某一状态时, 有着唯独的转移状况。
具有非确定性的有限状态自动机, 也就是NFA, 表现为在特定的某一状态之时, 针对某一个输入, 有可能存在多个转移方向。
在自动化测试这个领域当中, 一般情况下通常会去应用DFA专门来进行流程建模, 这是由于业务流程大部分都是属于确定性的。
2.3 FSM在自动化测试中的优势
FSM在自动化测试中的应用,带来了如下显著优势:
-
进行流程建模时清晰, 把复杂的业务流程予以拆解, 拆解成状态以及转移, 以结构化的方式来表达系统行为, 如此便于理解, 也便于沟通。
-
可不依据FSM完全不能得出涵盖各种与之相当的情况以及转变情形的测试用例, 难以提高覆盖程度, 无法提升覆盖率效果, 不能达成提升覆盖率目的。
-
异常路径实施检测, 可以方便地察觉到系统在出现异常输入状况时的行为表现, 进而实现对系统健壮性的提升。
-
针对可维护性以及可扩展性而言, 当流程发生变更之际, 仅仅需要对FSM模型作出调整, 并且测试代码在维护以及扩展方面较为简易且可行。
-
能跟自动化框架毫无缝隙地整合在一起: FSM这种思想可以同主流的自动化测试那些框架(像以及各种等等之类的)毫无间隙地相互结合, 从而提高整体的测试能力。
三、FSM在自动化测试中的应用场景
3.1 典型应用场景
-
用户进行注册的流程, 以及邮箱验证的过程, 还有登录的有关规定, 以及退出等多种不同状态下的相应流程。
-
订单处理流程:如下单、支付、发货、收货、退货等。
-
权限与审批流程:如申请、审批、驳回、通过等。
-
有多页面的业务流程, 还有多分支的业务流程, 像关于电商购物的那样, 关于内容发布的那样, 关于数据分析的那样。
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)在自动化测试框架中的实战》一文