原理

1、测试模型
  一个测试模型是有向图表示的FSM或者EFSM模型,由箭头和节点组成,如图所示。

  一个箭头,代表了一次测试动作;
  一个节点,代表一次测试验证。
2、测试需求选择Test requirements selection
目的:指导测试用例生成器( test generation)如何生成用例。
测试需求选择包含3方面:
  1)模型中的目标(结束条件)
  2)覆盖准则(路径生成准则)
   状态覆盖
   转换覆盖
  3)行走算法
  随机行走
  覆盖引导
3、测试用例生成Test generation
  按模型及测试需求选择来生成测试用例。GraphWalker就是完成这部分工作的一个开源的java工具。
4、测试具体化Test concretization
  从测试套件到可执行级别,可以自己实现插件完成这部分功能。将测试用例转化成可执行脚本。
5、执行测试Test execution
  执行测试,并比较预期结果。
  GraphWalker就是一个基于测试模型的用例生成工具,完成上图中Test generation的工作。给出一个测试模型及测试需求选择,GraphWalker能生成相应测试路径。由这个测试路径,可以用来执行你的测试脚本。它主要应用于FSM, EFSM模型。可以用来它可以直接读取FSM, EFSM图形模型、json模型,生成测试用例。

GraphWalker模型

1、顶点(Vertex)
  顶点表示我们想要检查的预期状态。在任何实现代码/测试中,你可以通过断言或者数据校验改结果。
  一个顶点称为节点,通常表示为一个框。
  GraphWalker不在乎顶点的颜色或形状。
2、边(Edge)
  表示从一个顶点到另一个顶点的方法。这是为了达到下一个状态需要做的任何动作。它可以选择一些菜单选项,单击按钮等测试动作。
  GraphWalker只接受单向有向边(箭头)。
  GraphWalker不关心边有什么颜色或宽度。
3、start顶点
  start顶点不是必需的。
  如果使用,则只能有1个 且顶点名称为:start.
  从start顶点出发只能有1个边。
  start顶点不会包括在任何生成的测试路径中,它只表示一个开始位。
  顶点或边的名字(name)
  名称是第一个单词,位于标签中边或顶点的第一行。
4、标签(Lable)
  标签是点或边上的所有文字描述。
5、Guard
  guard是一种只与边相关的机制。他们的角色与if语句相同,并且使边有资格或者没有资格被访问。
  guard是一个用方括号括起来的JavaScript条件表达式 如:[loggedIn == true]
6、操作(Action)
  Action是我们要执行的JavaScript代码。它放在正斜杠之后。Action可以有多个,每个语句必须以分号结尾。它的执行结果将作为数据传递给守卫。如:/loggedIn=false; rememberMe=true;

7、模型中的关键字
  在模型中使用关键词以增加功能和可用性。
  Start - 这在顶点中用于表示开始顶点。每个模型只有一个起始顶点。
  BLOCKED - 包含此关键字的顶点或边将在生成路径时排除。如果它是一个边,它将简单地从图中删除。如果它是一个顶点,顶点及相关联的边将被删除
  SHARED - 此关键字仅用于顶点。这意味着GraphWalker可以跳出当前模型,到任何其他模型到具有相同SHARED名称的顶点。 语法是: SHARED:SOME_NAME
  INIT - 只有一个顶点可以有这个关键字。在模型中使用数据时,需要初始化数据。
8、多模型
  GraphWalker可以在一个会话中使用几个模型。这意味着在生成路径时,GraphWalker可以选择跳出一个模型到另一个模型。当将不同的功能分为多个模型时,这是非常方便的。
多模型一起启动时,所有模型一起进行初始化。
多模型offilne运行举例:
java -jar graphwalker-cli-4.0.0-SNAPSHOT.jar -d all offline -m Model_A.graphml random(edge_coverage(100)) -m Model_B.graphml random(edge_coverage(100)) -m Model_C.graphml random(edge_coverage(100)) -m Model_D.graphml random(edge_coverage(100)) –o


  多模型之间的数据不通用。如上述模型,虽然模型A与模型B用相同变量e_B,但在不同模型间跳转时。ModelA中的e_B,与ModelB中的e_B是不同变量。
  多模型一起启动时,所有模型一起进行初始化。
  多模型之间跳转,相当与GraphWalker自动在SHARD状态之间。建立2条虚拟边,GraphWalker将根据算法选择是否前往shard状态。
  当路径生成到达模型A中的顶点v_B时,它必须考虑关键字SHARED:B .这告诉GraphWalker使用相同的名称在同一个关键字中搜索所有其他模型:B。在我们的例子中,只有一个,它在模型B中。现在GraphWalker决定是跳出模型A,模型B中的顶点v_B还是留在模型A中。这个决定是基于随机的。

工具核心算法

3.1 GraphWalker路径生成
1、路径生成器和结束条件
  路径生成器连同停止条件将决定当通过模型生成路径时使用什么策略,以及何时停止生成该路径。路径生成器可以彼此连接。可以使用逻辑或,AND,||,用&&使用多个停止条件。
2、路径生成器
  生成器是决定如何遍历模型的算法。不同的生成器将生成不同的测试序列,并且它们将以不同的方式遍历模型。多个生成器可以串联。
random( some stop condition(s) )
以完全随机的方式浏览模型。也称为 “随机步行”。该算法通过随机从顶点选择出边,并且在下一个顶点时重复此过程。
quick_random( some stop condition(s) )
  尝试运行通过模型的最短路径,但以快速的方式。这是算法的工作原理:
  选择一个尚未被随机访问的边
  使用Dijkstra算法选择到该边缘的最短路径走该路径,并将所有执行的边标记为已访问
  当在步骤1中达到选定的边缘时,从头开始,重复步骤1-> 4。
  该算法对于非常大的模型工作良好,并且生成合理的短序列。缺点是当与EFSM结合使用时。该算法可以选择被守卫block的路径。
a_star( a stop condition that names a vertex or an edge )
将生成到特定顶点或边的最短路径。
  选择一个尚未被随机访问的边
  选择一个尚未被随机访问的边使用Dijkstra算法选择到该边缘的最短路径走该路径,并将所有执行的边标记为已访问
  当在步骤1中达到选定的边缘时,从头开始,重复步骤1-> 4。
  该算法对于非常大的模型工作良好,并且生成合理的短序列。缺点是当与EFSM结合使用时。该算法可以选择被守卫block的路径。
将计算并生成通过模型的最短路径。每个边缘的成本设置为1. 不建议使用此算法,因为对于较大的模型,将需要相当长的时间来计算。
3.2 GraphWalker结束条件
edge_coverage( an integer representing percentage of desired edge coverage )
  边覆盖率达到某个值时,模型遍历结束。停止标准是一个百分比数字。当在执行期间达到所穿过的边的百分比时,停止测试。如果一个边被遍历超过一次,当计算百分比覆盖率时,它仍然计为1
vertex_coverage( an integer representing percentage of desired vertex coverage )
  顶点覆盖率达到某个值时,模型遍历结束。停止标准是一个百分比数字。当在执行期间达到所遍历的顶点的百分比时,停止测试。如果顶点遍历超过一次,当计算百分比覆盖率时,它仍然计为1。
reached_vertex( the name of the vertex to reach )
  停止标准是指定的顶点。当在执行期间到达顶点时,测试停止。
reached_edge( the name of the edge to reach )
  停止标准是指定的边。当在执行期间到达这条边时,测试停止。
time_duration( an integer representing the number of seconds to run )
  停止标准是表示允许测试发生器执行的秒数的时间。

工具地址:http://graphwalker.github.io/

基于模型的自动化测试工具GraphWalker(一):基本原理相关推荐

  1. 【腾讯TMQ】基于模型的自动化测试工具——GraphWalker

    一.概述 GraphWalker就是一个基于测试模型的用例生成工具.它主要应用于FSM, EFSM模型.可以用来它可以直接读取FSM, EFSM图形模型.json模型.生成测试用例. 二.背景知识 要 ...

  2. Xilinx基于模型的设计工具—Model Composer

    Model Composer 是一款基于模型的设计工具,不仅能够在 MathWorks Simulink® 环境中进行快速设计探索,而且还可通过自动代码生成加速基于 Xilinx 全可编程器件的生产. ...

  3. 上交张伟楠副教授:基于模型的强化学习算法,基本原理以及前沿进展(附视频)

    2020 北京智源大会 本文属于2020北京智源大会嘉宾演讲的整理报道系列.北京智源大会是北京智源人工智能研究院主办的年度国际性人工智能高端学术交流活动,以国际性.权威性.专业性和前瞻性的" ...

  4. 基于python的自动化测试工具_基于Python语言的自动化测试

    自动化测试基础 1.1软件测试分类 软件测试领域名词颇多,许多测试新手容易混淆概念.因为从不同的角度对软件测试有不同的分类方法,所以,这里汇总常见软件测试的相关名词,让读者对软件测试领域有个概括性了解 ...

  5. 最流行的自动化测试工具,总有一款适合你

    1)Selenium Selenium 可能是网页应用中最流行的开源自动化测试框架.起源于 2000 年,10 多年来不断地完善,Selenium 成为许多 Web 自动化测试人员的选择,尤其是那些有 ...

  6. 最流行的自动化测试工具,总有一款适合你(附部分教程)

    前言 在自动化测试领域,自动化工具的核心地位毋庸置疑.本文总结了最顶尖的自动化测试工具和框架,这些工具和框架可以帮助组织更好地定位自己,跟上软件测试的趋势.这份清单包含了开源和商业的自动化测试解决方案 ...

  7. 盘点:App 移动自动化测试工具

    App移动端测试工具非常多,首先 区分 Android 和 iOS,以及 harmonyos 平台,每个平台下都有自己的自动化测试工具.自动化工具又区分 调试工具.monkey 工具.UI自动化工具. ...

  8. 基于模型的测试用例设计(1)

    介绍 测试设计是测试过程中最重要的部分之一.一个好的测试用例不仅要为被测系统( SUT )提供一些输入,还要验证系统是否如预期进行.也就是说,它有助于确认利益相关者要求得以实现.但测试设计可以做的远不 ...

  9. 基于模型的测试的测试设计

    为什么80%的码农都做不了架构师?>>>    TeemuKanstrén是一名资深科学家,目前在芬兰VTT技术研究中心工作,他还是多伦多大学的一名客座博士后.他的工作涉及:以改进行 ...

最新文章

  1. 面向对象(面向对象设计,面向对象编程,实例变量)
  2. mysql导出 error1290_解决MySQL导出数据到文件报错:ERROR 1290
  3. 小知识汇总----不断更新中...
  4. android studio配置java_android studio配置Javah 和ndk-build
  5. MATLAB矩阵的分解与变换
  6. 单片机ADC采样算法----卡尔曼滤波
  7. Go基础编程:Socket编程
  8. Copy On Write(写时复制)
  9. 起底 ARM:留给中国队的时间不多了
  10. 苹果开发者公司账号注册流程注册新的苹果Apple Id并双重验证步骤
  11. 编译错误:找不到工程或库
  12. 【转】Quartz概述及入门实例
  13. Android 用官方SDK实现第三方(qq、微信、微博等)分享和登录
  14. mysql存储过程出参和入参_数据库mysql存储中的入参出参理解
  15. 计算机主机发出滴滴声音怎么办,电脑主机有滴滴声音是怎么回事?
  16. 华为HarmonyOS 鸿蒙,华为鸿蒙OS系统规划曝光,原来国产自主研发系统已经如此强大...
  17. 阿里云手动更新dns解析
  18. emplace、emplace_back等
  19. 安超云生态 | 安超云与达梦数据完成产品兼容互认证 加速信息技术生态建设
  20. vCenter Server安装报错:内存或cpu不足

热门文章

  1. Deferred Shading
  2. hbuilder HTML页面跳转,基于HBuilder开发手机APP-主页/跳转页面/切换选项卡(示例代码)...
  3. 电商中常见的高并发解决方案
  4. 共享办公:工作游民告别孤独
  5. linux系统rc.local错误,Ubuntu 16.04服务器rc-local服务启动失败,可能是因为这个符号没写...
  6. 工业 4.0 时代,你准备好了吗?
  7. Unity Shader学习案例一: 流光效果
  8. 极速office2021怎么将PPT背景设置为渐变的
  9. 使用Mybatis-plus清空表数据
  10. 猿大师办公助手已经在Chrome中打开了Office Word,再用桌面Office打开其他Word打不开怎么办?