如何编写一份优质的测试用例?

前言

这篇文章主要是想要写给测试小伙伴们的,因为我发现还是有很多小伙伴在遇到写测试用例的时候无从下手,我就想和大家简单的聊聊,分享一下我的一些见解和经验。

用例的五个构成元素:

  1. 用例标题
  2. 前置条件
  3. 测试步骤
  4. 期望结果
  5. 后置条件

下面从这五个元素的角度,去剖析如何编写测试用例

用例标题

用例标题就是测试点名称。用例标题是用来说明这个用例的测试目的的,好的用例标题是别人看完你这个用例标题后就知道你这个用例是测什么的。但并不是标题越详细越好。既然是标题,就要言简意赅,能多简洁就多简洁,但简洁的同时又要能体现你的测试目的。用例的标题最好不要超过30个字,太长会让人看起来很累也很不专业。一般可以遵循这样的公式:主体(可省略) + 动词 + 名词 + 结果(可省略)(即谁做了什么有什么影响),但很多时候是动词 + 名词的形式。要注意:我们写的每一个案例对应的就是要测试的一个点。其实每个点都是用户的一种操作行为。

前置条件

用例的前置条件就是在测这个用例之前你要先准备的环境和数据。同时,我们需要将前置条件和测试步骤区分开来,但怎么区分呢,是不是还是比较模糊?我们从用例标题入手,我们的用例标题是动作+名词嘛,那我们的测试重点是动作,那产生这个动作之前的所需的所有环境和数据都算是前置条件,产生这个动作和这个动作带来的后果都算是测试步骤。这样是不是就比较清晰了。 前置条件只是说明测试这个用例需要准备的环境和数据,故前置条件不用像步骤那样写得那么详细,但也不能太过于简洁,不能有歧义。

测试步骤

测试步骤是一个用例的精髓,用例标题体现测试的目的,用例步骤就是如何来测从而达到测试的目的。即然是步骤那就是一步一步的操作过程,但这个操作过程并不是写得越详细越好。我们的步骤是来体现我们的测试目的的,即要怎样做什么操作,这个操作后要如何检查产生的结果。这个操作可能是一步,也可能是几步,也可能是来回循环。不管是什么操作都是告诉别人如何去做,如何去检查。但步骤不能写得过于详细,如【登录控制台,打开xx页面,点击xx按钮】这种就没必要写上去,因为这种既是浪费时间也会给用例的维护带来成本。只需精简明确地告诉别人在哪做什么操作即可,同时,写案例时需要遵循一些准则规范:

  • 用例规范

  1. 每个文件夹下不能超过10个测试用例
  2. 每个用例的步骤不能超过8步(算整个案例测试步骤,比如测试步骤和后置条件中执行1-3步)
  3. 测试用例不写“编号”和“测试步骤名称”
  4. 每个测试用例一个测试点,用例标题不宜过长,需要精简明了
  5. 详细测试需求点、测试步骤和预期结果必须体现测试目的和测试重点
  6. 测试用例中需要用到附件的,需附上文件和文件存放路径;(附件大于1M可指定路径)
  7. 预期结果要量化和直接化,减少用例执行的沟通成本
  8. 测试用例设计时需考虑测试执行效率,功能用例执行10分钟原则:用例里用到的数据或样本、脚本需要在备注里附上
  9. “测试步骤”和“预期结果”必须可实现和可执行
  10. 测试用例需验证客户业务,不能只检查配置和页面,除非为纯页面测试
  11. 体现强关联,去掉弱关联;强关联:案例中缺少此步骤就无法达到案例目的;弱关联:案例中缺少此步骤可以达到案例目的;对于大家都知道或应该清楚的点不用体现在用例中
  12. 测试用例需要有正反对比验证:开和关的对比、匹配和不匹配对比、输出结果的对比等,这种用例可以合并,减少用例冗余
  13. 提示内容不用写的太具体,说明大概意思即可,后面修改了提示需要返工用例
  14. 用例里不能有具体的版本号
  15. 模块备注尽可能详细,便于测试和观察测试点
  16. 测试方法可实现,测试数据贴近于用户环境
  17. 和其它功能、第三方之间有关联的测试场景有没有遗漏
  18. 标题精简,需要体现测试目的
  19. 模块目录中的备注是否足够详细,能支撑其它人快速理解特性和提高测试效率
  20. 测试结果的检查有没有站在客户的角度进行测试和验证
  21. 页面的测试需要覆盖多款浏览器的测试
  22. 不用把所有检查点放在一个用例上,这样会出现执行漏测或前面失败了后面就不执行了,问题发现滞后
  23. 若多个案例之间在步骤上就是互相覆盖的,需要合并:如测最长字符和包含特殊字符这两个测试点可以合并为一个案例
  24. 用例里不能出现有歧义的词,阐述需要清晰,不能两个人执行同样的 案例可能会产生两种执行结果
  25. 用例需要专业性,不能出现口语化的词语;
  26. 期望结果需要明确性,不能出现模糊的词语;如可能、如果、符合要求等

 

  • 可维护性规范

  1. 测试用例中不能出现页面配置路径,如:系统配置-网络配置-网络接口
  2. 测试用例中不能出现操作过程,比如打开XX目录下文件,点击什么;直接写需做的操作即可
  3. 测试用例需用到的例行检查点、公共检查点、后台、调试、配置文件等查看方法统一写到模块备注

 

期望结果

期望结果对应的是测试步骤,每一个测试步骤都对应一个期望结果,即做了这个操作后,希望它产生的后果。即大家在用例里看到的测试步骤里的1,2,3对应期望结果里的1,2,3。理论上每一个测试步骤都需要有一个对应的期望结果,但有些测试步骤我们并不关注这一步骤的操作后果,那这样的期望结果可写可不写。

这里需要注意期望两字,期望的意思是说要从用户的角度出发,我用户做了这个操作后,我希望它能给我反馈的结果。这个结果不是开发程序代码返回的结果,开发程序代码返回的结果是实际结果,执行用例时只有实际结果与用例期望结果一致时,案例才能标pass。所以在写案例或执行案例时,得到实际结果与期望结果不一致时不要轻易被开发忽悠了,一切以用户主。

后置条件

与前置条件对应,即执行完这个用例后需要还原环境,否则会给下个用例带来影响。一般写功能用例时,后置条件基本不用太关注,因为测试环境本来就需要多样化才能模拟用户的环境,若每次执行用例都保持一个纯净环境则带来的测试工作量也大,而且也不能很好地体现测试环境的多样性。后置条件一般是自动化需要做的,因为自动化需要保持环境的独立性,彼此不依赖,执行完一个案例后需要将这个案例创建的数据、策略等全部清空,防止影响下一个案例。

如何划分用例等级

现用例等级是怎么划分的?

一般在一个模块里的案例按照等级进行划分时,遵循下面的比例:

  • BVT(10%):模块最基本的功能验证(含常用部署、基本关联),推荐1级用例的20%左右
  • Leve1(30%):基本需求点,基本逻辑,基本可靠性,基本关联,基本用户场景
  • Leve2(40%):常见功能/逻辑细化点/专项细化点,常见关联/容错/边界值/用户场景
  • Leve3(20%):错误提示,极少测试的用例,非常见部署方式/用户场景/容错/边界值等

我们在划分用例等级时,为什么要这样划分?

BVT的案例应该是最基本最简单的案例,如一个功能模块的增删改就是最基本的;

level1是基本的功能需求基本操作相关的,如上面说的增删改,增可能有多种增加方式,BVT只是最基本的操作,level1是对BVT的一种补充;

level2是一些内部逻辑细化点或一些常见的异常操作。Level2的异常是对用户来是比较常见的,是很大概率上会遇到的;

level3是可能会出现但出现概率很低的一些操作或异常场景。level3的异常是很极端的异常,是很小概率会发生的,如不断重启之类的。

这样划分的意义何在?

这样划分是有意义的,从这个等级划分的原则上看就知道BVT是最好执行的,然后等级越高难度系数越大,特别是level3这种,可能涉及到很复杂的网络部署或很异常的环境构造。

不同等级的案例需要消耗的时间和带来的影响是不一样的。当一个模块转测后,我们希望的是能快速验收这个模块的质量,那如何验收?不就是它的基本功能是不是完成了,它的基本操作是不是都能顺畅执行,在这些基本功能基本操作都没问题的情况下,再来检视内部逻辑细节处理是不是到位,最后再检视各种异常场景下的处理是不是已经合理。即从简单到困难,先保障基本功能再检验其他的发散点。

 感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/163850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

05 Powershell发送http请求

一:发送http请求 1、语法: Invoke-WebRequest -uri "请求地址" -UseBasicParsing 2、实例: $result Invoke-WebRequest -uri "http://rdc.mingyuanyun.com/rdc-service/api/v2/apps/$($app)/versions/maxpackversion"…

腾讯又出王炸产品!使用混元大模型进行数据报表测试

最近腾讯出了自己的大模型,命名混元。 现在已经开始内测,感谢腾讯小伙伴卢晓明同学帮我们提前申请到了内测机会,接下来我们用腾讯混元大模型与实际工作结合,开始我的报表测试之旅。 腾讯混元大模型官方入口:https://hunyuan.ten…

Java 基础面试题大概有哪些?

Java基础面试题的范围非常广泛,一般包括以下几个方面: 一、Java基础语法 数据类型:Java中包括基本数据类型和引用数据类型,基本数据类型包括byte、short、int、long、float、double、char、boolean,引用数据类型包括…

三十分钟学会Shell(下)

Shell 3.1 运算符 3.1.1 算数运算符 在Shell脚本中,算术运算符用于执行基本的数学运算。Shell支持多种算术运算符,包括加、减、乘、除等。以下是关于Shell算术运算符的一些方法以及相应的示例说明: 加法: a10 b20 c$((a b)) …

【第二部分:结构】ARM Realm Management Monitor specification

目录 概念Realm概述Realm执行环境Realm寄存器Realm内存Realm处理器功能IMPDEF系统寄存器 Realm属性Realm活性Realm生命周期状态状态转换 Realm参数Realm描述符 颗粒Granule颗粒属性颗粒所有权颗粒生命周期状态状态转换颗粒抹除 Realm执行上下文概述REC属性REC指数和MPIDR值REC生…

洞悉今日,把握明日:咨询公司的关键策略揭秘

在快节奏且充满不确定性的商业环境中,能够洞悉当前市场动态并预测未来趋势的企业更有可能获得成功。咨询公司在这个过程中扮演着关键角色,本文将探讨咨询公司如何帮助企业洞悉现状并把握未来趋势,以及他们运用的关键策略。 咨询公司的市场洞察…

百度地图,地市区域描边

描边首先需要各个点的经纬度数据 json数据下载 直接复制粘贴进入页面ctrls保存就可以了。 如果需要某省中的各个地市描边可以点击这个省的进行下载,这里以山东为例,我是先下载了山东的json数据,但是发现只有山东省下各个市的描边,于是又下了中…

Mac下载的软件显示文件已损坏,如何解决文件已损坏问题,让文件可以正常运行

Mac下载的软件显示文件已损坏,如何解决文件已损坏问题,让文件可以正常运行 设备/引擎:Mac(11.6)/Mac Mini 开发工具:终端 开发需求:让显示已损坏的文件顺利安装到电脑 大家肯定都遇到过下载…

ESP32 MicroPython 颜色及二维码识别⑫

ESP32 MicroPython 颜色及二维码识别⑫ 1、颜色识别2、二维码识别 1、颜色识别 使用AI颜色识别功能,可以实现颜色辨别、颜色追踪等应用。颜色识别模型内置有9种常见的颜色识别和一种颜色学习识别模式。他们分别是: ai.COLOR_RED 表示识别红色 ai.COLOR…

【Linux】关系运算符、shell判断脚本执行时是否有传参、判断文件/文件夹是否存在、判断字符串是否相等、判断上个命令执行是否正常、判断字符串是否为空

🦄 个人主页——🎐个人主页 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!&…

全网最详细的安装pytorch GPU方法,一次安装成功!!包括安装失败后的处理方法!

文章目录 前提---查看是否有NVIDIV英伟达显卡【笑哭】一、查看电脑的显卡驱动版本方法一:在cmd命令窗口中输入nvidia-smi,可以发现版本为12.2方法2:点击NVIDIA控制面板→系统信息 二、安装CUDA方法1: 在pytorch官网https://pytorc…

Redis高可用之主从复制及哨兵模式

一、Redis的主从复制 1.1 Redis主从复制定义 主从复制是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础之上实现高可用; 主从复制实现数据的多级备份,以及读写分离(主服务器负责写,从服务器只能读) 1.2 主从复制流…

学习Python和深度学习基础

1. Python基础知识 学习Python的基本语法、数据类型、控制流等基础知识。掌握常用的Python库,如NumPy和Pandas,它们在深度学习中经常被使用。 2. 深度学习基础 了解深度学习的基本概念,包括神经网络、前向传播、反向传播等。学习深度学习框…

Disasm 示例程序改写和适配

Disasm 示例程序改写和适配 简介 用途 可用于反汇编x86的二进制汇编文件&#xff0c;展示出来内部的反汇编原理和流程。原由 最近在看<<C 反汇编与逆向分析技术揭秘>>这本书籍&#xff0c;在第一张的简介中我们可以看到ProViem这个反汇编开源工具的内容&#x…

无线收发器芯片Si24R1 兼容替代NRF24L01

Si24R1是一款工作在2.4-2.5GHz世界通用ISM频段的单片无线收发器芯片。无线收发器包括&#xff1a;频率发生器、集成嵌入式ARQ基带协议引擎、功率放大器、晶体振荡器调制器、解调器。输出功率频道选择和协议的设置可以通过SPI接口进行设置。是目前2.4G无线射频芯片中&#xff0c…

Java 文件处理工具类详解

在软件开发中,文件处理是一个常见的任务,我们经常需要读取、写入和管理文件。为了更便捷地处理文件相关操作,我们编写了一个 FileUtils 工具类,提供了一些有用的文件处理方法。 工具类介绍 FileUtils 工具类包含了一些常用的文件处理方法,主要功能如下: 获取统一的文件…

Git本地库操作

对本地库的操作很少&#xff0c;我们学习1~6节即可&#xff0c;其他了解下。我们可以在idea中完成对本地库还有远程库的操作&#xff0c;可视化界面用起来更加舒适而且也不会混淆。 1. Git概述 Git 是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小…

[个人笔记] Windows配置OpenSSH免密连接

Windows - 运维篇 第七章 Windows配置OpenSSH免密连接 Windows - 运维篇系列文章回顾Windows配置OpenSSH免密连接参考来源 系列文章回顾 第一章 迁移WinSrv系统到虚拟机 第二章 本地安全策略xcopy实现实时备份文件夹内容 第三章 利用cmd自带的icacls命令导出文件的ACL权限 第四…

JavaScript启动本地应用程序

JavaScript调起本地应用程序 以下内容&#xff0c;自定义部分我也还未经过实际验证&#xff0c;酌情查看。 文章目录 JavaScript调起本地应用程序确定协议调用协议传参自定义写入协议获取参数 在浏览器中通过 JavaScript调起本地应用程序的一个可行方法就是 通过协议调起。 …