当前位置: 首页 > news >正文

软件测试栈的工作原理,利用栈的思想设计实现测试用例的clean up

利用栈的思想设计实现测试用例的clean up

发表于:2018-05-14来源:IBM作者:李敏敏,朱琳,姜河点击数:

标签:

由于在写自动化测试用例时,自动化的用例中除了有基本的用例步骤以外,还包括了大量的用例执行所形成的数据,而这些数据有可能会影响到之后用例的自动化执行。所以在我们的自

背景介绍

由于在写自动化测试用例时,自动化的用例中除了有基本的用例步骤以外,还包括了大量的用例执行所形成的数据,而这些数据有可能会影响到之后用例的自动化执行。所以在我们的自动化用例中就包含了大量的清除这些数据的步骤。为了能够简化我们的自动化测试用例,使自动化测试步骤执行中形成的数据自动被清除,我们想到了栈。由于自动化测试用例中清除数据的步骤刚好符合"先进后出"的原则,所以我们可以将每一个自动化测试用例的每一个步骤进行压栈,当这个自动化测试用例执行完之后,所有需要做所有需要做数据清除的步骤都会依次压栈,当测试用例执行完之后,压栈的步骤会依次出栈,执行这些步骤对应的数据清除的相应地操作。

栈的原理介绍

栈又名堆栈,它是一种线性表,这种线性表仅允许在表的一端进行插入和删除的操作。能够进行插入和删除操作的这一端叫栈顶,那么这个线性表的另一端就叫做栈尾。向一个栈插入新的元素叫做进栈,入栈或者压栈,入栈是将新的元素放到当前栈顶元素的上面,使新的元素成为入栈之后的新的栈顶元素。从一个栈删除元素又叫做出栈或者退栈,出栈是将栈顶元素删除掉使相邻的元素成为新的栈顶元素。关于栈的出栈和入栈请看如下的图 1 和图 2.

图 1. 入栈图

依次入栈 A, B, C, D

image001.jpg

图 2. 出栈图

image002.jpg

什么是测试用例的 clean up

在自动化测试用例执行的过程中,由于一个测试用例执行完成之后对测试环境中的数据做了部分的修改,为了不影响其它测试用例执行,我们每一个自动化测试用例最后执行的 clean up 则是清除当前测试用例对测试环境数据的修改。我们把这一部分清楚修改数据的操作步骤叫做测试用例的 clean up.

如何用栈实现测试用例的 clean up

本文我们以 java 语言为例,在使用栈之前我们首先要定义栈的类,以及栈中的一些具体操作的实现,由于需要压栈的是测试用例中的每一个具体的方法实现,再利用 java 的反射机制映射对应的具体方法。我们将这些方法的对象称之为栈中的元素,在本文中我们将栈中的每一个元素的定义类命名为 StackVo, 所以在 StackVo 类中主要包含方法的一些基本参数。本文中对栈定义的类命名为 CleanUpStack. CleanUpStack 类中主要包含了栈的一些基本的操作。简单的讲,CleanUpStack 就是一个栈体, 而 StackVo 就是入栈的元素,每一个 StackVo 就是测试用例中需要做 clean up 操作的方法。关于 StackVo 类和 CleanUpStack 类的具体定义请看如下图 3 和图 4.

图 3. StackVo 类

image003.jpg

图 4. CleanUpStack 类

image004.jpg

在讲解用栈实现 clean up 之前,为了便于理解整个流程,我们首先给大家介绍一下 JBehave 自动化测试用例的书写,在 JBehave 中一个 scenario 就相当于一个 test case, 一个 story 就相当于一个 suite. 测试用例可以根据功能以及设计的不同书写在不同的 story 文件里。它们的对应关系如图 5.

图 5. JBehave 自动化测试用例与一般测试用例的比较

image005.jpg

JBehave 自动化测试用例中一个 story 文件中可以包含很多个 scenarios,同时 story 文件中也包含很多的关键字,下边本文会对这些关键字依次做介绍

图 6. JBehave 自动化测试用例

image006.png

在 2.1 章节中我们已经介绍了 JBehave 测试用例的书写,在这一章节我们介绍一下 JBehave 对一步测试用例的实现。如下图 7 所示。

图 7. JBehave 测试用例的实现

image007.jpg

下面本文将以具体的 JBehave 的自动化测试用例为例来说明用栈来实现 clean up 的整个流程。首先我们使用一个图来说明整个的流程,并且对该图依次进行阐述以方便大家理解。如图 5 所示,此图中以一个非常简单的测试用例来阐述在测试用例执行的过程中如何创建栈的对象,什么时候入栈,什么时候出栈。

图 8. CleanUpStack 类工作流程

image008.jpg

图 8 中标注的数字则为整个流程中的步骤顺序。在 JBehave 自动化测试用例中, 本文将按照这个简单的测试用例来讲解栈实现 clean up 的原理。

在每一个 scenario 开始执行前,最先执行 beforeScenario 方法中的方法体,每一个 scenario 中所有步骤都是在同一个线程中执行的。CleanUpStack 的对象就是在这一步创建的。

在第二步中,当前的测试用例要创建一个 BE, 由于 create 的步骤是需要做 clean up 操作的,那么在创建完 BE 之后,我们还会创建一个栈的元素 StackVo,并且用 delete 方法参数构建一个完整的 StackVo 对象,并且将这个对象压栈。

在第三步中同样也是 create 的步骤,这一步也是需要做 clean up,那么在创建完 Issue 之后我们仍然会创建一个元素 StackVo, 并且用 delete 方法参数构建一个完整的 StackVo 对象,并且将这个对象压栈。

第四部这个测试用例的所有步骤已经执行完成,最后执行 afterScenario 方法中的方法体,在这个方法体中步骤执行完后我们会去检查当前 CleanUpStack 栈对象中是否为空,如果为空则不做任何的处理,如果不为空则将栈中的元素依次出栈,在出栈的时候利用 java 的反射原理机制一次执行对应的栈元素对应的方法。这样就完成了自动的 clean up.

结束语

通过对本文的阅读,相信大家对栈以及如何使用栈的思想实现自动化测试用例的 clean up 有了非常清楚的认识。在编写自动化测试用例的过程中对栈的灵活应用使得我们的自动化测试用例步骤得到了精简,为自动化测试人员节省了编写 clean up 步骤的工作量,大大的提高了自动化测试用例的编写。

相关文章:

  • 曹国华计算机讲座,计算机控制技术课程设计_培训.doc
  • 计算机专业解析ppt,计算机专业英语课件解析.ppt
  • 计算机boss是什么东西,Boss. 是什么意思?
  • 境外服务器可以做新闻网站吗,租用境外服务器对网站SEO有影响么?影响在哪里?...
  • win7怎样打开无线服务器,Win7怎么设置tplink路由器_Win7安装tplink路由器方法-192路由网...
  • css环形评分效果,纯CSS实现环形文字效果
  • 服务器2008安装系统,服务器系统2008安装
  • 云服务器系统能改win7的吗,云服务器系统能改win7的吗
  • 牧羊人之心服务器维修中,牧羊人之心无法登录怎么办 牧羊人之心不能进解决办法一览...
  • 全国道路运证基本信息查询服务器,道路运政管理信息系统.doc
  • 服务器维护中暂时无法观看该视频抖音,抖音服务器维护中暂时无法观看该视频怎么解决_服务器维护中解决办法介绍_游戏500...
  • excel转置怎么操作_原来Excel的复制粘贴有这么多不为人知的用法
  • e3 1231 v3 达芬奇_软件漏洞 非特斯拉可在欧洲V3超充站免费充电
  • 戴尔win10插耳机还外放_手机耳机怎么在电脑上用麦克风
  • stray ‘357’ in program_EXO灿烈再遭“揭露”:‘前女友’后,‘好友’称其野心勃勃...
  • 2019.2.20 c++ 知识梳理
  • ES6 学习笔记(一)let,const和解构赋值
  • JavaScript实现分页效果
  • Joomla 2.x, 3.x useful code cheatsheet
  • k8s 面向应用开发者的基础命令
  • orm2 中文文档 3.1 模型属性
  • PermissionScope Swift4 兼容问题
  • spark本地环境的搭建到运行第一个spark程序
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • vue-loader 源码解析系列之 selector
  • Vue官网教程学习过程中值得记录的一些事情
  • 初识 beanstalkd
  • 工程优化暨babel升级小记
  • 汉诺塔算法
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 聊聊redis的数据结构的应用
  • 微服务框架lagom
  • 微信小程序--------语音识别(前端自己也能玩)
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​渐进式Web应用PWA的未来
  • ​学习一下,什么是预包装食品?​
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (十) 初识 Docker file
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (转)Sublime Text3配置Lua运行环境
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .Net Memory Profiler的使用举例
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [Android] Implementation vs API dependency
  • [Angular] 笔记 20:NgContent
  • [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
  • [CakePHP] 在Controller中使用Helper
  • [corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape
  • [go 反射] 进阶