学妹:怎样才能设计出优秀的测试用例?

news2024/11/17 22:35:16

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

测试用例

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

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

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

  • 前置条件:一个已经存在的用户
  • 动作和参数:输入正确的用户名、密码,点击登录
  • 期望结果:登录成功

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

用例设计方法

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

  • 等价类划分法
  • 边界值法
  • 因果图设计法
  • 判定表设计法
  • 正交实验法
  • 错误推测法
  • 场景法

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

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

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

  • 用等价类划分方法划分大部分场景设计测试用例
  • 任何情况下都必须使用边界值分析方法,经验表明用这种方法设计出测试用例发现程序错误的能力最强
  • 程序业务复杂度比较高,则适当使用场景法补充一部分测试用例
  • 如果你对该业务非常熟悉,可以根据经验在容易出错的地方补充一些测试用例

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

  1. 已存在的用户,输入正确的用户名和密码,点击登录,验证是否登录成功;
  2. 不输入任何内容,直接点击登录,验证是否登录失败,提示信息正确;
  3. 已存在的用户,输入正确的用户名和错误的密码,点击登录,验证是否登录失败,提示信息正确;
  4. 已存在的用户 A 与 B,输入 A 的用户名和 B 的密码,点击登录,验证是否登录失败,提示信息正确;输入不存在的用户名和任意密码,点击登录,验证是否登录失败,提示信息正确;
  5. 已存在但状态异常的用户(如停用、冻结、锁定),输入正确的用户名和密码,点击登录,验证是否登录失败,提示信息正确;
  6. 已存在的用户,用户名为小写,输入大写的用户名及正确的密码,点击登录,验证是否登录失败;
  7. 已存在的用户,密码为小写,输入正确的用户名及大写的密码,点击登录,验证是否登录失败;
  8. 密码是否自动加密显示或包含隐藏 / 显示功能,验证是否可以正常使用;
  9. 用户权限是否区分,管理员及普通用户登录成功跳转是否正确;
  10. 用户名及密码输入框是否具有长度限制,与注册时长度要求是否一致;
  11. 登录失败到达一定次数,是否会自动显示验证码;
  12. 有验证码情况下,输入正确的用户名密码及正确的验证码,验证是否登录成功;
  13. 有验证码情况下,输入正确的用户名密码及错误的验证码,验证是否登录失败;
      14. 有验证码情况下,点击验证码图片(或换一张按钮)是否更换验证码,更换后的验证码是否可用;
  14. 有验证码情况下,点击验证码图片(或换一张按钮)更换验证码,使用更换前验证码登录,验证是否登录失败;
  15. 刷新页面验证码是否跟随刷新;
  16. 验证码超过可用时效,输入当前验证码,验证是否登录失败;
  17. 登陆失败后,用户名是否保存,密码为空;
  18. 是否有记住用户名功能和记住密码功能,是否可用;
  19. 快捷键是否可用,密码是否不可以通过粘贴粘入;
  20. TAB、ENTER 是否可以自动跳转控件及自动提交;
  21. 是否支持第三方登录(微信、支付宝、QQ、微博等),登录验证是否正确;
  22. 是否支持手机验证码登录,手机是否可以收到短信,是否可以登录成功;
  23. 手机验证码超时,使用已超时验证码登录,是否可以登录成功;
  24. 用户 session 失效后是否重新跳转登录页;
  25. 用户登出后,通过后退按钮,是否可以继续操作;
  26. 是否具有忘记密码功能,是否可用。
      
    OK,简单列出了一些,但是如果这时候要我给这套用例打个分的话,那我可以打个 80 分。一定有小伙伴要实名 diss 我了,已经这么全面了,还要什么?为什么只有 80 分?这就涉及我们今天讨论主题的第三个维度了,形容词 “优秀的”。

谈优秀的测试用例

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

数据日志测试

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

  • 数据库密码字段验证是否加密
  • 登录失败次数是否记录在数据库、缓存中,逻辑是否正确
  • 登录失败冻结等场景数据库是否正确修改状态
  • 错误日志是否完备,是否便于排查问题
  • 对象是否容易定位,便于自动化
  • 是否有增加埋点,进行用户行为分析

界面 UI 测试

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

  • 布局是否合理,是否对齐
  • 界面设计是否与需求、UI 设计文档一致
  • 是否有错别字、标点错误缺失
  • 页面颜色搭配是否得当
  • 错误文字是否明确易懂
  • 界面视觉效果是否恰当,界面动画展示是否流畅

兼容性测试

  • 不同操作系统下,是否可以兼容(Windows、MAC OS、LINUX)
  • 同一操作系统不同版本下,是否可以正常显示及功能正确性
  • 不同浏览器下(Chrome、IE、FireFox 等)下是否可以兼容
  • 同一浏览器不同版本下是否可以兼容
  • 移动端是否兼容
  • 放大缩小界面时是否兼容展示
  • 不同语言下,界面展示是否正确
  • 是否具有高对比读模式(为视力不好的人准备)

性能测试

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

  • 用户登录接口的最大并发数(响应时间 3s 内)
  • 特定负载测试下服务器的性能指标
  • 压力测试过程中服务的稳定性和性能指标
  • 服务的分布式处理逻辑,负载均衡逻辑、缓存及队列的使用
  • 能够支持的接口最大并发量
  • GC 处理,是否有内存溢出等情况
  • 高并发下数据库是否有慢 SQL 和死锁
  • 页面加载速度
  • 页面资源大小,是否应用雪碧图
  • YSLOW 分析,静态性能

安全测试

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

  • 验证关键数据通过 HTTP 还是 HTTPS 传输
  • 是否包含弱密码
  • 是否容易被暴力破解
  • 是否使用多因子认证
  • 登录是否采用互斥性验证
  • 产生的会话令牌(sessionID)强度
  • 传输中是否存在会话令牌泄露情况
  • 是否包含越权漏洞
  • 使用万能密码是否可以登录成功
  • 是否可以进行 SQL 盲注
  • 密码存储加密安全性
  • 是否具有 XSS(跨站脚本)攻击防御
  • 是否包含 CSRF 攻击漏洞
  • Token 或密码传输中防中间人攻击

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

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

全部资料获取:

在这里插入图片描述

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

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

相关文章

(免费分享)基于springboot,vue高校就业系统

管理员:10086/123 学生:10087/123 企业:10070/123 辅导员:10090/123 项目描述 高校就业管理系统 学生 : 个人信息、查看企业岗位信息、简历信息管理、我的应聘 辅导员 : 学生信息管理、三方协议书审核、查看班级就业统计信息 企…

App启动流程分析(一)

一、App启动涉及到的三个进程 1、Launcher进程:负责接收用户点击屏幕的事件,它其实就是一个Activity,屏幕上的各种Icon就是这个Activity中的Button,当点击Icon时,会触发启动App的流程。 2、SystemServer进程&#xff…

新手小白学JAVA_IDEA修改编辑与控制台字体大小

很多小白在刚刚使用IDEA的时候还不是很熟练 本文主要给大家提供一些使用的小技巧,希望能帮助到你 1.改变编辑窗口字体大小 1.1 将字体大小设置为固定值 我们可以将编辑窗口的字体大小设置为固定值 1.2 动态改变字体的大小 我们还可以通过Ctrl鼠标滚轮改变编辑窗口…

微信小程序怎么制作自己的小程序

小程序制作是指通过工具或开发语言制作微信平台上的小型应用程序,具有轻量、易用、无需下载安装等优点。随着移动互联网的飞速发展,小程序已经成为了各种企业和个人展示自己、提供服务的重要手段之一。 小程序制作的好处 小程序可以提高品牌曝光度。在…

SpringBoot + 规则引擎 URule,真的太强悍了!

一、背景 前段时间,在做项目重构的时候,遇到很多地方需要做很多的条件判断。当然可以用很多的if-else判断去解决,但是当时也不清楚怎么回事,就想玩点别的。于是乎,就去调研了规则引擎。 当然,市面上有很多…

Springboot 中RESTtemplate的使用

目录 一 概述 二 应用 1.get请求 2.post请求 一 概述 RESTtemplate提供了http请求连接的功能。spring 框架提供的 RestTemplate 类可用于在应用中调用 rest 服务,它简化了与 http 服务的通信方式,统一了 RESTful 的标准,封装了 http 链接…

行业报告 | 智能教育发展蓝皮书(下)

原创 | 文 BFT机器人 核心观点 Core point 在教育数字化转型的背景下,积极探索智能技术助力教学减负增效的实践路径,对于深化教育教学改革,促进学生全面发展、健康成长具有重要现实意义。 03 智能技术助力教学设计 教学设计以解决实际的教学…

【半监督语义分割 2023 CVPR】CCVC

【半监督语义分割 2023 CVPR】CCVC 论文题目:Conflict-Based Cross-View Consistency for Semi-Supervised Semantic Segmentation 中文题目:半监督语义分割的基于冲突的交叉视图一致性 论文链接:https://arxiv.org/abs/2303.01276 论文代码&…

Visual Basic 6 25 周年

Visual Basic 6.0 是 Visual Basic“经典”的最后一个版本(VB.NET 之前的版本)。它是迄今为止 32 位 Windows 95/NT 及更高版本最流行的版本。它非常受欢迎,并且仍在许多公司中使用。它于 1998 年中发布,与 5.0 版本相比在多个方面…

mysql-数据迁移

文章目录 1. 物理迁移1. 迁移前,配置mysql的输出目录1. 查看mysql的输出目录2. 修改mysql的输出目录 2. 文件迁移 1. 物理迁移 1. 迁移前,配置mysql的输出目录 1. 查看mysql的输出目录 在安装MySQL的会限制了导入与导出的目录权限。只允许在规定的目录…

基于.net core的微信小程序接入微信支付系列之环境搭建(1)

前言:c#语言本身是一门非常优雅的语言,但是在腾讯的api文档里面并不受到待见,所以只能靠自己看文档来逐步摸索,微信支付的逻辑看起来很复杂,其主要原因在于腾讯写文档的人可能是学体育专业的,简单的逻辑非要…

android Q /R/S/T onTopResumedActivityChanged方法解析

疑问背景: 在Android Q高版本,发现经常通过events日志来看Activity生命周期的时候,经常看到如下打印: 06-27 12:02:07.091 4812 4812 I wm_on_top_resumed_gained_called: [227500858,com.android.launcher3.uioverrides.Quic…

【LeetCode】动态规划 刷题训练(五)

文章目录 剑指 Offer II 091. 粉刷房子题目解析状态转移方程完整代码 309. 最佳买卖股票时机含冷冻期题目解析状态转移方程持有股票保持卖出股票卖出股票冷冻期 完整代码 714. 买卖股票的最佳时机含手续费题目解析状态转移方程f[i]状态转移方程g[i]状态转移方程 完整代码 剑指 …

强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解

【强化学习原理项目专栏】必看系列:单智能体、多智能体算法原理项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍:【强化学习原理项目专栏】必看系列:单智能体、多智能体算法原理项目实战、相关技巧…

最大收益(搜索好题)

题目描述 给一行n个数&#xff0c;每次可以取出行首或者行末的数&#xff0c;如果数ai是第j次取出的&#xff0c;可以得到ai*j的收益&#xff0c;求最大的总收益&#xff1b; 输入描述 Line 1: 整数 N&#xff08;1<N<2000&#xff09; Lines 2…N1: 第i个数的 a(i)&…

linux文件系统(目录)层次

本文主要内容来源和修改自 FHS 3.0 和 《鸟哥的私房菜基础学习篇&#xff08;第四版&#xff09;》 虽然 Linux 系统的发行版众多&#xff0c;但他们的目录配置却看起来都差不多&#xff0c;那是因为&#xff0c;大多数 Linux 发行版都遵循了文件系统层次结构标准&#xff08;…

centos7不能识别nvme固态硬盘,无法开机

前提是在机械硬盘已经安装过centos7系统了&#xff0c; 然后新增了一块nvme固态硬盘 其实原因也很简单&#xff0c; 旧版的centos7内核没有nvme驱动&#xff0c;需要更新内核&#xff0c;以下是我用ChatGPT解决的&#xff1a; 在 CentOS 7 中&#xff0c;NVMe 固态硬盘的驱动通…

vscode环境部署

编译cpp vscode安装2个插件&#xff0c;extension pack自动包了下面3个通过命令窗口code .打开代码目录&#xff0c;或者添加cl.exe路径到path&#xff0c;以及c需要的include和lib //在Path中添加cl.exe所在文件夹路径。若未找到&#xff0c;直接VS的安装目录下搜索cl.exe即…

下载好的eclipse的SSM项目导入IDEA配置运行过程(详细)

背景&#xff1a; 在网上下载一份SSM项目源码后&#xff0c;发现原项目是通过eclipse来开发的&#xff0c;但是个人喜欢使用IDEA来进行Java的开发&#xff0c;现在需要将这个SSM项目在IDEA上配置运行起来&#xff0c;下面就是记录一下整个配置过程&#xff01; 战胜 一、下载SS…

前端传递对象参数,以及后端接受参数 @PathVariable @RequestParam @RequestBody 注解的使用

太久没写前后端传递参数了,总是格式对不上号 前端传递对象参数,以及后端接受参数 一、接收参数注解 PathVariable二、接收参数注解 RequestParam2.1 get 请求,普通类型参数2.2 post 请求,普通类型参数 三、接收参数注解 RequestBodypost 请求,对象类型参数 总结 提示&#xff1…