标签:流行 序列 目的 根据 oca 分代 stop 框架 cloud
GraphWalker是一个开源的基于模型的自动化测试工具,它可以用来通过图形测试模型来自动生成测试用例。
本文主要描述了使用yed画出FSM, EFSM模型图(常见的流程图),然后使用GraphWalker命令生成手工自动化用例,最终通过python将手工用例读取后自动执行并生成执行报告。
GraphWalker就是一个基于测试模型的用例生成工具。它主要应用于FSM, EFSM模型。可以用来它可以直接读取FSM, EFSM图形模型、json模型、生成测试用例。那什么是MBT呢? MBT中文名称为基于模型的测试, 基于模型的测试属于软件测试领域的一种测试方法。MBT步骤如下:首先由被测系统(SUT, system under test )的一些(通常是功能)方面描述,构建出被测系统的模型。再根据模型或模型中的一部分部分生成测试用例。进而进行软件测试。常见的MBT中模型通常有下列几种:
1、画图工具YED
工具下载官网地址:https://www.yworks.com/products/yed,用该工具画出来的图大致如下:
2、 GraphWalker的jar包下载:
https://graphwalker.github.io/
1、顶点:如上图所示,所有的顶点比如Start,V_ClientNotRuning.一个顶点称为节点,通常表示为一个框表示我们想要检查的预期状态。在任何实现代码/测试中,可以通过断言或者数据校验改结果。常见有以下几种顶点:
Start顶点:start顶点不是必需的。如果使用,则必须有1个(且只有1个)顶点名称为:start.从start顶点出发只能有1个边。start顶点不会包括在任何生成的测试路径中,它只表示一个开始位。
SHARED顶点: 意味着GraphWalker可以跳出当前模型,到任何其他模型到具有相同SHARED名称的顶点。 语法是: SHARED:SOME_NAME
2、边:如上图的e_Init。表示从一个顶点到另一个顶点的方法。这是为了达到下一个状态需要做的任何动作。它可以选择一些菜单选项,单击按钮等测试动作。GraphWalker只接受单向有向边(箭头)。边
的函数下有时候会有不同的字符串,比如[rememberMe&vaildLogin]和/rememberMe=false; vaildLogin=true; 表示不同的规则,基于表有如下规则:
守卫(Guards):他们的角色与if语句相同,并且使边有资格或者没有资格被访问。
守卫guard是一个用方括号括起来的JavaScript条件表达式只有一个。[rememberMe&vaildLogin]
/rememberMe=false; vaildLogin=true ;action是动作代码,它的执行结果将作为数据传递给守卫。
3、路径生成器:生成器是决定如何遍历模型的算法。不同的生成器将生成不同的测试序列,并且它们将以不同的方式遍历模型。多个发生器可以串联。常见有以下几种:
4、结束条件:常见有以下几种:
5、GraphWalker提供3种工作方式:
6、学习参考文档:
以2.1的图为例,是官网的的demo图。下载地址:http://graphwalker.github.io/Model_design/,找到图片后双击即可下载:Login.graphml
1、可执行程序,以offline模式生成自动化用例,路径生成器使用常用的quick_random,结束条件使用vertex_coverage100%覆盖,在jar包目录下执行命令java -jar graphwalker-cli-3.4.2.jar offline -m Login.graphml "quick_random(vertex_coverage(100))" ,如下会生成对应的自动化用例。
也可以把这些用例保存在txt文件中:java -jar graphwalker-cli-3.4.2.jar offline -m Login.graphml "quick_random(vertex_coverage(100))" > login_test_case.txt
2、可执行程序,以online模式生成自动化用例,使用相同的结束条件和路径生成器,
第一步执行命令:java -jar graphwalker-cli-3.4.2.jar -d all online -s RESTFUL -m Login.graphml "quick_random(vertex_coverage(100))" ,结果如下:
第二步:简单的在web浏览器访问:http://localhost:8887/graphwalker/getNext
再访问一次:
目前测试工作中,常用的就是状态机测试和模块间的数据流测试。这个工具就非常适合这两类图的测试。在生成手工用例后,怎么转变成自动化测试用例是考虑的主要问题。下面以实际工作中的一个状态机为例
第一步 : 把工作中的状态机图,使用yed转换成graph图。
状态机如下:
yed 画图之后:
第二步:执行graphwalker命令生成测试用例,报错 java -jar graphwalker-cli-3.4.2.jar offline -m rtp_status.graphml "quick_random(edge_coverage(100))" > bpn_status_test_case.txt。
执行报错:报错原因:因为状态机内存在终点,导致算法执行不下去报错失败。那这就不适应有终点的状态机了?
突然想起一句名言: 我是环绕着一个圆圈而行的。越接近终点也就越接近起点——-(狄斯)。人丑多读书还是有点用处的,灵机一动,那就干脆把所有终点再指定起点,起点又算是一笔新的数据,讲图改造后如下:
虽然变丑了,但是再执行不会报错。目的达到了(每次执行的产生的用例是不完全一致的)。用例如下图:
第三步:思考怎么转变成自动化用例。
思考问题:
从终点到顶点V_MakeData的边都没有标签,那python读取文件时,可以根据两个{}之前确定是一条用例。
边意味着执行某个程序,顶点意味着检查表的数据状态。那在画图时,确定好边和顶点的描述,做好string和代码对象的映射,读取到边,就启动程序,读取到顶点,就执行某个表的校验函数即可。
第四步:代码实现:
1、主要业务流程:
2、生成python自动化用例使用的方法,考虑到其实执行的步骤是明确的,唯一会变化的就是执行命令每次产生的用例不一致。那每次替换用例case就可以了。做成了文件替换动态生成自动化用例的模式。
3、自动化用例剩下如下:
4、说明:
在编写自动化生成用例前,已存在构建好的python自动化pyuint测试框架,我这边结合起来使用就很方便。这个技术结合pyunit框架做效果更好。
这个工具的学习来源于其他部门测试同事的分享,他们把这个工具应用于web平台的类似登陆系统的测试,觉得确实好用。虽然这个工具和理念很早就已经有了,貌似2016年左右就已经很流行了,但不影响去深入的学习和研究。学习和研究工具的目的,最终都是把它应用到实际项目之中。类似这种状态机测试,如果这时在一个地方增加了一个状态。那我只需要改下图,再补充好对应顶点和边的部分代码,就可以获取全流程的状态机测试用例。
这个工具还是很强大的,特别是在数据流的各种处理上,有时间还是建议去看下官网,毕竟介绍更详细。
基于MBT的自动化测试工具——GraphWalker介绍和实际使用
标签:流行 序列 目的 根据 oca 分代 stop 框架 cloud
原文地址:https://www.cnblogs.com/loleina/p/10886400.html