@IT·互联网技术干货程序员

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

2017-03-01  本文已影响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状态的路径集合,自动生成所需要进行测试的用例。每条路径中的一步,为一个测试操作。通过定义模型,在模型中运行每一个操作和检查,达到自动化执行。


禅定

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

上一篇下一篇

猜你喜欢

热点阅读