字节测试工程师总结的自动化测试10个最佳实践

news2024/11/17 1:46:21

虽然大家都知道坚果是非常健康和有营养的,但是,当你尝试吃它的时候,我猜测过程都不会很顺利。

现实就是那么相似,我们都知道测试自动化对软件开发有好处(就像坚果对我们的身体一样!),很遗憾很多公司在不考虑细微差别的情况下就赶着上线测试自动化。如果您不遵循一些规则,您可能会弄巧反拙。

为了避免这种情况,我尝试收集了 10 个测试自动化的最佳实践建议以供大家参考。

计划先行

无规矩不成方圆,做测试也是如此。自动化测试需要策略,策略需要详细的规划。计划在开发阶段将需要哪些测试和测试次数,目的是修复遇到的bug,还有发生错误的根本原因。开发完成之后,任然需要计划回顾,也就是常说的复盘会议,目的是减少重复错误的发生。

必工欲善其事必先利其器

自动化测试的本意是利用工具帮助测试工程师脱离繁杂而重复的细节,并加快测试过程。说到测试自动化的工具,包含了编写测试脚本、运行测试过程、汇总报告、分析问题、跟踪问题、修复bug和方便内部团队沟通的工具。

可见需要的工具名目众多,而且分阶段配合,也非常需要集成到统一的平台并便于成员理解各个阶段的作用和相互协调。

那么有哪些平台已经在做这些事情呢?

比如,Katalon、LambdaTest、Perfecto、Zebrunner等。

在项目早期就开始

团队首要任务其实是为了获取成果和企业赚取收益,团队产出的项目成果越早推向市场,越有机会为团队创造效益,毕竟剩下来的都是成本,软件行业最大的成本就在于劳动力的开销了。如果项目bug发现得越早并且修复完整,那么成果就容易得到主管层的认可,产品上市的门槛算是迈过了。

bug发现越早,留给工程师修复的时间也就越多,严重的问题更适合在项目早期就发现,后续跟进的同事也能对此类问题了解更全面。否则,等到工程代码堆积如屎山,待到何时休?唯有项目难产了。

合理利用虚拟环境和真实应用环境

软件的运行在发布到用户手里之前,可以在虚拟的环境里测试,虽然仅可以对功能测试,但是费用是非常廉价的,任何规模的企业都可以使用。

如果还需要测试产品的性能,获取实时数据,比如传感器、部件、网络信号强弱、电量等,必须要使用到真实的应用环境才可以达到目标。真实的应用环境往往需要购买特定的设备配合测试,这些设备还要考虑定期维护保养,所以成本也是一个很重要的因素了。

为了平衡测试目标和成本因素,虚拟环境和真实应用环境测试需要合理安排,做到平衡。

手动自动相互配合

凡是求个度,适度就是好,包括测试自动化。现时情况下,很多因素的作用,测试只能手动执行,所以将它们自动化是没有意义的,否则就是画蛇添足了。

首先,脚本无法模仿人类的所有行为和反应。其次,如果计划的测试只需只执行一次,那么没有必要为此写个自动化脚本,等写完脚本,花都谢了。

那么哪些测试非常适合实施自动化呢?下面做了个列表:

需要实施自动化的测试场景:
大量重复动作
操作大量数据
需要注意力比较集中的操作
需要兼顾各种运行平台的功能,比如不同操作系统、浏览器、硬件等
比较常用的功能

回归测试

在添加新功能后需要执行一轮测试用以检查功能是否正常工作,这样的测试就叫回归测试。

回归测试是需要重复执行的,所以自动化地执行并一遍又一遍地运行就显得很必要了。一般建议在回归测试套件种添加冒烟测试、完整性测试和测试用例,方便在测试周期中发现更多的bug。

端到端(E2E)测试

端到端 (E2E) 测试是从终端用户的角度出发,模拟他们在实际环境下使用应用程序的交互过程,可以确保应用程序按照产品要求运行和正确处理各种用户任务。E2E 测试自动化了用户的关键操作,使得软件的错误可以被快速发现和立刻修复,所以对软件发布时间的加快有很好的推动作用。

切忌独揽所有环节

试想下,你的团队里如果创建脚本、运行测试和维护它们的都是一个人,那么你的团队工作速度必然难以快速响应,改代码的速度也会受到影响,更可怕的是如果这人请病假或者离职了会导致所有的测试流程完全暂停,风险是很高的。所以提倡测试流程共享所有权。

如果每个成员都充分了解项目的测试阶段,他们或许可以为流程做出更多贡献。测试工程师如果都能共享测试脚本,那么其中优秀的知识和技能也能被传播到其他成员。还有,共享测试会使到测试过程更加透明。

预期和结果对比,效率最大化

上面提到测试需要计划,比如目标是什么类型的测试,预估编写测试脚本的工时,运行测试时长,重新发布测试版本软件要多久,再次启动测试过程,测试过程的覆盖率是多少等等,最终会有个总体的时间预估。

在测试工作结束后,对比一下预期的计划和实际的花费,为下一阶段的工作做好调整,目标是实现效率的最大化。

保持更新

测试的目的是为了筛选出问题,如果过时的测试导致假阳性或者假阴性的结果,会增加工程师分析和修复错误的时间,减低工作效率,最终还可能误导工程师发布带病的版本软件。虽然通过自动化测试提高了测试的覆盖率,但这是以测试结果准确为前提的。

所以在回归测试中,要及时删除过时的测试例程,更新对应的功能测试。

正在做测试的朋友可以进来交流,群里给大家整理了大量学习资料和面试题项目简历等等....

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

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

相关文章

【Redis】Redis五种常用数据类型的使用方法

文章目录 一、String数据类型1. SET/GET/APPEND/STRLEN2. INCR/DECR/INCRBY/DECRBY3. GETSET4. SETEX5. SETNX6. MSET/MGET/MSETNX 二、List数据类型1. LPUSH/LPUSHX/LRANGE2. LPOP/LLEN3. LREM/LSET/LINDEX/LTRIM4. LINSERT5. RPUSH/RPUSHX/RPOP/RPOPLPUSH 三、Hash数据类型&a…

【力扣】DP/贪心:1681. 最小不兼容性

【力扣】DP/贪心:1681. 最小不兼容性 文章目录 【力扣】DP/贪心:1681. 最小不兼容性1. 题目描述2. 解题2.1 不可行2.2 DP(预处理 状态压缩 动态规划) 参考 1. 题目描述 给你一个整数数组 nums​​​ 和一个整数 k 。你需要将这…

【C++】一文理清C++中的五种强制类型转换

深入理解C中五种强制类型转换的使用场景 一、C风格的强制类型转换 使用形式: Type b (Type)a;C风格的强制类型转换很容易理解,不管什么类型都可以直接进行转换。C也支持C风格的强制类型转换,但是C风格的强制类型转换可能会带来一些隐患&a…

2023.6.29-限定次数的循环操作

首先试着实现一个功能:键入一个整数,然后显示出这个整数个“*”: 代码: int a;printf("请输入一个整数:");scanf("%d",&a);while (a-- > 0)printf("*");printf("\n")…

模拟信号、数字信号

1、模拟信号、模拟电路 1)模拟信号 是指连续变化的电信号,比如说话时的声音信号。 模拟信号可以用连续的电压或电流来表示( 模拟信号就是电信号)数字信号则是用离散的电压或电流来表示(0 或 1) 2&#x…

ROS:常用命令汇总

目录 一、前言二、rosnode三、rostopic3.1rostopic list3.2rostopic pub3.3rostpic echo3.4rostopic info 四、rosservice4.1rosservice args4.2rosservice call 五、rosmsg5.1rosmsg package5.2rosmsg show 六、rossrv6.1rossrv package6.2rossrv show 七、rosparam7.1rospara…

CSDN | CDC 城市开发者联盟开始招募啦!

一、CDC(城市开发者联盟)介绍 CDC 是由 CSDN 发起的公益性同城高端开发者社区,全称 City Developers Community,通过在每个城市招募和培养“CDC 城市合伙人”,一起在当地构建“千城千面”的线下开发者社交圈&#xff…

arcserver图层数据导出插件

arcserver数据导出插件使用 下载地址:https://download.csdn.net/download/u011405698/87966050?spm1001.2014.3001.5503 如果需要代码或商业合作请联系公众号:世奇 插件不依赖其他第三方类库,只依赖arcpy,使用简单方便。可以…

C++标准模板库STL (未完)

概述 STLstandard template library是 C 标准库的一部分&#xff0c;无需单独安装&#xff0c;只需#include 头文件 什么是模板&#xff1f;见c面向对象程序设计中模板一节 顺序性容器 vector 向量 变长数组 声明 vector<类型名> 变量名[数组长度];类型名可以是已有…

社交商务时代已经到来,ss客服帮您抓住风口

社交商务时代已经到来&#xff0c;ss客服帮您抓住风口 近年来&#xff0c;社交媒体商务的概念已成为一股强大的力量。通过将社交媒体平台的影响力和影响力与在线购物的便利性相结合&#xff0c;它正在彻底改变企业与客户互动和销售产品或服务的方式。 什么是社交商务&#xf…

MyBatisPlus代码生成器插件

1、下载IDEA插件&#xff1a;MybatisPlus。 2、使用插件生成代码 首先点击IDEA导航菜单上的Other选项&#xff0c;然后进行数据库和代码生成器的配置&#xff1a; 数据库配置&#xff1a; 代码生成器配置&#xff0c;然后点击code generator&#xff1a; 最会插件会按照配置…

Timeout while checking target RAM, RAMCode did not respond in time

问题 使用jlink烧入gd32f450时&#xff0c;jlink提示错误Timeout while checking target RAM, RAMCode did not respond in time; 解决办法 原因是RAM的地址范围错误&#xff0c;默认选择gd32f450vi的ram大小是512k&#xff0c;但是该芯片中的ram并不连续&#xff0c;其中64…

C++ 动态内存

了解动态内存在 C 中是如何工作的是成为一名合格的 C 程序员必不可少的。C 程序中的内存分为两个部分&#xff1a; 栈&#xff1a;在函数内部声明的所有变量都将占用栈内存。堆&#xff1a;这是程序中未使用的内存&#xff0c;在程序运行时可用于动态分配内存。 很多时候&…

【C/C++】类成员函数指针 定义 使用方法

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

使用conda虚拟环境,Jupyter Notebook 链接不上 kernel

1&#xff0c;检查 ipykernel 和 ipython 是否一致 输入pip list 或者conda list检查一下相应库的版本是不一致 不一致的话&#xff0c;可以更新这两个库的版本&#xff1a;pip install --upgrade 库名 2&#xff0c;看控制台的报错&#xff0c;如果是报404&#xff0c;内核找不…

leetcode 145. 二叉树的后序遍历

2023.6.24 继上一题前序遍历&#xff0c;这道后序遍历就很容易了&#xff0c;把递归的顺序稍微改一下就行。 递归法&#xff1a; class Solution { public:void travelsal(TreeNode* cur , vector<int>& ans){if(cur nullptr) return;travelsal(cur->left , an…

如何设计真正高性能高并发分布式系统?

1 、引子 软件复杂性来源于几个方面&#xff1a;高并发高性能、高可用、可扩展、低成本、低规模、可维护、安全等。架构演化、发展都是为了试图降低复杂性&#xff1a; 高并发、高性能&#xff1a;互联网系统特点&#xff0c;用户量大&#xff0c;请求量大&#xff0c;高并发高…

NLP学习笔记(二)

文章目录 &#xff08;一&#xff09;负采样&#xff08;二&#xff09;GloVe1.带全局语料库的跳元模型2.GloVe模型3.问题4.跳元模型与GloVe模型的比较 &#xff08;三&#xff09;问题1.参数初始化2.梯度下降3.下游任务4.句法信息5.似然估计6.词向量表示 &#xff08;一&#…

MySQL基础篇(day04,复习自用)

MySQL第四天 单行函数内容练习 聚合函数内容练习 单行函数 内容 #第七章 单行函数 SELECT ABS(-123),ABS(32),SIGN(-23),SIGN(43),PI(),CEIL(32.32),CEILING(-43.23),FLOOR(32.32), FLOOR(-43.23),MOD(12,5) FROM DUAL;#取随机数 SELECT RAND(),RAND(),RAND(10),RAND(10),RAND…

亚马逊开店卖什么好呢?有哪些热销产品推荐?

现如今提起跨境电商&#xff0c;人们首先会想到亚马逊平台&#xff0c;作为利润的核心&#xff0c;其发展与优势都是有目共睹的&#xff0c;所以引来了大批的创业者前往亚马逊开店&#xff0c;然而在亚马逊开店后&#xff0c;首先想到的问题就是卖什么产品好&#xff1f;什么产…