测试用例该怎么设计?—— 日常加更篇(下)

news2024/11/17 2:42:06

在这里插入图片描述

 
 

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。
📡主页地址:【Austin_zhai】
🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。
💎声明:博主日常工作较为繁忙,文章会不定期更新,各类行业或职场问题欢迎大家私信,有空必回。

在这里插入图片描述

 
 

阅读目录

  • 1. 目的
  • 2. 写好自动化测试用例的因素
    • 2.1 万物皆对象
    • 2.2 业务强关联
    • 2.3 正向场景
    • 2.4 多场景构建
    • 2.5 强针对性
    • 2.6 独立测试功能点
    • 2.7 完整设计
  • 3. 题外话

1. 目的

  之前我们介绍了要写好黑盒测试用例的一些相关因素,相信大家应该能从其中或多或少的感悟到各自对于黑盒测试的全新理解与思路拓展。那么紧接着之前的内容,我们就该详细的聊一聊另一种形式的测试用例了,它在我们的自动化测试活动中也扮演着举足轻重的角色。

 
 

2. 写好自动化测试用例的因素

  因自动化测试的种类比较繁多,故相关的自动化测试用例的设计方法、呈现方式、执行过程也是五花八门。那我们就在其中挑几种比较主流的来进行讨论,其中也可能不免会有一些不同之处,大家可以按需斟酌阅读。

  那么开正式开始介绍之前,我们需要搞明白自动化测试的必要性和存在意义,其中最浅显的一点就是可以提高我们的测试效率,因为是机器来帮我们执行测试活动,这个观点当然没错,但也还是有很多的公司仍然停留在这个认知层面中,就如我之前的一篇文章内阐述过,很多公司或团队仍然会以KPI或晋升目标作为动机来开展自动化测试和与之相关的建设活动。这个也就是我们圈内说的,“为了自动化而自动化”。在这样的大基调下,自动化能带给我们的益处与提升是什么,也就不得而知了,更多的则是人力与时间成本的大幅消耗与极为不成正比的投入产出比。

  博主自己所理解的自动化测试的存在意义就四个层面来说分为:公司、产品、团队、个人。首先就公司而言,投入自动化测试的本质其实是要降本增效,这里大概会有人提出疑问,怎么会是降本呢?无论是招聘专业人员还是投入对应硬件,怎么看都是增本呀。其实这里有一个误区,就我们个人而言,看到的现象的确如此,但对于公司来说,只要是有明确的战略目标、长足的远见规划以及一定的投入,从长远来看这其实是一笔稳赚不亏的决定。这里就要结合我们的第二个层面的“产品”来说一说了。众所周知,在互联网行业中,无论是同行业亦或是跨行业,软件的激烈竞争从来就未停歇过,一款产品的及时面世与稳定迭代更新,更是抢占有效市场的先决条件。试想一下,一家仅靠纯手工测试的产品,能做到上述的要求吗?毕竟人为的工作还是具有一定的不确定性的,这个和执行者的情绪、环境、主观想法、惰性有着密不可分的关系,任何一个因素都有可能影响整个产品的质量表现。所以公司的前期投入是显性投入,但后期的自动化测试亦或是更近一层的CI/CD带来的收益则都是隐性的,可能最后大家真正能见到的将会是产品销量、收益的增长。当然,不是投入了自动化测试就一定会让产品的质量与销量取得成功,其中的很多因素都必须明确并选择正确。诸如投入后解决什么样的问题或矛盾、技术栈的选择、框架的设计、日常维护、专人专岗、硬件支撑、投入产出比的审查、后期优化等等等等。

  对于团队来说,拥有自动化测试能力无疑会让团队的外界评价更上一个层次,现在业界内对于测试人员的要求越来越高,大家都有目共睹。一个只有手工测试人员的团队与可长期稳定支撑开发人员且能自主执行自动化测试活动的团队,不用我说也就高下立见了。也正因如此,专业的团队可以在公司内拿到更多更好的资源也就无可厚非,有了这些实质性的支撑,相信团队的规模亦或是实力也将会是越来越强。那么在个人层面上,掌握了自动化测试能力,无疑是增加了自己的一份核心竞争力,增强竞争力的根本出发点,无非就是让我们可以在测试的道路上走的更稳更远,升职加薪自不必多说。再则加上如今AI、大数据依然成为了主流趋势,一个没有编程能力并且没有设计理念的测试,必然会被社会与时代淘汰。

 

2.1 万物皆对象

在这里插入图片描述
  学过java或python的同学应该都知道这句话吧,没错,在我们设计自动化测试用例的时候也需要这个理念。毕竟和黑盒测试用例不同,自动化测试用例不是给人类执行的,我们需要使用对应的开发语言来进行用例的编写。在编写测试用例脚本的时候,时时刻刻需要把这个理念贯彻其中。当然,编写用例的过程与其他开发人员的编码工作没有什么本质上的区别,也别指望用例脚本可以一次性的编写到位,脚本大多数都是需要一次又一次的优化,起初写的效率低一点也没关系,我们先确保可以跑通,复用性和健壮性可以稍微差点。但是跑通之后,我们就应该着眼于性能方面,如果你用的python,跑几条用例是完全没有问题的,因为python是动态语言,变量指向对象的时候编译器无法做任何预测,另外加上他本身是解释执行,所以是在跑大量测试用例的情况下,一定会出现运行周期时间长与意外报错的情况出现,此时提高代码的性能就成为了重中之重,算法时间复杂度的优化、内置方法的合理使用、避免全局变量、减少循环等等都可以为我们的代码提供相应的性能提升。

 

2.2 业务强关联

在这里插入图片描述
  与黑盒测试用例不同,自动化测试用例内的业务关联性会很强。其实我们从其本质形态来考虑的话也就能探究一二,它需要解决的本来就是一些功能稳定、业务路径明确的正向测试场景,测试用例脚本不可能只操作某个业务界面中的某一个功能,这样就太浪费了。一般来说测试脚本都需要覆盖某一个正常业务的整条流程,这样我们才可以在其运行的过程中,加入自己所需的各类断言,来验证多条用例中的测试预期结果。另外由于和黑盒测试用例的本质不同,也就更好的印证了自动化测试用例可以快速进行业务验证与归回、冒烟。

 

2.3 正向场景

在这里插入图片描述

  对于自动化测试来说,最恐怖的情形就是将所有的正向、逆向测试场景一股脑的塞进自动化测试框架。有些人会本能的认为既然是自动化执行,为什么不可以执行逆向测试用例呢?只要设计好合适的参数、编写进测试用例真的就万无一失了吗?其实逆向测试场景与测试用例被适合放入自动化测试的原因就在于它本身的不确定性,这种不确定性会影响自动化测试的最终运行结果。做过自动化测试的同学都知道,对于执行自动化测试来说真正可怕的不是逆向测试用例,而是那种不知道什么时候就会报错的测试场景和用例,而这种测试用例的所在场景,绝大多数会出现在逆向测试场景中。我们要知道自动化测试不是帮测试人员把什么事情都干了。所以针对功能稳定、需求变动不多的正向测试场景,我们可以放心的将自动化测试投入其中,但逆向的测试场景就不建议如此操作了。如果真的要放,也只建议放入比较不重要的功能模块,一些业务复杂和重要的功能模块的逆向场景还是需要经验丰富的测试人员去进行手工确认来的更为的稳妥。一般来说自动化测试主要覆盖产品的主体happy path即可,无需设计过多的逆向场景在其中,影响自动化测试活动的稳定性。不要忘记了,自动化测试的主要作用还是让我们的测试人员从繁杂重复的测试工作中脱离出来,把精力投入更重要、更复杂的模块和业务测试中去。

 

2.4 多场景构建

在这里插入图片描述

  这里的多场景构建理念是希望可以充分的利用自动化测试的优势,以更少的运行次数来尽可能的覆盖更多的测试场景。举个例子,一个自动化测试脚本中存在多条测试用例,那么我们在设计用例的过程中需要充分的利用脚本中的业务界面,来进行多个场景的组合构建。诸如CRM,我们都会在客户信息界面中验证客户的各类信息、增删改查操作,而这些操作如果可能尽量放在页面的一次性操作中,除非和后面的业务有强关联(后续操作的必要数据),否则基本都是按照这个原则。这也就是上面说的尽量在一遍中将可以验证的业务场景组合在一起,而非跑多轮同样的业务线却只是验证的测试点不同。

 

2.5 强针对性

在这里插入图片描述

  一般来说,我们设计自动化测试用例,来源的基础都是我们之前设计的黑盒测试用例,普遍的做法是将P0与P1级别的正向测试用例加入到自动化测试用例中。这样做是完全没有问题的,不过我们还需要注意的是,针对不同的测试类型,我们的自动化测试用例不是一成不变的。例如自动化测试中最常配到的冒烟和回归测试,这两类的自动化测试用例就不应该相同。冒烟测试的测试用例应该更倾向于快速的将主流程进行验证,确保当前版本的提测质量值得开展接下去的测试活动,也更注重于老用例的套用。回归测试则是针对部分功能修复后对于整体功能与延展部分模块的正常运行是否会有影响,这块需要在已修复的功能模块和测试认为有必要开展的相关模块间开展自动化测试,所以自动化测试用例会有和冒烟部分重叠的情况出现,同时也会新增用于确认相关延展部分的功能正常运行的用例。

 

2.6 独立测试功能点

在这里插入图片描述

  这个也很好理解,和黑盒测试用例没有区别,虽然脚本里会设计某个页面当前整体的线性业务操作,但是我们仍旧要确保好每条自动化测试用例中只验证一个功能点,切不可图方便把一条用例中放入多个功能点进行确认。这时一定有人会问,我多放几个断言不就可以进行多功能确认了吗?其实这个观点是违背了测试用例设计的初衷的,多个断言自然可以判断多个功能点,但大家试想一下,一条测试用例中有多个验证点是否会让用例本身的步骤变多,且无法拆解,这个和写黑盒测试用例不一样的地方就在于你的代码是无法独立拆解出来的。那么接下来的问题就是同样是测试用例,是一堆组合后的测试用例复用度高?还是独立测试功能点的用例复用度高?大家都不用细想,答案就已经很明显了。就好比是乐高积木,如果需要你设计一座城堡,是一整块不规则形状的大积木好还是一小块一小块规整的小积木好?

 

2.7 完整设计

在这里插入图片描述
  我们除了设计基本的测试用例之外,同样也可以利用自动化的优势来进行一些额外的用例扩展设计。在日常工作中,我们的自动化测试也不是只要设计相关的功能测试点即可的,这里还包括了相关的一些测试数据操作。那么测试数据的前后置操作也就理所当然的变成了设计测试用例中必须的步骤之一了。在黑盒测试中,我们的测试数据都会在我们执行前定义或创建好,在执行的过程中就会比较的顺畅。而自动化测试中,这个操作我们就无需再手动提前进行操作了,一般来说我们会把需要生成的测试数据提前的放入某个独立的测试用例内进行预先创建,这个称为前置操作,其实也就是我们所说的前提条件。而同样的,我们在执行完某些操作或业务流之后,也可以将这些测试数据进行回收、删除,这被称为后置操作。这样我们就可以时刻保证我们的测试环境可以重复的进行同样的测试用例而不会担心环境或数据等因素发生改变。另外,因为我们的测试过程是“过不留痕”,所以在重要的用例与断言处可以使用截图函数、打印日志等方式留下测试证据,以便在出现Bug时方便排查与定位。

  好了,以上就是关于自动化测试用例的一些设计因素与心得,希望可以帮助到大家更好的总结出各自的心得体验。

 
 

3. 题外话

  之前有收到一个测试同学的意见,说博主的有些文章很干,这个干不是干货的干。。。。 而是看博主文章的同时不喝点水貌似看不下去😆。(开个玩笑)

  说内容虽然好,但整体略显单调,他在面对大篇文字类的技术文章有时会有点眼花,建议最好能在文章的段落之间配些图片什么的。真的非常感谢这位同学的意见,其实博主也在琢磨着如何让技术文章变得丰富有趣起来,但实在无奈品味与才艺有限。。。。。。不然也不干技术了不是?哈哈哈,这次就先尝试着在文章内加入一些穿插的图片试试,看看效果,也希望大家可以评论或私信告诉我🙋,你们看下来的整体效果如何?

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

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

相关文章

Revit教程:怎么关掉工具栏的实时提示?

一、Revit中如何关闭工具栏的实时帮助提示 如图1所示,Revit会对每一个命令有一个简单的图文说明,方便不熟悉软件的用户使用。对于已经熟悉软件的用户,会觉得鼠标在菜单上悬停时弹出的实时帮助页面很干扰使用,而且很占内存资源&…

ESP-C3入门10. 创建TCP Client

ESP-C3入门10. 创建TCP Client一、创建 tcp client的一般步骤1. 创建 tcp 套接字2. 配置服务器地址3. 连接服务器4. 发送数据5. 接收数据6. 关闭套接字二、创建tcp_client任务三、示例代码1. tcpClient.h2. tcpClient.c3. main.c一、创建 tcp client的一般步骤 本文示例使用的…

【Redis】Redis 常用数据类型操作 ① ( 数据库操作 | Redis 数据库连接参数 | Redis 数据库个数 | Redis 访问机制 )

文章目录一、Redis 数据库连接参数二、Redis 数据库个数三、Redis 访问机制一、Redis 数据库连接参数 连接 Redis 数据库 , 只需要 IP 地址 , 端口号 , 访问密码 即可 , 如果没有 设置 访问密码 可忽略该选项 ; Redis 默认端口号是 6379 ; 参考 【Redis】Redis 数据库 安装、…

【C语言学习笔记】:折叠表达式

在C中通过折叠表达式可以更容易的在可变参数模板中处理可变参数。 先看一下传统的使用递归方式来处理可变参数的代码&#xff1a; #include <iostream>void print(int i) { std::cout << i << " ";}void func() {}template<typename T1, t…

C++为什么能重夺年度语言?

目录一、爷青回1、年初依旧很多大新闻&#xff0c;其中一条就是TIOBE把年度编程语言颁给了C。2、这是什么概念&#xff1f;那一年Java的流行指数是14%。二、C为什么衰落三、C为什么重新流行1、C为什么重新流行起来了呢&#xff1f;2、C究竟做对了什么呢&#xff1f;3、根本原因…

Python入门自学进阶-Web框架——31、开发客户报名流程

完成客户报名的流程流程大体如下&#xff1a;在已有收集的客户信息基础上——>销售填写报名表&#xff08;报什么班、课程顾问&#xff09;——>自动生成一个链接&#xff0c;让学员填写——>学员填写个人信息&#xff0c;并上传身份照片&#xff0c;同意合同协议——…

墨天轮【第二届数据库掌门人论坛】圆满收官 | 含嘉宾精彩观点回顾

2月10日上午&#xff0c;墨天轮【2023春季发布会暨第二届数据库掌门人论坛】盛大开启&#xff0c;本次活动的主题为“新征程&#xff0c;向未来”&#xff0c;共包含2022年度中国数据库颁奖盛典、2022年度行业发展报告发布以及第二届数据库掌门人论坛三项议程。华为云数据库服务…

win10-右键打开windows terminal

文章目录windows terminal设置右键打开打开注册表添加一个右键选项新建一个项添加右键的名称和图标右键选项执行的命令测试windows terminal windows 新一代命命令行 设置右键打开 打开注册表 WinR 输入&#xff1a; regedit 定位&#xff1a; 计算机\HKEY_CLASSES_ROOT\Di…

中国第一份ERP系统用户实名口碑选型报告(选型宝重磅发布!)

01 报告目录 一、 报告概况 二、 ERP类厂商-用户实名口碑排行 三、 ERP类产品-用户实名口碑对比 四、 主流ERP产品简介 五、 ERP常用功能 六、 算法说明 七、 联系选型宝 02 报告概述 一、报告亮点 这是一份完全由用户实名点评生成的ERP系统选型报告。 报告由选…

关于 Eclipse 的一场 “三角关系”

上个世纪 90 年代&#xff0c;世界上的计算机要么不联网&#xff0c;要么在企业内部联网。但是&#xff0c;在互联网的概念下&#xff0c;计算机之间共享信息和资源的需求成为了必要。 1995 年 5 月&#xff0c;Java 横空出世。Java 的父亲是当时凭借 Solaris 操作系统风头正盛…

2023-02-16 学习记录--React-邂逅Redux(三)

React-邂逅Redux&#xff08;三&#xff09; “天道酬勤&#xff0c;与君共勉”——承接React-邂逅Redux&#xff08;二&#xff09;&#xff0c;让我们一起继续探索Redux的奥秘吧~☺️【今日新知识——异步action】 一、什么是异步action&#xff1f; action有两种形式&#x…

C#:Krypton控件使用方法详解(第二讲) ——kryptonCheckBox

今天介绍的Krypton控件中的kryptonCheckBox&#xff0c;这个控件和VS中带的CheckBox控件还是不一样的&#xff0c;下面介绍这个控件。kryptonCheckBox控件的外观属性如下图所示&#xff1a;Checked属性&#xff1a;对应的属性值为Bool类型有两个&#xff0c;当属性值为true时kr…

DHCP协议

DHCP协议 文章目录DHCP协议DHCP作用及特点DHCP服务IP分配的三种方式DHCP协议中的报文类型DHCP服务工作流程抓包参考动态主机配置协议 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;&#xff0c;提供了一种 插网即用的技术。DHCP是一个应用层协议。当我们将…

CANoe仿真工程开发

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、网络拓扑图二、数据库文件设计四、Panel设计五、CAPL代码实现六、Automation Sequences七、分析窗口设置八、Trace窗口与Logging九、Desktop布局十、工程运行…

【算法 | 例题简答】相关例题讲解

目录 简答题 计算题 时间复杂度的计算 递归算法计算 背包问题&#xff08;0-1背包问题&#xff09; 回溯法 动态规划法 编程题 用回溯法解方程 动态规划法解决蜘蛛吃蚊子 用分治法解决抛硬币问题 用二分法分两边求最大值 简答题 1、什么是算法&#xff1f;算法有哪…

Revit问题:Navisworks中导入的rvt模型角度不正确调整

一、Navisworks中导入的rvt模型角度不正确调整方法 通常情况下&#xff0c;我们做好一个Revit模型&#xff0c;有时候出于成果保护或者鉴于Revit自带的碰撞检测效果不够直观、Revit模型体量太大&#xff0c;需要一个轻量化的模型展示&#xff0c;我们通常情况下会使用Autodesk公…

【python】基于Socket的聊天室Python开发

基于Socket的聊天室Python开发一、Socket简述二、创建服务端Server2.1 创建服务端初始化2.2 监听客户端连接2.3 处理客户端消息三、创建客户端Client3.1 创建服务端初始化3.2 发送消息3.3 接收消息3.3 线程工作3.4 线程工作是不是挺好玩的呢&#xff1f;也可以作为课程设计哦&a…

【C++】Expression的学习笔记

关于不同类别表达式的举例&#xff0c;请参考博文《C 中的值类别》 1. 左值和右值的简单理解 左值对应了具有内存地址的对象&#xff0c;而右值仅仅是临时使用的值对象。&#xff08;引用自博文《C 中的值类别》&#xff09;左值有名称&#xff08;变量或常量名称&#xff09…

RFC7519规范-JWT - json web token

简介 什么是JWT(JSON Web Token) 在介绍JWT之前&#xff0c;我们先来回顾一下利用token进行用户身份验证的流程&#xff1a; 客户端使用用户名和密码请求登录服务端收到请求&#xff0c;验证用户名和密码验证成功后&#xff0c;服务端会签发一个token&#xff0c;再把这个to…

mybatis-spring-boot-starter中设定多数据源,并实现Durid的监控

实现功能&#xff1a; 1&#xff1a; 配置两个数据源&#xff0c;根据不同的mapper路径使用不同的数据连接 2 &#xff1a;使用Druid连接池 3&#xff1a;Druid 可监控多个数据源的sql执行操作 分析&#xff1a; 查看mybatis_spring_boot_stater中关于自动装配的类可知【如上…