美文网首页@IT·互联网技术干货程序员
基于有限状态模型的自动化测试

基于有限状态模型的自动化测试

作者: 胖艺 | 来源:发表于2017-03-01 17:41 被阅读1030次

    模型是帮助技术人员理解复杂系统运行的有效工具。基于模型展开测试可以将系统切分成易于理解和测试的单元,从而帮助测试人员进行测试。本文讨论了一个基于有限状态模型的自动化测试过程。

    背景

    在一个简化的支付过程中,支付服务方提供了三个接口:创建订单、支付、全额退款三个接口。一笔订单有三个状态:初始化、支付成功,已退款。业务规则如下:(1)当订单被创建时,订单状态为初始化;(2)对初始化的订单进行支付,订单状态为支付成功;(3)可以直接调用支付接口,订单状态为支付成功。(4)对支付成功的订单进行退款,订单状态为已退款。

    有限状态图

    根据以上的背景介绍,我们可以根据订单状态,画出状态模型图:

    支付的有限状态模型

    从状态模型,我们不难得到两条测试路径:[START, INIT, SUCCESS, REFUNDED], [START, SUCCESS, REFUNDED]

    接下来,我们希望通过程序来自动的生成测试和执行测试。

    定义状态

    首先定义状态:

    状态定义

    定义状态常量:

    状态常量

    定义操作

    接下来定义状态变迁的操作:

    定义操作

    自动生成测试用例

    由状态模型,采用深度优先算法遍历状态图,并在遍历的过程中,记录下所有从状态START到状态REFUNDED的路径。所有的路径即是我们需要的测试用例。

    图的核心数据结构如下:

    ModelGrah的核心数据结构

    深度优先遍历的算法:

    DFS算法

    使用一维数组存顶点,二维数组表示状态图:

    存储状态图

    将状态的变迁定义为路径中的一步path,包含当前状态、操作、下一个状态:

    Path

    一个路径中,即一个用例中,包含一步一步的path。

    接下来就是将状态图,使用深度遍历,得到所有从START到REFUNDED状态的路径,并将此路径转化为path的集合,即一步一步的测试操作,使用一个工具类完成这个转换过程:

    ModelUtil.getCaseList

    测试代码如下:

    自动生成测试用例的测试代码

    运行之后,得到两条路径,每条路径需要进行的操作如下图:

    自动生成测试用例的结果

    模型自动化运行

    自动生成测试用例后,我们接着定义模型,让测试能够自动运行。

    Model

    添加测试代码:

    运行模型的测试代码

    测试结果如下:

    运行结果

    总结

    根据业务背景,围绕订单状态进行分析,画出有限状态模型。根据模型,使用深度遍历算法获得所有从START状态到REFUNDED状态的路径集合,自动生成所需要进行测试的用例。每条路径中的一步,为一个测试操作。通过定义模型,在模型中运行每一个操作和检查,达到自动化执行。


    禅定

    建模,由简到繁,抓重点。

    相关文章

      网友评论

        本文标题:基于有限状态模型的自动化测试

        本文链接:https://www.haomeiwen.com/subject/ovxcgttx.html