模型是帮助技术人员理解复杂系统运行的有效工具。基于模型展开测试可以将系统切分成易于理解和测试的单元,从而帮助测试人员进行测试。本文讨论了一个基于有限状态模型的自动化测试过程。
背景
在一个简化的支付过程中,支付服务方提供了三个接口:创建订单、支付、全额退款三个接口。一笔订单有三个状态:初始化、支付成功,已退款。业务规则如下:(1)当订单被创建时,订单状态为初始化;(2)对初始化的订单进行支付,订单状态为支付成功;(3)可以直接调用支付接口,订单状态为支付成功。(4)对支付成功的订单进行退款,订单状态为已退款。
有限状态图
根据以上的背景介绍,我们可以根据订单状态,画出状态模型图:
从状态模型,我们不难得到两条测试路径:[START, INIT, SUCCESS, REFUNDED], [START, SUCCESS, REFUNDED]
接下来,我们希望通过程序来自动的生成测试和执行测试。
定义状态
首先定义状态:
定义状态常量:
定义操作
接下来定义状态变迁的操作:
自动生成测试用例
由状态模型,采用深度优先算法遍历状态图,并在遍历的过程中,记录下所有从状态START到状态REFUNDED的路径。所有的路径即是我们需要的测试用例。
图的核心数据结构如下:
深度优先遍历的算法:
使用一维数组存顶点,二维数组表示状态图:
将状态的变迁定义为路径中的一步path,包含当前状态、操作、下一个状态:
一个路径中,即一个用例中,包含一步一步的path。
接下来就是将状态图,使用深度遍历,得到所有从START到REFUNDED状态的路径,并将此路径转化为path的集合,即一步一步的测试操作,使用一个工具类完成这个转换过程:
测试代码如下:
运行之后,得到两条路径,每条路径需要进行的操作如下图:
模型自动化运行
自动生成测试用例后,我们接着定义模型,让测试能够自动运行。
添加测试代码:
测试结果如下:
总结
根据业务背景,围绕订单状态进行分析,画出有限状态模型。根据模型,使用深度遍历算法获得所有从START状态到REFUNDED状态的路径集合,自动生成所需要进行测试的用例。每条路径中的一步,为一个测试操作。通过定义模型,在模型中运行每一个操作和检查,达到自动化执行。
禅定
建模,由简到繁,抓重点。