导言
在软件开发中,测试是确保代码质量和稳定性的关键步骤之一。而自动生成测试用例可以大大提高测试效率和覆盖率。GraphWalker 是一个基于模型的测试工具,能够帮助开发者通过定义和遍历图模型来自动生成高质量的测试用例。
GraphWalker 简介
GraphWalker 是一个开源的测试工具,它使用有向图来表示系统的状态和行为,然后根据这个图模型自动生成测试用例。它支持多种编程语言和测试框架,可以轻松集成到现有的测试流程中。常见的模型有以下几种:
- 前置后置条件模型: Pre and post condition models
- 基于转换的模型: Transition based models (FSM, EFSM)
- 随机模型:Stochastic models
- 数据流模型: Data-flowmodels
如下,我们展示一个FSM或者EFSM模型的,它由多个节点以及箭头组成。
一个箭头,代表了一次测试动作;一个节点,代表一次测试验证。
GraphWalker 的优势
- 模型驱动测试: 基于图模型进行测试路径遍历,能够覆盖系统不同的状态和行为。
- 自动生成测试用例: 根据定义的图模型,自动生成测试用例,节省时间和精力。
- 提高测试覆盖率: 能够有效地覆盖多个测试路径,发现潜在的问题和错误。
GraphWalker重要概念
下面我们来介绍一下关于GraphWalker的几个重要的概念:
- 顶点:如上图所示,所有的顶点比如
Start
,V_ClientNotRuning
.一个顶点称为节点,通常表示为一个框表示我们想要检查的预期状态。在任何实现代码/测试中,可以通过断言或者数据校验改结果。常见有以下几种顶点:
- Start顶点:start顶点不是必需的。如果使用,则必须有1个(且只有1个)顶点名称为:start.从start顶点出发只能有1个边。start顶点不会包括在任何生成的测试路径中,它只表示一个开始位。
- BLOCKED顶点: 包含此关键字的顶点或边将在生成路径时排除。如果它是一个边,它将简单地从图中删除。如果它是一个顶点,顶点将被删除与其内外边缘。
- SHARED顶点: 意味着GraphWalker可以跳出当前模型,到任何其他模型到具有相同SHARED名称的顶点。 语法是:
SHARED:SOME_NAME
- INIT顶点: 只有一个顶点可以有这个关键字。在模型中使用数据时,需要初始化数据。这就是这个关键字。允许在更多的顶点中使用INIT而不只是一个。 语法是:
INIT:loggedIn
= false;rememberMe
= true;
- 边:如上图的e_Init。表示从一个顶点到另一个顶点的方法。这是为了达到下一个状态需要做的任何动作。它可以选择一些菜单选项,单击按钮等测试动作。GraphWalker只接受单向有向边(箭头)。边的函数下有时候会有不同的字符串,比如
[rememberMe&vaildLogin]
和/rememberMe=false
;vaildLogin=true
; 表示不同的规则,基于表有如下规则:
- 守卫(Guards):他们的角色与if语句相同,并且使边有资格或者没有资格被访问
守卫guard是一个用方括号括起来的JavaScript条件表达式只有一个。
[rememberMe&vaildLogin]
- 操作(Action):它放在正斜杠之后。Action可以有多个,每个语句必须以分号结尾。
/rememberMe=false
;vaildLogin=true
;action是动作代码,它的执行结果将作为数据传递给守卫。
- 路径生成器:生成器是决定如何遍历模型的算法。不同的生成器将生成不同的测试序列,并且它们将以不同的方式遍历模型。多个发生器可以串联。常见有以下几种:
random( some stop condition(s) )
:以完全随机的方式浏览模型,该算法通过随机从顶点选择出边,并且在下一个顶点时重复此过程。quick_random( some stop condition(s) )
:尝试运行通过模型的最短路径,但以快速的方式。a_star( a stop condition that names a vertex or an edge )
:将生成到特定顶点或边的最短路径。
- 结束条件,主要有以下几种:
edge_coverage( an integer representing percentage of desired edge coverage )
:边覆盖率达到某个值时,模型遍历结束。停止标准是一个百分比数字。当在执行期间达到所穿过的边的百分比时,停止测试。如果一个边被遍历超过一次,当计算百分比覆盖率时,它仍然计为1。vertex_coverage( an integer representing percentage of desired vertex coverage )
:顶点覆盖率达到某个值时,模型遍历结束。停止标准是一个百分比数字。当在执行期间达到所遍历的顶点的百分比时,停止测试。如果顶点遍历超过一次,当计算百分比覆盖率时,它仍然计为1。requirement_coverage( an integer representing percentage of desired requirement coverage )
:需求覆盖率达到某个值时,模型遍历结束。停止标准是一个百分比数字。当在执行期间达到所需求的百分比时,测试停止。如果需求遍历超过一次,在计算百分比覆盖率时仍会计为1。dependency_edge_coverage( an integer representing dependency treshold )
:高于依赖阈值的边都被覆盖时,模型遍历结束。每个边可以设置一个依赖值dependency(0-100之间的百分比数字)。停止标准是一个百分比数字。当在执行期间,所有高于或等于依赖值边被遍历完全时,停止测试。如果一个边被遍历超过一次,当计算百分比覆盖率时,它仍然计为1。reached_vertex( the name of the vertex to reach )
:停止标准是指定的顶点。当在执行期间到达顶点时,测试停止。reached_edge( the name of the edge to reach )
:停止标准是指定的边。当在执行期间到达这条边时,测试停止。
GraphWalker环境配置
我们在使用GraphWalker之前,需要先配置好环境,首先我们要下载画图工具,然后我们还要下载GraphWalker的jar包
- 画图工具YED
工具下载官网地址:https://www.yworks.com/products/yed
- GraphWalker的jar包:
jar包下载地址:https://graphwalker.github.io/
示例:使用 GraphWalker 实现自动化测试用例生成
我们在安装完画图工具以及下载好jar包之后,就可以开始使用GraphWalker来生成测试用例了,步骤如下:
- 创建图模型,使用 GraphWalker 创建系统的图模型。图模型是描述系统状态和行为的有向图,包括节点(表示状态)和边(表示状态之间的转换)。
- 定义测试目标,在图模型中定义测试目标,指定测试路径和期望的行为。这可以通过添加标签或定义边的属性来完成。
- 运行 GraphWalker,使用 GraphWalker 运行图模型,让其根据图模型自动生成测试用例:
graphwalker java -m your_model.graphml
GraphWalker 将会根据模型自动生成测试用例,并输出测试路径。
- 验证和评估生成的测试用例
运行生成的测试用例,并验证其覆盖了所需的代码路径和行为。评估测试覆盖率和有效性,确保测试用例质量。
总结
GraphWalker 是一个功能强大的自动化测试工具,通过图模型自动生成高质量的测试用例,提高代码质量和稳定性。它可以帮助开发者更有效地测试软件,发现潜在的问题并提高代码覆盖率。在快速迭代和交付的开发环境中,自动生成测试用例是一个强大的工具。GraphWalker 的模型驱动方法可以帮助团队更快速、更全面地进行测试。希望本文能够帮助大家在学习使用这款工具时提供一些帮助。