优秀的测试用例是如何设计的?

news2024/12/28 18:19:37

这篇文章我们主要聊一下测试工程师最通用的也是最根本的技能,测试用例的设计能力。

测试用例

测试用例是通过使用在测试计划中确定的测试技术,对于已确定的测试条件进行逐步推敲,精炼而设计出来的重点说明如何具体操作产生何种结果的文档。

通俗的话就是要把想要测试的动作变成在什么情况下,做什么动作,用什么数据方式去做,最后想得到什么样的结果归集成一条测试用例。所以,每个测试用例应该有它的前置条件,应该有它的事件和对应的参数,最后有期望结果。这样就是一条合格的测试用例了。

比如登录功能,现在基本每个网站、APP等都有登录功能,也是面试中问的比较多的,找一个已经存在的用户,在界面上输入正确的用户名和密码,点击一下登录按钮,看看有没有登录成功。这是一个最最简单的操作,也构成了我们的第一个最正常的测试用例。也包含了前边说的几个要素:

·前置条件:一个已经存在的用户

· 动作和参数:输入正确的用户名、密码,点击登录

· 期望结果:登录成功

这当然是一个完整的测试用例,但是对于一个登录模块来说,当然不够,这只是这个模块里合格的测试用例之一。那该怎么写出更多的测试用例呢?这时候就要去看我们的动词了:设计。设计其实对应的是一套方法,只有有正确的方法,才能设计出合格的测试用例。

用例设计

比较常用的测试用例设计方法

· 等价类划分法

· 边界值法

· 因果图设计法

· 判定表设计法

· 正交实验法

· 错误推测法

· 场景法

至于其中的原理、原则、怎样去使用,网上的资料一大堆,这里就不再说了。这多方法,那在设计的时候,该怎么去选择呢。这里借用网上流传的一个段子

输入分类选等价,给定范围加边界,条件组合出因果,条件孤立想判定,无限穷举取正交,业务复杂场景法,错误推测靠经验,测试充分全覆盖。

这么多方法都能用的到么?答案是否定的,在我的测试认知里,用的最多的就是边界值、等价类、场景法和错误推测这样几个方法。所以归纳总结一下,真正工作中我们设计的思路大概是:

· 用等价类划分方法划分大部分场景设计测试用例

· 任何情况下都必须使用边界值分析方法,经验表明用这种方法设计出测试用例发现程序错误的能力最强

· 程序业务复杂度比较高,则适当使用场景法补充一部分测试用例

· 如果你对该业务非常熟悉,可以根据经验在容易出错的地方补充一些测试用例

基于这样的设计方法,同样还是当初的那个登录界面,我们大体可以设计出下边的测试用例:

1. 已存在的用户,输入正确的用户名和密码,点击登录,验证是否登录成功;

2. 不输入任何内容,直接点击登录,验证是否登录失败,提示信息正确;

3. 已存在的用户,输入正确的用户名和错误的密码,点击登录,验证是否登录失败,提示信息正确;

4. 已存在的用户 A 与 B,输入 A 的用户名和 B 的密码,点击登录,验证是否登录失败,提示信息正确;输入不存在的用户名和任意密码,点击登录,验证是否登录失败,提示信息正确;

5. 已存在但状态异常的用户(如停用、冻结、锁定),输入正确的用户名和密码,点击登录,验证是否登录失败,提示信息正确;

6. 已存在的用户,用户名为小写,输入大写的用户名及正确的密码,点击登录,验证是否登录失败;

7. 已存在的用户,密码为小写,输入正确的用户名及大写的密码,点击登录,验证是否登录失败;

8. 密码是否自动加密显示或包含隐藏 / 显示功能,验证是否可以正常使用;

9. 用户权限是否区分,管理员及普通用户登录成功跳转是否正确;

10. 用户名及密码输入框是否具有长度限制,与注册时长度要求是否一致;

11. 登录失败到达一定次数,是否会自动显示验证码;

12. 有验证码情况下,输入正确的用户名密码及正确的验证码,验证是否登录成功;

13. 有验证码情况下,输入正确的用户名密码及错误的验证码,验证是否登录失败;

14. 有验证码情况下,点击验证码图片(或换一张按钮)是否更换验证码,更换后的验证码是否可用;

15. 有验证码情况下,点击验证码图片(或换一张按钮)更换验证码,使用更换前验证码登录,验证是否登录失败;

16. 刷新页面验证码是否跟随刷新;

17. 验证码超过可用时效,输入当前验证码,验证是否登录失败;

18. 登陆失败后,用户名是否保存,密码为空;

19. 是否有记住用户名功能和记住密码功能,是否可用;

20. 快捷键是否可用,密码是否不可以通过粘贴粘入;

21. TAB、ENTER 是否可以自动跳转控件及自动提交;

22. 是否支持第三方登录(微信、支付宝、QQ、微博等),登录验证是否正确;

23. 是否支持手机验证码登录,手机是否可以收到短信,是否可以登录成功;

24. 手机验证码超时,使用已超时验证码登录,是否可以登录成功;

25. 用户 session 失效后是否重新跳转登录页;

26. 用户登出后,通过后退按钮,是否可以继续操作;

27. 是否具有忘记密码功能,是否可用。

OK,简单列出了一些,但是如果这时候要我给这套用例打个分的话,那我可以打个 80 分。一定有小伙伴要实名 diss 我了,已经这么全面了,还要什么?为什么只有 80 分?这就涉及我们今天讨论主题的第三个维度了,形容词 “优秀的”。
 

谈优秀的测试用例

对于一组测试用例来说,只有完备的、可重复的、可验证的、需求覆盖全面的测试用例才是最优秀的测试用例。

数据日志测试

所谓的数据日志测试主要包含我们在前端,在页面或者 APP 上看不到的测试项,我举几个例子:

· 数据库密码字段验证是否加密

· 登录失败次数是否记录在数据库、缓存中,逻辑是否正确

· 登录失败冻结等场景数据库是否正确修改状态

· 错误日志是否完备,是否便于排查问题

· 对象是否容易定位,便于自动化

· 是否有增加埋点,进行用户行为分析

界面 UI 测试

日常测试来说,界面和用户体验的测试也是非常必要的,像我们前边关于 TAB 和 ENTER 的使用其实就是用户体验的一种,所以如果要更全面地进行测试覆盖,就一定也要考虑到界面的测试。

· 布局是否合理,是否对齐

· 界面设计是否与需求、UI 设计文档一致

· 是否有错别字、标点错误缺失

· 页面颜色搭配是否得当

· 错误文字是否明确易懂

· 界面视觉效果是否恰当,界面动画展示是否流畅

兼容性测试

· 不同操作系统下,是否可以兼容(Windows、MAC OS、LINUX)

· 同一操作系统不同版本下,是否可以正常显示及功能正确性

· 不同浏览器下(Chrome、IE、FireFox 等)下是否可以兼容

· 同一浏览器不同版本下是否可以兼容

· 移动端是否兼容

· 放大缩小界面时是否兼容展示

· 不同语言下,界面展示是否正确

· 是否具有高对比读模式(为视力不好的人准备)

性能测试

性能测试又可以分为服务端性能和前端性能,也需要综合考虑,同时,针对性能的指标和场景也伴随着不同模块、不同企业、不同需求而有所不同,我在这里简单举几个比较通用的例子:

· 用户登录接口的最大并发数(响应时间 3s 内)

· 特定负载测试下服务器的性能指标

· 压力测试过程中服务的稳定性和性能指标

· 服务的分布式处理逻辑,负载均衡逻辑、缓存及队列的使用

· 能够支持的接口最大并发量

· GC 处理,是否有内存溢出等情况

· 高并发下数据库是否有慢 [url=]SQL[/url] 和死锁

· 页面加载速度

· 页面资源大小,是否应用雪碧图

· YSLOW 分析,静态性能

安全测试

最后,也是我们最容易忽略的安全测试。很多时候我们容易忽略安全带来的威胁,但是实际上一旦发生安全问题,产生的损失会远远大于某一个 Bug 带来的影响。我们先就登录界面简单介绍一下应该采取的安全检测措施,后边有机会我们再细致聊一下安全测试的方方面面。

· 验证关键数据通过 HTTP 还是 HTTPS 传输

· 是否包含弱密码

· 是否容易被暴力破解

· 是否使用多因子认证

· 登录是否采用互斥性验证

· 产生的会话令牌(sessionID)强度

· 传输中是否存在会话令牌泄露情况

· 是否包含越权漏洞

· 使用万能密码是否可以登录成功

· 是否可以进行 SQL 盲注

· 密码存储加密安全性

· 是否具有 XSS(跨站脚本)攻击防御

· 是否包含 CSRF 攻击漏洞

· Token 或密码传输中防中间人攻击

写在最后,测试用例的执行还要和实际项目的紧急程度挂钩,明明项目很紧急要上线,难道要执行上面所有方面的用例,那啥都够不到了,所以测试用例的优先级要明确,在合适的时候执行相对合适的优先级的用例,保证产品质量。

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

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

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

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

相关文章

Linux自主学习 - 2

一、gcc编译器 第一个HelloWorld 1、查看当前工作目录/home/yang/coding下为空 2、使用vim写一个C源程序hello.c 进入vim界面后,按下i键进入编辑模式,vim窗口下方出现“INSERT”字样 编辑完成后,先按ESC键退出编辑模式,然后输入:…

onnxruntime推理

pytorch模型训练 这里以pytorch平台和mobilenet v2网络为例,给出模型的训练过程。具体代码如下所示: import os import torchvision.transforms as transforms from torchvision import datasets import torch.utils.data as data import torch import…

Java面试题Class类的理解?创建类的对象的方式?

1.Class类的理解 1.类的加载过程: 程序经过javac.exe命令以后,会生成一个或多个字节码文件(.class结尾)。 接着我们使用java.exe命令对某个字节码文件进行解释运行。相当于将某个字节码文件 加载到内存中。此过程就称为类的加载。加载到内存中的类&…

一起来了解多领域自动采样器的功能特点

多领域自动采样器体积小,便携式设计,功能丰富,操作简便可用于海洋、河流、船舶、沟渠、深井、排污口等多种场景的水样采集,尤其适用于窨井、下水道、沟渠 等空间狭小、现场条件恶劣的工作场合,可以在环保、科研、污水验…

【计算机组成原理】辅助存储器

目录 一、磁盘存储器 二、固态硬盘SSD 三、虚拟存储系统 一、磁盘存储器 大多数计算机外存储器采用磁盘记录,如今正在逐渐被SSD固态硬盘取代 磁表面存储:磁性材料薄层涂在金属或塑料表面做磁载体存储信息 硬磁盘存储器:基底(磁…

【深度学习】近万字解读深度学习领域有哪些瓶颈?

文章目录 一、导读二、深度学习缺乏理论支撑三、领域内越来越工程师化思维四、对抗样本是深度学习的问题,但不是深度学习的瓶颈五、知乎网友的回答5.1 作者:Giant5.2 作者:知乎用户5.3 作者:何之源 一、导读 虽然深度学习在图像、…

Java去掉 txt 文件中的空格空行【代码记录】

文章目录 1、需求2、代码3、结果 1、需求 2、代码 package com.zibo.main;import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern;public cla…

外卖商城平台微信小程序 后端ssm

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 外卖商城平台微信小程序 前言一、组织结构二、使用步骤1.后端登录代码2.运行截图 源代码 前言 提示:这里可以添加本文要记录的大概内容: 本外卖商城…

windows 快速删除node_modules文件夹

rmdir /Q /S 目录 删除文件夹(非空) /S 除目录本身外,还将删除指定目录下的所有子目录 /Q 安静模式,带 /S 删除目录树时不要求确认

救援模式 单用户模式

救援模式 救援模式是一种在 Linux 操作系统中用于故障排除和修复的特殊启动模式。它可以提供一些基本的系统功能,以便在出现问题时可以对系统进行诊断和修复。 救援模式通常会加载最小的系统资源和驱动程序,以确保在系统出现故障的情况下仍然可以正常启…

异常—javaSE

文章目录 1.概念和结构体系1.1概念1.2结构体系 2.常见异常类型2.1空指针异常2.2数组越界异常2.3算数异常 3.异常的分类3.1编译时异常3.2运行时异常 4.异常的处理4.1防御式编程4.2异常的抛出4.3异常的捕获4.3.1异常申明throws4.3.2try-catch捕获并处理异常4.3.3finally 4.4异常的…

【ubuntu】【vmware tools】设置共享目录

1、现象 ubuntu 22 vmware 16,安装后会发现 “Reinstall VMware Tools…” 灰色不可用。如图: 2、原因分析 ubuntu 22 ISO 内不再提供 VMware Tools 的安装包,未检测到所以灰色不可用 在 Ubuntu 22 上挂载 Windows HGFS 共享目录&#xff…

Linux系统之部署Teleport堡垒机系统

Linux系统之部署Teleport堡垒机系统 一、Teleport介绍1.1 Teleport简介1.2 Teleport特点1.3 支持操作系统 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本 四、部署teleport服务端4.1 创建部署目录4.2 下载t…

Sqoop初认识及安装

Sqoop初认识及安装 文章目录 Sqoop初认识及安装Sqoop简介Sqoop原理安装前置条件镜像地址上传安装包解压修改配置文件重命名配置文件 拷贝JDBC驱动验证Sqoop测试Sqoop是否能够成功连接数据库 Sqoop简介 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库…

redis高可用集群搭建

redis高可用集群搭建 redis的安装配置允许远程访问重启服务检查服务是否启动架构图开始搭建集群安装ruby创建集群高可用测试redis集群的扩展将7号机添加为新的master节点添加从节点删掉一个slave节点删除master节点 redis的安装 sudo apt-get install redis-server配置允许远程…

引进吸收再消化,可借鉴的产业超车模式探索

近期,C919大型客机顺利开启商业首航,这也标志着坐国产大飞机出行的时代来了!C919是我国首次按照国际适航标准自行研制、具有自主知识产权的喷气式干线客机,它的商用飞行也象征着我国对波音、空中客车等大型客机企业垄断地位的一次…

【unity每日一记】unity中常见的特性大全

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

【每日一题】LCP 41. 黑白翻转棋

【每日一题】LCP 41. 黑白翻转棋 LCP 41. 黑白翻转棋题目描述解题思路 LCP 41. 黑白翻转棋 题目描述 在 n*m 大小的棋盘中,有黑白两种棋子,黑棋记作字母 “X”, 白棋记作字母 “O”,空余位置记作 “.”。当落下的棋子与其他相同颜色的棋子在…

JMeter根据负载量计算并发用户数实例

目录 前言: 业务需求 分析需求 测试模型构建 & 用例设计 一、场景构建:登录业务操作流程、考勤打卡操作流程; 二、场景用例设计 三、测试脚本用例设计: 模型构建 登录打卡-操作流程: 场景设计 常用测试场景的类型:…

nx安装llvmlite与numba

文参考 Python安装llvmlite、numba报错解决方案_ClearLon的博客-CSDN博客 llvmlite与numba你可以理解为用于数据处理的加速包 我的python版本为3.6.9,llvmlite版本为0.32.1,numba版本为0.49.1 目录 1 安装 llvmlite 2 安装numba 1 安装 llvmlite…