您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
浅谈测试用例设计
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
浅谈测试用例设计
自猿其说Tech
2022-09-22
IP归属:未知
20920浏览
测试
### 1 测试用例为什么存在 #### 1.1 定义 测试用例(Test Case)是指对特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。测试用例内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,最终形成文档类的输出。简而言之,测试用例是为某个目标而设计的一组测试输入、执行条件以及预期结果,用于核实是否满足某个软件需求。 #### 1.2 作用 1. 指导测试(开发)的执行 测试用例作为各个测试阶段工作基准指导测试人员按照按用例项目和测试步骤实施测试。测试左移是每个成熟敏捷团队的必备技能之一,而测试用例是帮助测试工作左移的重要“工具”。一方面,测试同学参加代码评审时可以根据测试用例的信息捕捉代码的关键点,也更容易发现问题;另外,提前输出的测试用例也可以指导开发人员更好的完成开发工作。 1. 测试物料的准备 数据:测试的过程往往是需要有相对应的测试数据去支撑,我们按照测试用例配套准备一组或若干组测试所需的原始数据。 测试脚本:为提高测试效率,自动化测试已经成软件测试发展的重要方向。自动化测试的中心任务便是测试脚本的撰写,测试用例角色测演变为“PRD”,是自动化测试脚本的设计依据。 1. 测试工作进度把控 测试工作量评估:测试用例是测试执行的依据,因此根据测试用例执行的步骤、环境等信息,我们可以初步估算测试的工作量。测试故事点的评估是敏捷团队必要工作,每个迭代会根据需求故事点、测试同学的故事点评估该迭代可交付的需求量。 提高测试工作组织效率:需求测试周期会经过多个环节,如功能测试、联调测试、UAT测试等。经常需要和其他同事沟通测试信息,这时测试用例的存在会提高沟通的效率;另外,推进每个阶段测试工作的基础也是我们的测试用例。 1. 测试结果的度量基准 测试完成后测试同学需要撰写测试报告,测试用例帮助我们告知团队成员需求测试结果的具体信息。它将判断测试是否完成、衡量测试质量等结果量化的更加准确、有效。例:测试覆盖率是多少、测试合格率是多少、重要测试合格率是多少,等等。 1. 分析缺陷 通过测试用例和缺陷数据库对比,帮助团队分析缺陷原因与类型提高团队过程质量。 ### 2 测试用例设计基本原则 1. 正确性:测试用例必须是正确的,需通过测试用例评审。 2. 代表性:测试用例不可能是“穷举”的,期望在有限的测试时间内进行有效的测试,用例必须具有代表性的。 3. 可判定性:用例的测试结果必须可量化,这样测试完成之后才能将测试结果与预期结果进行比较,判定是否存在BUG。 4. 可重现性:测试用例执行可复现性保证问题定位的准确性。 5. 可操作性:详细、准确和清晰的步骤是测试用例执行的必要条件,也是测试用例可重现的基础。 ### 3 关于测试用例设计的三言两语 #### 3.1 地基:常用测试用例设计方法(黑盒测试) ##### 3.1.1 等价类划分与边界值分析 实际测试过,由于时间和预算的考虑,不可能对每组测试数据都进行详尽的测试,尤其是在输入组合池很大的情况下。我们需要一种简单的方法或特殊的技术,从测试用例池中有效地选择测试用例,去覆盖所有测试点。等价类划分与边界值分析便是这样的方法。等价类划分方法将测试的范围划分成几个互不相交的子集,他们的并集是全集,从每个子集选出若干个有代表性的值作为测试用例。边界值分析法就是对输入或输出的边界值进行测试的一种方法,通常是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。 举例:某字段只允许接收1-60的数值,测试用例不可能将1-60的数值都执行一遍,可以将其划分为几个等价类区间(如下图),每个区间取一个值作为测试执行用例,再将边界值(1、2、0、60、59)作为等价类用例的补充,就能有效覆盖测试点。 ![](//img1.jcloudcs.com/developer.jdcloud.com/83dccff2-363f-478b-8f05-e5f2e696b05720220922154712.png) ##### 3.1.2 场景法 场景法是通过场景描述用例执行的路径,从用例开始到结束遍历这条路径上所有基本流和备选流(基本流:按照正确的业务流程来实现的一条操作路径;备选流:导致程序出现错误的操作流程)。场景法适合测试业务流程清晰的系统或功能,从系统整个业务流程的全部角度对系统进行测试。 举例:某旅馆住宿系统支持网上预定业务。游客访问网站进行房间预定操作,选择预定日期、合适的房间后,进行在线预定。此时需要使用个人账号登陆系统,待登录成功后,进行定金支付。订金支付成功后,生成房间预订单,完成整个房间的预定流程。系统允许的预定期限为30天,订金为400元。 1)确定基本流和备选流 ![](//img1.jcloudcs.com/developer.jdcloud.com/c07d9682-ecaf-414e-b954-169ade16613b20220922154739.png) 2)根据基本流和备选流生成不同场景 - 场景1(成功预定房间):基本流 - 场景2(预定日期超限):基本流、备选流1 - 场景3(无空余房间):基本流、备选流2 - 场景4(账号不存在):基本流、备选流3 - 场景5(密码错误):基本流、备选流4 - 场景6(用户账号余额不足):基本流、备选流5 3)用例设计 ![](//img1.jcloudcs.com/developer.jdcloud.com/7027243a-d764-415d-b0c9-c33a5806064b20220922154819.png) ##### 3.1.3 错误推测法 错误猜测主要是一项依赖经验和直觉的非正规的工程方法,基本思想是列举程序可能出现的错误或者容易产生错误的测试点,然后根据测试点来编写测试用例。另一个思想是,在阅读规格说明时联想开发可能做的假设来确定测试用例,比如规格说明中的可能被忽略的内容。 举例:测试某个课程搜索输入框 既然是用错误猜测法,那么我们首先列出可能导致搜索结果出错的情况,如下:①单个空格,多个空格;②字符串前面有空格;③字符串后面有空格;④转义符 “\n”;⑤Null;⑥特殊字符;⑦通配符 * ##### 3.1.4 因果图与判定表 用图解的方法表示各种组合关系,写出判定表,从而设计相应的测试用例。类似于数学知识中的布尔逻辑运算,将各种输入条件的组合起来。每种组合条件就是“因”,它有一个输出的结果,这就是“果”。 生成测试用例步骤: ![](//img1.jcloudcs.com/developer.jdcloud.com/b85ee893-9861-4378-aa42-6f4494f37ab820220922155030.png) 举例:登录用户账号为用户名或手机号(E),密码必须正确; 因果图 ![](//img1.jcloudcs.com/developer.jdcloud.com/95d09602-6c5d-4e35-bee8-dfe5b51c8fd320220922155043.png) 对应判定表(判定表可以根据明确的规则简化用例,本文不做详细说明) ![](//img1.jcloudcs.com/developer.jdcloud.com/ca993ee5-3b23-4d07-9bd4-cf1e48060f9e20220922155104.png) ##### 3.1.5 正交实验法 正交试验设计,是使用已经造好的正交表格来安排试验并进行数据分析,是研究多因素多水平的一种设计方法,从全面试验中挑选出部分具有代表性的点进行试验,这些代表性的点具备了“均匀分散,整齐可比”的特点,是一种相对高效、快速的试验设计方法。 正交表是一种特制的表格,一般用Ln(mk)表示,L代表是正交表,n代表试验次数或正交表的行数,k代表最多可安排影响指标因素的个数或正交表的列数,m表示每个因素水平数,且有n=k因素*(m水平-1)+1。 举例:京东APP上买笔记本,根据类型、显卡类别、内存容量进行查询 1)生成正交表表头 ![](//img1.jcloudcs.com/developer.jdcloud.com/20132246-e91f-44bf-a750-03eb680c04bf20220922155208.png) 2)确定正交表内容 具体方法:对每个因素的水平进行编号,并将试验按照水平数2进行分组,即每2个试验为1组。第一列:第一组试验(试验一、试验二),全部使用因素1的第1个水平;第二组试验(试验三、试验四),全部使用因素1的第2个水平;第二列:每一组试验,分别使用因素2的2个水平;第三列:每一组试验,每1个水平基于水平1、水平2的排列组合。 ![](//img1.jcloudcs.com/developer.jdcloud.com/3b9bed02-fa37-4ca5-aad6-9d6d3ad0254320220922155227.png) #### 3.2 盖房子:实际工作中的测试用例设计 实际工作中,很多时候我们无法遵循理论上的测试用例设计方法那样,编写大而全的用例去执行所有大大小小需求的测试。更多情况下,用例设计时应该遵守精益测试策略,不能一味的追求测试覆盖率,有效的测试更有价值。利用测试四象限等信息指导的精益测试,追求以业务价值为目标,以尽量少的成本交付高质量的软件,做到有效覆盖,减少浪费。不管是手工测试还是自动化测试,都要先搞清楚业务价值和质量目标,测试用例设计和执行过程都需要做出相对应的考量(如测试用例的优先级)。 ![](//img1.jcloudcs.com/developer.jdcloud.com/b1f13047-57d7-4924-a5e2-3f60a791464e20220922155249.png) ##### 3.2.1 框架搭建 用例设计之前,我们应该熟悉需求的业务背景与技术架构,从而勾勒出测试用例整体框架。然后,使用【横向业务扩展】+【纵向架构分层】的组合模式下来针对每个需求完成用例拆解覆盖。 - 横向业务扩展:指从业务角度平铺来看,总共有哪些业务场景,提供了哪些能力,即产品最上层的功能全景。 - 纵向架构分层:是指从技术架构层面来分析,当前产品可以宏观上分为几层,以便于在用例验证是从不同层次上进行验证和用例覆盖。 举例:百川C2C业务增加收件偏好 ![](//img1.jcloudcs.com/developer.jdcloud.com/a3b83ba0-1528-4c92-843e-4e85fa1d6a8c20220922155319.png) ![](//img1.jcloudcs.com/developer.jdcloud.com/9eab6bb5-ce72-4faf-b453-0a81bd56f8e620220922155331.png) ##### 3.2.2 添砖加瓦 测试框架搭建完成之后,就需要完善测试范围梳理,确认功能点的细节信息。例如,一般情况下需要进行回归测试、异常测试,再有可能需要进行并发测试、安全测试和性能测试等。从测试类型出发,结合常规用例设计方法进行用例设计与编写。 举例: ![](//img1.jcloudcs.com/developer.jdcloud.com/9d8af48a-0888-4dfd-92e4-886f7963ddef20220922155351.png) ##### 3.2.3 站在房子外面:像用户一样去测试 怎样像用户一样测试,能否做到还原真实用户的使用场景,还原用户在使用产品时的真实心理。说起来有点玄,但其实思路很简单。第一步想象自己就是用户,如果是我会有多少奇奇怪怪的操作或需求;第二步是弥补测试人员和用户之间的断层,用户和测试信息对齐,指导用户更好的使用软件,指导测试更有同理心。 小妙招 - 用户画像:我们大概率能知道用户群体是谁,他的典型画像是什么样的,这也是我们进行换位思考的基础。 - 不信任上下游:我们不能保证上下游给我的信息或者功能一定是完美的,结合自身系统定位和业务确认不同场景下我们应该做出什么样的反馈。 #### 3.3 拓展:房子的维护,测试用例管理 测试用例是我们测试人员宝贵的财富,在测试工作中测试用例是其最为重要的基础。所以,一个良好的测试用例除了可以帮助测试人员阅读,理解,修改之外,也要方便我们去管理它,从而提高测试工作的质量和效率。不同的业务条线或者团队可以根据自己需要制定一些规则,让大家在进行测试用例设计遵守。 目前我们组内的测试用例管理平台主要使用行云平台进行用例管理(测试管理->用例管理),也根据业务特性等方面制定了测试用例设计标准,规范了测试用例命名、书写等细节。 ### 4 总结 测试用例对测试人员来说就像厨师手上那把锋利的刀,要保证它可以让我们完成“美味”的需求测试工作。测试用例设计理论方法是设计出测试用例的基础,但实际工作中往往需要讲究测试策略。实际工作中,测试人员往往需要秉承精益测试的思想,再结合实际测试需求特点才能设计出好的测试用例。当然,撰写测试用例的时候要记得后续遵守测试管理的规则。 ------------ ###### 自猿其说Tech-JDL京东物流技术与数据智能部 ###### 作者:王莹莹
原创文章,需联系作者,授权转载
上一篇:QUIC在京东直播的应用与实践
下一篇:了解Java线程池的原理和监控
相关文章
安全测试之探索windows游戏扫雷
Jmeter压测实战:Jmeter二次开发之JSF采样器实现
Laputa自动化测试框架介绍
自猿其说Tech
文章数
426
阅读量
2149964
作者其他文章
01
深入JDK中的Optional
本文将从Optional所解决的问题开始,逐层解剖,由浅入深,文中会出现Optioanl方法之间的对比,实践,误用情况分析,优缺点等。与大家一起,对这项Java8中的新特性,进行理解和深入。
01
Taro小程序跨端开发入门实战
为了让小程序开发更简单,更高效,我们采用 Taro 作为首选框架,我们将使用 Taro 的实践经验整理了出来,主要内容围绕着什么是 Taro,为什么用 Taro,以及 Taro 如何使用(正确使用的姿势),还有 Taro 背后的一些设计思想来进行展开,让大家能够对 Taro 有个完整的认识。
01
Flutter For Web实践
Flutter For Web 已经发布一年多时间,它的发布意味着我们可以真正地使用一套代码、一套资源部署整个大前端系统(包括:iOS、Android、Web)。渠道研发组经过一段时间的探索,使用Flutter For Web技术开发了移动端可视化编程平台—Flutter乐高,在这里希望和大家分享下使用Flutter For Web实践过程和踩坑实践
01
配运基础数据缓存瘦身实践
在基础数据的常规能力当中,数据的存取是最基础也是最重要的能力,为了整体提高数据的读取能力,缓存技术在基础数据的场景中得到了广泛的使用,下面会重点展示一下配运组近期针对数据缓存做的瘦身实践。
自猿其说Tech
文章数
426
阅读量
2149964
作者其他文章
01
深入JDK中的Optional
01
Taro小程序跨端开发入门实战
01
Flutter For Web实践
01
配运基础数据缓存瘦身实践
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号