【腾讯TMQ】基于模型的自动化测试工具——GraphWalker_tmq工具-程序员宅基地

技术标签: 自动化测试  测试建模  测试  自动化测试工具  

一、概述

GraphWalker就是一个基于测试模型的用例生成工具。它主要应用于FSM, EFSM模型。可以用来它可以直接读取FSM, EFSM图形模型、json模型、生成测试用例。

二、背景知识

要了解GraphWalker首先要了解MBT是什么。

MBT中文名称为基于模型的测试, 基于模型的测试属于软件测试领域的一种测试方法。MBT步骤如下:首先由被测系统(SUT, system under test )的一些(通常是功能)方面描述,构建出被测系统的模型。再根据模型或模型中的一部分部分生成测试用例。进而进行软件测试。

2.1 模型(Model)

模型的目的就是用来为构造测试用例而进行的被测系统描述。

在构造模型的这个阶段就可以已经发现许多问题。

模型的关键:

高度抽象

模型还包括被测系统的预期输出。

两个主要方面:

设计模型

测试模型

MBT中模型通常有下列几种:

前置后置条件模型: Pre and post condition models (State based, OCL)

基于转换的模型: Transition based models (FSM, EFSM)

随机模型:Stochastic models (Markov chains)

数据流模型: Data-flowmodels(Lustre)

模型验证:

语法

行为

FSM举例:

一个测试模型可以由箭头和节点组成如下图所示。

一个箭头,代表了一次测试动作;

一个节点,代表一次测试验证。

2.2 测试需求选择

Test requirements selection

目的:

指导测试用例生成器( test generation)如何生成用例。

测试需求选择包含3方面:
  1. 模型中的目标(结束条件)

  2. 覆盖准则(路径生成准则)

状态覆盖

转换覆盖

  1. 行走算法

随机行走

覆盖引导

2.3 测试用例生成

Test generation

按模型及测试需求选择来生成测试用例。GraphWalker就是完成这部分工作的一个开源的java工具。

2.4 测试具体化

Test concretization

从测试套件到可执行级别,可以自己实现插件完成这部分功能。将测试用例转化成可执行脚本。

2.5 执行测试

Test execution

执行测试,并比较预期结果。

三、GraphWalker能做什么

GraphWalker就是一个基于测试模型的用例生成工具,完成上图中Test generation的工作。给出一个测试模型及测试需求选择,GraphWalker能生成相应测试路径。由这个测试路径,可以用来执行你的测试脚本。它主要应用于FSM, EFSM模型。可以用来它可以直接读取FSM, EFSM图形模型、json模型、生成测试用例。

四、通过GraphWalker建模

模型的目的是表达被测系统的预期行为。为此,我们使用有向图,其中顶点(或节点)表示一些期望的状态,并且边(弧,箭头,过渡)表示为了实现期望的状态需要做的任何动作。

例如,让我们来看一个需要验证的网站,然后才能访问网站内容。使用有向图设计测试可能如下所示:

4.1 顶点(Vertex)

顶点表示我们想要检查的预期状态。在任何实现代码/测试中,你可以通过断言或者数据校验改结果。

一个顶点称为节点,通常表示为一个框。

GraphWalker不在乎顶点的颜色或形状。

4.2 边(Edge)

表示从一个顶点到另一个顶点的方法。这是为了达到下一个状态需要做的任何动作。它可以选择一些菜单选项,单击按钮等测试动作。

GraphWalker只接受单向有向边(箭头)。
GraphWalker不关心边有什么颜色或宽度。

4.3 建模规则

Start顶点

start顶点不是必需的。

如果使用,则必须有1个(且只有1个)顶点名称为:start.

从start顶点出发只能有1个边。

start顶点不会包括在任何生成的测试路径中,它只表示一个开始位。

顶点或边的名字(name)

名称是第一个单词,位于标签中边或顶点的第一行。

标签(Lable)

标签是点或边上的所有文字描述。

守卫(Guards)仅用于Edge

守卫guard是一种只与边相关的机制。他们的角色与if语句相同,并且使边有资格或者没有资格被访问。

守卫guard是一个用方括号括起来的JavaScript条件表达式只有一个。

[loggedIn == true]

上面意味着如果属性loggedIn等于true,则边是可访问的。

操作(Action)仅用于Edge

动作是仅与边相关联的机制。这是我们要在模型中执行的JavaScript代码。它放在正斜杠之后。Action可以有多个,每个语句必须以分号结尾。

/loggedIn=false; rememberMe=true;

action是动作代码,它的执行结果将作为数据传递给守卫。

示例:

此示例说明Action和Guard如何工作。

让我们从Start顶点开始:

e_Init/validLogin=false;rememberMe=false;

边缘的名称是e_Init,后跟一个正斜杠,表示从该点开始直到行尾的文本是[action]代码。该操作初始化2个属性:validLogin和rememberMe。

当我们走过上边缘时,我们到达v_ClientNotRunning顶点。这个顶点有2个边沿,都有Guards。由于validLogin和rememberMe在这一点上被初始化为false,因此只有一个边可以用于步行:边e_StartClient具有顶点v_LoginPrompted作为目的地。

假如,我们已经遍历边e_ToggleRememberMe和e_ValidPremiumCredentials,并再次到达顶点v_ClientNotRunning࿰

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/TMQ1225/article/details/53940828

智能推荐

好用的在线HTTP接口测试 - HTTP GET/POST模拟请求测试工具-ApiPost-程序员宅基地

文章浏览阅读9k次。现在的模拟发送请求插件很多比如老外的postman等,但亲测咱们国内的 ApiPost 更好用一些,因为它不仅可以模拟发送get、post、delete、put请求,还可以导出文档,支持团队协作也是它的特色。另外老外的思维跟我们还是有些鸿沟,相对来说ApiPost的中文界面更适合国内的程序员。今天来分享如何使用ApiPost发送各种请求。1、下载ApiPost官方提供chrome插件、window客户端、mac客户端下载,最好在ApiPost的官网下载。不过个人建议安装客户端。使用更灵活。亲自试了下_在线http

Hadoop 基础系列一Hadoop 系列之 1.0 和2.0 架构-程序员宅基地

文章浏览阅读449次。精选30+云产品,助力企业轻松上云!>>> Hado..._hadoop1.0和2.0项目结构

ROS基础教程学习笔记1-安装并配置ROS环境_接下来首先source一下新生成的setup.*sh文件:-程序员宅基地

文章浏览阅读270次。首先是安装ROS,我所用的ubuntu16.04,所安装的ROS是kinetic版本,安装请参考:ubuntu16.04安装ROS1.管理环境变量在前面的安装过程中,配置亮环境,此时来查看ROS环境是否配置成功:export | grep ROS植入命令之后会出现如下信息:如果没有就需要重新输入添加环境变量的命令。2.创建ROS工作空间通过创建ros工作站,也..._接下来首先source一下新生成的setup.*sh文件:

以Apollo为例学习/分析自动驾驶运动规划算法_apollo古月居-程序员宅基地

文章浏览阅读5.4k次,点赞16次,收藏171次。一、Lattice(Frenet)二、EM三、Opt(OSQP)/IPOPT汇总四、Hybrid A*/圆弧Lattice以上算法结合感知决策等框架,是否能覆盖大多数场景?L2/L4,辅助驾驶、矿区、环卫、Robotaxi、泊车、无人接驳车、农用、Robobus、物流配送、Robotruck新势力、Tier1、计算平台?工业界的仿真、量产、数据?..._apollo古月居

矩阵乘法 求斐波那契数列_矩阵乘法算波拉契法吗-程序员宅基地

文章浏览阅读731次。先简单介绍一下矩阵乘法求斐波那契数列的原理f(n) 是第n项的值。f(1)= 1; f(2) =1;f(n)= f(n-1) + (n-2)下面的介绍是我从网上查到了,收益匪浅。分两步推导: 问题的求解就变成的解决,而幂的求可用二分法来求。二分法可用递归和非递归来求:下面是代码:定义矩阵struct matrix //定义2*2的矩阵&nb_矩阵乘法算波拉契法吗

python 发送邮件报错问题解决--[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1056)_ssl.sslerror: [ssl: wrong_version_number] wrong ve-程序员宅基地

文章浏览阅读3.3w次,点赞5次,收藏10次。报错信息如下[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1056)主要是下面两种连接邮件服务器的误操作引起的(是否开启了TLS)smtplib.SMTP(self.host, self.port, timeout=300) 【TLS 禁用时使用】或smtplib.SMTP_SSL(self.host, self...._ssl.sslerror: [ssl: wrong_version_number] wrong version number (_ssl.c:1056)

随便推点

redis三种集群模式_redis 6379 6380-程序员宅基地

文章浏览阅读1.3k次。一、单机模式就是安装一个redis,启动起来,业务调用即可有什么问题?单机故障 容量瓶颈 QPS瓶颈只适合一些性能不高、可靠性不用太强的业务系统。二、主从复制模式可以解决单机模式的单机故障问题外,还有好处:读写分离 容灾备份假设我们要搭建1主2从,分别是6379、6380、6381端口6379主节点redis.conf配置文件不需要动,只把6380、6381两个从节点redis.conf配置文件增加一行(配置主节点的ip端口)slaveof 127.0.0_redis 6379 6380

ACM论文投稿时常用的几项操作_settopmatter-程序员宅基地

文章浏览阅读2.3w次,点赞36次,收藏102次。一、我们发现ACM的latex模板中会有ACM Reference Format信息,如下:投稿时,可以使用如下的方法将其去掉,在 \documentclass[sigconf]{acmart}下面直接添加这几行即可去掉\settopmatter{printacmref=false} % Removes citation information below abstract\re..._settopmatter

ios内嵌H5滑动不流畅、白屏解决方案_ios h5 卡-程序员宅基地

文章浏览阅读2.5k次。1.最外层div加上 -webkit-overflow-scrolling属性,解决ios滑动不流畅.div {-webkit-overflow-scrolling: touch;}2.外层div里面的所有元素添加 -webkit-transform: translateZ(0px)属性,解决滑动时出现的空白(即图片不显示).div > * {-webkit-transform:..._ios h5 卡

numpy.random.seed, torch.manual_seed使用_args.seed % 2**32-程序员宅基地

文章浏览阅读1.1k次。numpy.random.seed, torch.manual_seed使用_args.seed % 2**32

把android assets文件夹内的文件存储到sd卡中_android 将assert文件写入sd卡中-程序员宅基地

文章浏览阅读1.1k次。原文:http://mobile.51cto.com/aprogram-387591.htm/**_android 将assert文件写入sd卡中

Android---动画机制(二)---属性动画_android 属性动画 缩放代码-程序员宅基地

文章浏览阅读434次。属性动画是3.0推出的新特性,和View动画不同,他对对象进行了扩展,属性动画可以对任何对象做动画.在Animator框架中使用最多的就是AnimatorSet和ObjectAnimator配合,使用ObjectAnimator进行更精细化控制,只控制一个对象的属性值,使用多个ObjectAnimator组合到AnimatorSet中形成一个动画. 在这里说明,动画默认的时间间隔是300ms,默认_android 属性动画 缩放代码

推荐文章

热门文章

相关标签