前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >技术分享 | 黑盒测试方法论—场景法

技术分享 | 黑盒测试方法论—场景法

原创
作者头像
霍格沃兹测试开发
发布于 2022-03-18 02:41:51
发布于 2022-03-18 02:41:51
1.4K0
举报
文章被收录于专栏:测吧测试开发测吧测试开发

本文节选自霍格沃兹测试开发学社内部教材

场景法就是模拟用户操作软件时的场景,主要用于测试系统的业务流程。

测试不能只关注某个控件的边界值、等价类是否满足要求,也要关注它的主要功能和业务流程是否正确实现,这时就需要使用场景法来完成。

场景法

用例场景是用来描述流经用例路径的过程,这个过程从开始到结束遍历用例中所有基本流和备选流。

  • 基本流:按照正确的业务流程来实现的一条操作路径即模拟正确的操作流程。
  • 备选流:导致程序出现错误的操作流程即模拟错误的操作流程。

现在的产品几乎都是由事件触发来控制流程的,事件触发时的情景便成了场景,而同一事件不同的出发顺序和处理结果便形成了事件流。

在使用场景法设计测试用例时,需要覆盖系统用例中的主成功场景和扩展场景,并且需要适当补充各种正反面的测试用例以及考虑出现异常场景的情形。

场景法用例设计步骤

设计场景用例首先需要根据需求规格说明得出功能模块流程图,描述出程序的基本流及备选流,其次根据基本流和备选流生成不同的场景,构造场景列表,最后对每一个场景生成相应的测试用例,对所有的测试用例重新复审,去掉多余的测试用例。确定测试用例之后,为每一个测试用例确定测试的数据值即可完成场景用例的设计。

实例

对淘宝网通过购物车购物的流程设计测试用例。

 画流程图

整个业务通过流程图来表示如下图所示:

 确定基本流和备选流

基本流
  1. 进入淘宝首页
  2. 浏览商品
  3. 进入单品页
  4. 选择商品规格和数量
  5. 加入购物车
  6. 前往购物车
  7. 选择商品
  8. 结算,进入确定订单页
  9. 提交订单
  10. 付款成功
  11. 等待收获
  12. 确认收货
备选流
  1. 加入购物车时,不选择商品规格和型号,返回基本流第 4 步。
  2. 加入购物车时,商品库存不足,返回基本流第 4 步。
  3. 加入购物车时,未登录,登录后返回基本流第 3 步。
  4. 加入购物车后,继续选购,返回基本流第 4 步。
  5. 加入购物车,未选择商品,结算,返回基本流第 7 步。
  6. 支付失败,返回基本流第 8 步。
  7. 未选择商品加入购物车,退出购物,结束。
构造场景
  1. 登录后成功购物(基本流)
  2. 未选择商品规格和型号就添加购物车(基本流 + 备选流 1)
  3. 选择的商品库存不足(基本流 + 备选流 2)
  4. 未登录添加购物车(基本流 + 备选流 3)
  5. 商品添加购物车后继续购物(基本流 + 备选流 4)
  6. 进入购物车,未选择商品直接结算(基本流 + 备选流 5)
  7. 支付过程出错(基本流 + 备选流 6)
  8. 没有添加商品到购物车(基本流 + 备选流 7)
生成测试用例

用例编号

测试点

测试步骤

预期结果

1

登录后成功购物

前提条件:登录1、进入淘宝首页2、查看商品列表3、点击进入单品页4、选择商品规格和小于库存的数量 5、点击【加入购物车】6、提示成功加入购物车7、进入购物车页面8、选择刚加入购物车的商品9、点击【结算】10、进入确认订单页11、提交订单12、付款成功13、确认收货

确认收货成功,订单完成

2

单品页未选择商品规格和型号,添加购物车,单品页上提示需要选择商品规格与型号

前提条件:登录1、进入淘宝首页2、查看商品列表3、点击进入单品页4、直接点击【加入购物车】

单品页上提示需要选择商品规格与型号

3

选择的商品库存不足,添加购物车,提示库存不足

前提条件:登录1、进入淘宝首页2、查看商品列表3、点击进入单品页4、选择商品规格和大于库存的数量

单品页上提示库存不足

4

未登录添加购物车,进入登录页面

前提条件:未登录1、进入淘宝首页2、查看商品列表3、点击进入单品页4、选择商品规格和小于库存的数量5、点击【加入购物车】

进入登录页面

5

商品添加购物车后继续购物,留在单品页

前提条件:登录1、进入淘宝首页2、查看商品列表3、点击进入单品页4、选择商品规格和小于库存的数量5、点击【加入购物车】6、提示成功加入购物车7、继续查看商品信息

可以正常查看

6

进入购物车,未选择商品直接结算,提示未选择商品

前提条件:登录1、进入淘宝首页2、查看商品列表3、点击进入单品页4、选择商品规格和小于库存的数量5、点击【加入购物车】6、提示成功加入购物车7、进入购物车页面8、不选择商品9、点击【结算】

购物车提示请勾选要结算的宝贝

7

支付过程出错,提示支付失败,回到确认订单页

前提条件:登录1、进入淘宝首页2、查看商品列表3、点击进入单品页4、选择商品规格和小于库存的数量5、点击【加入购物车】6、提示成功加入购物车7、进入购物车页面8、不选择商品9、点击【结算】10、进入确认订单页11、提交订单12、支付失败

回到确认订单页,提示支付失败

8

没有添加商品到购物车,结束购物

前提条件:登录1、进入淘宝首页2、查看商品列表3、点击进入单品页4、不点击【加入购物车】5、关闭页面

购物流程结束

最终生成的测试用例如上表所示,这种利用场景法设计出来的测试用例一般是对于等价类和边界值的补充,通常情况下是比较完善的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
深入浅出JavaScript之闭包(Closure)
阅读目录 闭包-无处不在 闭包的概念 闭包的用途 闭包-封装 常见错误之循环闭包 思考题 闭包(closure)是掌握Javascript从人门到深入一个非常重要的门槛,它是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。下面写下我的学习笔记~ 闭包-无处不在 在前端编程中,使用闭包是非常常见的,我们经常有意无意,直接或间接用到了闭包。闭包可以使传递数据更加灵活(比如处理一些点击事件) !function() { var localData = "lo
逸鹏
2018/04/11
5030
深入浅出JavaScript之闭包(Closure)
什么是JavaScript 的闭包???
Javascript的闭包是指一个函数与周围状态(词法环境)的引用捆绑在一起(封闭)的组合,在JavaScript中,每次创建函数时,都会同时创建闭包。闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰,即形成一个不销毁的栈环境。
AlbertYang
2020/09/08
1.2K0
javascript 闭包详解
一、什么是匿名函数 创建一个函数并将它赋值给变量functionName,这种情况下创建的函数,即匿名函数。(函数表达式就是匿名函数) 二、闭包 1.什么是闭包? 闭包就是能够读取其他函数内部变量的函数。 只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。 我们只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗! function f1 () { var num = 1; function f2() { console.
柴小智
2018/04/10
5600
JavaScript闭包
IMWeb前端团队
2017/12/29
7500
一篇文章带你了解JavaScript中的函数表达式,递归,闭包,变量,this对象,模块作用域
它的一个重要特点就是:函数声明提升,就是在执行代码前先读取函数声明,可以把函数声明放在调用它的语句后。
达达前端
2020/01/02
6190
学习Javascript闭包(Closure)
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 下面就是我的学习笔记,对于Javascript初学者应该是很有用的。 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。   var n=999;   function f1(){     alert(n);   }   f1(); // 99
ruanyf
2018/04/12
5570
Javascript 闭包与变量
JavaScript中的作用域链的机制引出了一个副作用,即闭包只能取得包含函数中任何变量的最后一个值。闭包所保存的是整个变量对象,而不是某个特殊的值。
大道七哥
2019/09/10
4830
闭包与高阶函数
闭包(closure)指有权访问另一个函数作用域中变量的函数。简单理解就是 ,一个作用域可以访问另外一个函数内部的局部变量。
梨涡浅笑
2020/10/27
3610
前端day20-JS高级(递归和闭包)学习笔记
01-递归 1.1-递归函数介绍 1.递归函数:一个函数自己调用自己 2.递归函数特点 a.一定要有结束条件,否则会导致死循环 b.能用递归函数实现的需求,就一定可以用循环调用函数来解决,只是代码简洁与性能不同而已 递归会影响性能,每一次递归都会进栈容易造成栈溢出,而循环不会 1.2-递归应用场景1(累加和,阶乘) <script> //1.求1-n之间的累加和 function getSum(n){ //递归 : 自己调用自己
帅的一麻皮
2020/05/10
1.3K0
JavaScript经典面试题之for循环click
经典重现 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title></title> <script type="text/javascript"> function onMyLoad(){ var arr = document.getElementsByTagName("p"); for(var i = 0; i < arr.length; i++){ arr[i].onclick = function()
司想君
2018/03/01
8220
js 闭包
闭包 目录 闭包的概念 闭包的用途 代码实例 注意点 两个代码片段的对比 闭包的概念 简单来说,闭包就是定义在一个函数内部的函数 闭包的用途 可以读取函数内部的变量 让这些变量的值始终保持在内存中 代码实例 function f1(){ var n = 999 // 匿名函数 fnAdd = function(){n += 1} // 一个闭包 function f2(){ console.log(n) }
星辉
2019/01/15
2.4K0
JavaScript学习总结(三)——闭包、IIFE、原型、函数与对象
一、闭包(Closure) 1.1、闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9;方法:找到所有的div,
张果
2018/01/04
1.6K0
JavaScript学习总结(三)——闭包、IIFE、原型、函数与对象
JavaScript进阶教程(5)-一文让你搞懂作用域链和闭包
在JS中变量可以分为局部变量和全局变量,对于变量不熟悉的可以看一下我这篇文章:搞懂JavaScript全局变量与局部变量,看这篇文章就够了 作用域就是变量的使用范围,分为局部作用域和全局作用域,局部变量的使用范围为局部作用域,全局变量的使用范围是全局作用域。在 ECMAScript 2015 引入let 关键字之前,js中没有块级作用域---即在JS中一对花括号({})中定义的变量,依然可以在花括号外面使用。
AlbertYang
2020/09/16
3310
JavaScript进阶教程(5)-一文让你搞懂作用域链和闭包
JavaScript权威指南 - 函数
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次。如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法。用于初始化一个新创建的对象的函数被称作构造函数。
Esofar
2018/09/05
3K0
高阶函数和闭包
函数也是一种数据类型,同样可以作为参数,传递给另外一个参数使用。最典型的就是作为回调函数。
星辰_大海
2020/10/26
6590
高阶函数和闭包
「JS高级」函数进阶
请注意,本文编写于 2060 天前,最后修改于 2060 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
8950
「JS高级」函数进阶
JS闭包
闭包定义 闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。就是在另一个作用域中保存了一份它从上一级函数或者作用域得到的变量,而这些变量是不会随上一级函数的执行完成而销毁。 前提条件 计算机中的内存变量如果有被引用着的话,则系统是不会将之回收的。只要我们能够一直持有这个引用,则就可以令局部变量避免被回收——这是闭包概念成立的前提 闭包用途 可以读取到函数内部的变量 可以让函数内部变量保持在内存中 避免全局变量的污染 私有成员的存在 注
苦咖啡
2018/04/28
2.7K0
闭包
闭包(closure)指有权访问另一个函数作用域中变量的函数。简单理解就是 ,一个作用域可以访问另外一个函数内部的局部变量。
清出于兰
2022/01/05
4960
闭包
javascript深入理解js闭包
一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 Js代码 var n=999;   function f1(){     alert(n);   }   f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量。 Js代码 function f1(){     var n=999;   }   alert(n); // error
用户1257215
2018/01/30
1K0
javascript深入理解js闭包
深入理解JavaScript闭包之什么是闭包
在看本篇文章之前,可以先看一下之前的文章 深入理解JavaScript 执行上下文 和 深入理解JavaScript作用域,理解执行上下文和作用域对理解闭包有很大的帮助。
木子星兮
2020/07/27
8670
相关推荐
深入浅出JavaScript之闭包(Closure)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档