5年软件测试工程师分享的自动化测试经验,一定要看
今天给大家分享一个华为的软件测试工程师分享的关于自动化测试的经验及干货。真的后悔太晚找他要了,
纯干货。一定要看完!
1.什么是自动化测试?
用程序测试程序,用代码取代思考,用脚本运行取代手工测试。自动化测试涵盖:功能(黑盒)自动化测试、功能(白盒)自动化测试、性能测试、压力测试、GUI(Graphical User Interface)测试、安全测试等。
我个人的理解:
自动化测试是测试思想的延伸,为测试工程师提供了“触手”。它的行为可以看作是一种工具,但本质上,自动化测试还是一种思想。
顺带一提,狭义的自动化测试是指基于GUI的自动化测试,以及单元测试和API测试,你有没有想过没有任何工具的情况下如何手工完成?因此,它们自然属于测试自动化的范畴。
2.自动化测试的优势
回归测试更方便可靠;可以运行越来越繁琐的测试,而且快速高效;可以执行一些很难或者不可能执行的手工测试,比如大量并发用户;更好的利用资源,具有一致性和可重复性,自动化测试脚本完全可重用;提高软件的可信度;在多个环境中进行测试等。
我个人的理解:
自动化测试的优点是成功完成自动化测试的结论,而自动化测试的缺点是建立自动化项目的基础。
另一个优点:自动化测试可以将产品知识固化成脚本,从而减少测试人员流动对项目的影响。但这种优势的前提是这些脚本容易维护,需要一些必要的文档,这是另外一个话题。
3.自动化测试做不到什么及其缺点
它永远无法完全取代人工测试。自动化测试无法达到手动测试的覆盖范围。不是每个测试用例都适合自动化。如果你提供页面布局是否正确的建议,手工测试会发现比自动化更多的缺陷。
与手工测试相比,自动测试几乎找不到新的缺陷,最大的目的是实现回归测试,保证以前的bug不会在新版本中重现;另外,自动化测试工具已死,它没有任何想象力;自动化测试的质量完全取决于测试工程师。成本高,风险大;对测试人员的技术要求高,对测试工具也有要求。
4.适当引入自动化
项目周期长,系统版本不变,需求不会频繁变化,适合在这个时候引入自动化测试。
系统的测试对象是否可以正常识别,对于无法识别的控件是否可以提供解决方案。
系统中没有太多无法识别的第三方控件。
成千上万的系统测试需要重复测试,如可靠性测试和回归测试。
5.不适合自动化
项目周期短,需求变化频繁。即使是长期项目,如果需求变化频繁,也不适合自动化。
如果软件版本不稳定,主要功能或大量功能可能会再次更改,不适合自动化;
项目测试自动化没有明确的计划、度量和管理。大多数对象无法识别,脚本维护频繁且困难。其中之一就是自动化会失败。
6.自动化测试过程
合理的自动化突破点:通常一个项目只有经过完整的系统测试,才能满足引入测试自动化的基本条件。
我个人的理解:
不管什么样的测试,越早介入越有利于降低成本和风险。随着新开发模式的兴起,自动化测试也具备了尽快介入的条件。比如在敏捷开发中,一个核心模块的核心功能完成后,就可以开始对该模块的这个功能进行自动测试。
7.测试自动化分析
(1)可行性分析;
(2)采样demo分析,demo一般选择冒烟测试用例,检查脚本是否能成功运行,设计的测试点是否全部执行;
(3)测试需求分析,哪些功能点做好了自动化的准备。
8.测试流程和设计
测试计划定制:自动化测试计划越全面,后期实施越有规律,自动化测试成功率越高。
计划跟不上变化,有时候太全面,未必是好事。
自动化测试设计阶段:主要分为自动化测试框架和自动化测试用例。
(1)自动化测试框架的设计、开发和构建:针对各个独立项目的无人值守测试框架,可以保证测试的分布式执行、脚本模块化、数据驱动、日志分析、错误截图、报表恢复、共享对象库、公共函数库、环境配置、统一设计模式、异常处理、场景恢复。
(2)自动测试用例设计三部曲:手动测试用例从零开始,然后根据手动测试用例编写自动测试用例。首先,筛选手动测试用例。然后转化手动测试用例,最后添加和补充自动测试用例。
9.为什么自动化测试用例不能完全取代手工测试?
自动化测试用例的范围往往是核心业务流程或者重复执行率高,自动化测试的覆盖率达不到手工测试的覆盖率。一般自动化测试的用例选择主要是正向的,但也有很多逆向的案例,但并不是所有的逆向案例都会被自动化测试覆盖,而是有一部分筛选。
并非所有的手动测试用例都可以用于自动化,例如检查页面布局。手动测试可能不需要回到原点,但自动测试往往是必要的。与手动测试用例不同,自动化测试用例不需要在每一步都写出预期的结果。
我个人的理解:
通常我做自动测试的时候会写一个测试用例叫做shake-down test。这个测试用例会遍历系统中所有完成的表单,只需做一个Navigate操作就可以保证一个页面是否可用。
每次回归测试之前,可以运行shake-down test一次,就可以快速确定哪些函数是accessible,相当于对整个系统做了一次冒烟测试。
10、测试脚本设计与开发
测试脚本可以大致分为:
(1)线性脚本:通过录制直接生成的线性可执行脚本
(2)结构化脚本:具有顺序、循环、分支等结构的脚本
(3)共享脚本:可以被多个测试用例使用并被其他脚本调用的脚本(即模块化脚本)
(4)数据驱动脚本:将测试数据从业务流程控制中分离出来,通过读取数据文件来驱动流程的脚本。
(5)关键字驱动脚本:脚本、数据和业务分离,数据和关键字在不同的数据表中,测试业务逻辑由关键字驱动。关键字驱动的特点是更像是描述一个测试用例在做什么,而不是如何做。
(6)混合脚本:上述任意两种或多种
11.自动化测试执行
(1)无人值守测试:环境建设、部署、配置;自动化测试用例绑定到测试脚本;自动测试用例执行顺序的排列和组合
(2)异常处理和场景恢复
提交自动化测试产品:大致需要提交实施状态、测试结果、分析报告、测试报告、质量状况等。
测试脚本维护:严格来说,测试脚本维护是分阶段进行的。不值得维护的自动化测试项目不值得建立。
能看到这,说明你是真心想好好学习自动化测试的,那么必须给爱学习的朋友分享一些资料
绵薄之力~
为了帮助大家迅速建立测试思维能力,早日斩获大厂Offer、掌握职场话语权,下面这份《软件测试全栈学习路线图》应该会对你很有帮助
从测试概念到最后的测试开发,希望大家能照着这个体系,在3-4年内完成这样一个体系的构建,可以说,这个过程会让你痛不欲生,但只要你熬过去了,以后的生活就会轻松很多,正所谓完事开头难,只要迈出了第一步,你就已经成功了一半,古人说的好:不积跬步无以至千里,等到完成之后在回顾这段路程的时候,你肯定会感慨良多,掌握了以上技术,在任何一线互联网大厂测试岗位都能独挡一面
下面是一些配套的资源,希望能帮到大家
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取
相关文章:

5年软件测试工程师分享的自动化测试经验,一定要看
今天给大家分享一个华为的软件测试工程师分享的关于自动化测试的经验及干货。真的后悔太晚找他要了, 纯干货。一定要看完! 1.什么是自动化测试? 用程序测试程序,用代码取代思考,用脚本运行取代手工测试。自动化测试涵…...

什么是猜疑心理?小猫测试网科普小作文
什么是猜疑心理?猜疑心理是说一个人心中想法偏离了客观事实,牵强附会,往往是指不好的一面,对别人的一言一行都充满了不良的解读,认为这些对自己都有针对性,目的性,对自己都是不利的。猜疑心理重…...
Redis命令行对常用数据结构String、list、set、zset、hash等增删改查操作
1.Redis命令的小套路 - NX:not exist - EX:expire - M:multi 2.基本操作 ①切换数据库 Redis默认有16个数据库。 115 # Set the number of databases. The default database is DB 0, you can select 116 # a different one on a per-con…...

mycobot 使用教程
(1) 树莓派4B ubuntu系统调整swap空间与使SD卡快速扩容参考:https://www.bilibili.com/read/cv14825069https://blog.csdn.net/weixin_45824920/article/details/114381292?spm1001.2101.3001.6650.1&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edef…...

JVM学习总结,虚拟机性能监控、故障处理工具:jps、jstat、jinfo、jmap、Visual VM、jstack等
上篇:JVM学习总结,全面介绍运行时数据区域、各类垃圾收集器的原理使用、内存分配回收策略 参考资料:《深入理解Java虚拟机》第三版 文章目录三,虚拟机性能监控、故障处理工具1)jps:虚拟机进程状况工具2&…...

指针笔记(指针数组和指向数组的指针,数组中a和a的区别等)
指针数组和指向数组的指针 int *p[4]和int (*p)[4]有何区别? 前者是一个指针数组,数组大小为4,每一个元素都是一个指向int的指针 后者是指向int[4]类型数组的指针 以上代码若运行会报如下错误 main函数中定义的a数组本质是一个指向int[2]的…...

MySQL ---基础概念
目录 餐前小饮:什么是服务器?什么是数据库服务器? 一、数据库服务软件 1. 常见数据库产品 2.如何开启和停止MySQL服务 二、数据库术语及语法 1.数据库术语 2.SQL语法结构 3.SQL 语法要点 三、SQL分类 1.数据定义语言(D…...

【基础】Flink -- ProcessFunction
Flink -- ProcessFunction处理函数概述处理函数基本处理函数 ProcessFunction按键分区处理函数 KeyedProcessFunction定时器与定时服务基于处理时间的分区处理函数基于事件时间的分区处理函数窗口处理函数 ProcessWindowFunction应用案例 -- Top N处理函数概述 为了使代码拥有…...

JavaEE|网络编程基础与Socket套接字
文章目录一、为什么需要网络编程二、什么是网络编程三、网络编程中的基本概念1.发送端和接收端2.请求和响应3.客户端和服务端4.常见的客户端服务端模型四、Socket套接字概念及分类1.概念2.分类1)流套接字:使用传输层TCP协议2)数据报套接字&am…...
【SpringBoot】基础协议及邮件配置整合
一、名词概念解释 什么是POP3、SMTP和IMAP? 简单的说:POP3和IMAP是用来从服务器上下载邮件的。SMTP适用于发送或中转信件时找到下一个目的地。所以我们发送邮件应该使用SMTP协议。 POP3、SMTP和IMAP协议介绍 IMAP和POP3有什么区别?什么是免费…...

pytorch配置—什么是CUDA,什么是CUDNN、在配置pytorch虚拟环境中遇到的问题、在安装gpu—pytorch中遇到的问题
1.什么是CUDA,什么是CUDNN (1)什么是CUDA CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 ࿰…...

jfr引起的一次jvm异常记录
业务生产启动时,20个节点有1-2个节点因为jvm问题出现启动失败,k8s自动重启后正常。在测试环境2个节点下偶现 排查思路: 先拿到hs_err_pid的jvm错误文件找到当前线程和内部错误信息 hs_err_pid 文件分析 当前线程:lettuce的线程…...

Java智慧校园平台源码:SaaS模式智慧校园运营云平台源码
校班务管理:评价管理: 1.web端/教师端小程序编辑点评 多元化评价,捕捉学生闪光点全方位评价,自定义评价类型、 评价信息实时推送至家长、AI智能点评 班级报表一键导出,智能评测学生在校表现,老师、家长实…...

【yolov5】将标注好的数据集进行划分(附完整可运行python代码)
问题描述 准备使用yolov5训练自己的模型,自己将下载的开源数据集按照自己的要求重新标注了一下,然后现在对其进行划分。 问题分析 划分数据集主要的步骤就是,首先要将数据集打乱顺序,然后按照一定的比例将其分为训练集…...
es-05分词器
文章目录分词器1 normalization:文档规范化,提高召回率2 字符过滤器(character filter):分词之前的预处理,过滤无用字符3 令牌过滤器(token filter):停用词、时态转换、大小写转换、…...

已解决zipfile.BadZipFile: File is not a zip file
已解决Python openpyxl 读取Excel文件,抛出异常zipfile.BadZipFile: File is not a zip file的正确解决,亲测有效!!! 文章目录报错问题报错翻译报错原因解决方法联系博主免费帮忙解决报错报错问题 一个小伙伴遇到问题跑…...

Mybatis源码分析:Mybatis的数据存储对象
前言:SQLSession是对JDBC的封装 一:SQLSession和JDBC的对照说明 左边是我们的客户端程序,右边是我们的MySQL数据仓,或者叫MySQL实例 Mybatis是对JDBC的封装,将JDBC封装成了一个核心的SQLSession对象 JDBC当中的核心对…...

学习 Python 之 Pygame 开发坦克大战(二)
学习 Python 之 Pygame 开发坦克大战(二)坦克大战的需求开始编写坦克大战1. 搭建主类框架2. 获取窗口中的事件3. 创建基类4. 初始化我方坦克类5. 完善我方坦克的移动5. 完善我方坦克的显示6. 在主类中加入我方坦克并完成坦克移动7. 初始化子弹类8. 完善子…...

短视频时代是靠什么赚钱的,介绍常见的5种方式,简单明了
目前,短视频越来越火热,大家都知道做短视频可以赚钱,那么究竟是靠什么赚钱的,又有几个人知道呢?短视频创业有个人、有团队,怎么实现团队的生存和发展。 常见的几种变现方式有: 1、平台分成 各…...
关于CentOS维护的几条简单命令
1、检查/etc/passwd这个文件里面有没有异常用户名2、通过命令top查看是否有异常进程,按M键对进程进行排序3、通过命令netstat -lnpt,查看是否有异常端口号4、通过命令ll -a /proc/PID,查看异常进程执行文件所在位置5、通过命令kill -9 PID&am…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...