8年测试总结,正确的自动化测试实施-单元/接口/Web自动化...

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

今天给大家分享自动化测试到底该怎么做?

1、软件测试三层金字塔

在讲自动化测试前,大家都知道软件测试的分层模型,“三层金字塔”,分为单元、服务和UI三个层级。

尽管大家对此的具体描述各不相同(有人将三层分别定义为单元、接口、集成测试;也有人将整个金字塔划分为4-5个层级),但金字塔自底向上的结构是大家公认和遵循的。

1)单元测试

单元测试是针对代码单元(通常是类/方法)的测试,单元测试的价值在于能提供最快的反馈,在开发过程中就可以对逻辑单元进行验证。

好的单元测试可以帮助改善既有设计,在团队掌握TDD的前提下,单元测试能辅助重构,帮助提升代码整洁度。

2)接口测试

接口(API)测试是针对业务接口进行的测试,主要测试内部接口功能实现是否完整。比如内部逻辑是否正常、异常处理是否正确。

接口测试关注的重点更多在于数据层面,如数据处理,数据状态,数据传递。

接口测试的主要价值在于接口定义相对稳定,不像界面或底层代码会经常发生变化,所以接口测试比较容易编写,用例的维护成本也相对较低。

在接口层面准备测试的性价比相对较高。手动进行接口测试的常用工具有Postman,浏览器F12调试工具。

3)UI测试

UI测试从用户的角度验证产品功能的正确性,测的是端到端的流程,并且加入用户场景和数据,验证整个过程是否流畅。

有时候在UI测试时,还会进行集成测试,集成测试的业务价值最高,它验证的是一个完整的流程,但因为需要验证完整流程,在环境部署、准备用例及实施等方面成本较高,实施起来并不容易。

2、自动化测试三种类型

前面我们了解到了软件测试的三层模型,所以自动化测试也是基于这三层模型进行展开的,我们可以在单元测试阶段进行单元自动化测试,接口测试阶段进行接口自动化测试,在UI测试阶段进行UI自动化测试。

1)单元自动化测试

因为单元测试关注的重点更多在于代码的实现与内部逻辑,所以要想进行单元自动化测试,对测试开发工程师的代码能力要求比较高。

对于不同的开发编程语言,有对应的单元测试框架,比如Java有Junit、testNG。C#有Nunit。Python有UnitTest、Pytest。Go有testing、GoConvey、GoStub、GoMock、GoMonkey。

运用这些测试框架,再结合一些自动化测试(脚本)平台,CI流水线运行单测插件等我们就可以进行单元自动化测试了。

2)接口自动化测试

接口自动化当中,可以构造三种接口自动化case,分别是单接口、场景、diff自动化case。

单接口自动化case顾名思义就是对单个接口构造自动化case,包含请求方式,接口名和接口路径,传参,预期返回结果。

在校验预期返回结果时通常是会进行断言,常用的断言方式可以选择键值对(键为返回的字段名,值为返回的数据),JSONSchema和Yaml。

场景自动化case则是将多个单接口自动化case根据业务场景集成起来,能够发现业务场景下的接口问题,比如超时,上下游异常等。

diff测试简单来说就是比对相同接口在不同版本/不同环境下面的返回内容是否符合预期,diff测试目前很多互联网大厂已经在采用,我们在写自动化case同样要构造diff自动化case,构造的方法和单接口自动化case相同,只是我们需要不同的环境URL地址进行对比。

如果使用Java语言,可选择TestNG或者RESTAssured作为测试管理框架,搭配Maven+HttpClient+Jenkins+Allure/ReportNG测试报告+MyBatis+mock+springboot可以开发一套基于Java的接口自动化测试平台。

如果使用Python语言,接口自动化测试管理框架可以是Pytest/Unitest/Airtest/RobotFramework四选一。
搭配Requests库+PyMySQL+Allure测试报告+Flask/Django可以开发一套基于Python的接口自动化测试平台。

3)UI自动化测试

无论是Web端还是App端,UI自动化测试都是基于页面元素的识别和定位来模拟用户行为。UI自动化测试工具常见的有Appium,Selenium,搭配Pytest或者Airtest测试管理框架,可以开发出一套UI自动化测试平台。

自动化测试是一种比手工测试更快发现问题的手段,它能够提高测试效率和质量,近几年来互联网大厂针对人工智能领域,利用机器学习和深度学习算法做了许多探索,如用例自动生成,问题自动分析等等,学会自动化测试还是很有必要性。

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

不论起点如何,只要心怀梦想,坚持努力,就能穿越困难,登上巅峰。勇往直前,超越自我,展现出属于自己的璀璨光芒,创造无限可能!

生命中最重要的,不是你遇到了什么,而是你如何去面对和解决。勇敢前行,坚持不懈,相信自己,你就能够征服全世界!

奋斗的路上,虽有艰辛与挫折,但只要心怀信念,坚持不懈,努力拼搏,就能超越自我,创造出属于自己的辉煌人生!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

苹果电脑Markdown写作工具:ulysses mac软件介绍

ulysses for mac是一款Markdown写作工具,支持Markdown拼写检查、语音识别、iCloud同步、版本管理等功能,并且可以导出为 PDF、word、RTF、TXT、Markdown、HTML 和 ePub等文件格式。 ulysses for mac软件介绍 适用于Mac,iPad和iPhone的终极写…

【码银送书第十一期】《自然语言生成SQL与知识图谱问答实战》

语义解析技术可以提高人机交互的效率和准确性,在自然语言处理、数据分析、智能客服、智能家居等领域都有广泛的应用前景。特别是在大数据时代,语义解析能够帮助企业更快速地从大量的数据中获取有用的信息,从而提高决策效率。 01 语义解析的应…

数据库:如何取消mysql的密码

因为调试MySQL数据接口,总是需要输入密码很烦,所以决定取消mysql的root密码, 网上推荐的有两种方法: 1、mysql命令 SET PASSWORD FOR rootlocalhostPASSWORD(); 2、运行 mysqladmin 命令 mysqladmin -u root -p password …

中国IT产经新闻:新能源汽车发展前景与燃油车的利弊之争

随着科技的进步和环保意识的提高,新能源汽车在全球范围内逐渐受到重视。然而,在新能源汽车迅速发展的同时,燃油车仍然占据着主导地位。本文将从新能源与燃油车的利弊、新能源汽车的发展前景两个方面进行分析,以期为读者提供全面的…

无线信号强度测试板/射频产品量产测试神器

目录 一、测试板特点 二、应用场景 三、芯片特点 四、测试板接口图 …

Freertos:

裸机编程通过中断实现不同任务的切换,实际上RTOS中通过不断更换CPU的使用权达到多任务运行的目的。FreeRTOS 中任务存在四种任务状态,分别为运行态、就绪态、阻塞态和挂起态。任务一般通过函数 vTaskSuspend()和函数 vTaskResums()进入和退出挂起态&…

为什么流不关闭会导致内存泄漏

引言 经常有人告诉你流用完要记得关,不然会导致内存泄漏,但你是否考虑过下面这些问题: 为什么流不关会导致内存泄漏?JVM不是有垃圾回收机制吗?这些引用我用完不就变垃圾了为什么不会被回收呢?流未关闭除了导致内存泄…

分布式(5)

目录 22.什么是Paxos算法?如何实现? 24.全局唯一ID有哪些实现方案? 25.数据库方式实现方案?有什么缺陷? 22.什么是Paxos算法?如何实现? Paxos算法是Lamport宗师提出的一种基于消息传递的分布…

【2024系统架构设计】 系统架构设计师第二版-通信系统架构设计理论与实践

目录 一 通信系统网络架构 二 网络构建的关键技术 三 网络构建和设计方法 四 案例分析 注:本节内容可作为知识储备,做一个基本的了解即可。

sonarqube配置本地扫描代码

一、本地maven设置setting文件&#xff1a; 1&#xff09;添加pluginGroup <pluginGroups><pluginGroup>org.sonarsource.scanner.maven</pluginGroup></pluginGroups> 2&#xff09;添加profile&#xff1a; <profile><id>sonar</i…

抓包神技--DPDK

DPDK&#xff0c;全称Data Plane Development Kit&#xff0c;是一个高性能的数据包处理工具集。估计有不少朋友使用过或者之前了解过&#xff0c;它通过绕过Linux内核协议栈&#xff0c;直接在用户空间进行数据包处理&#xff0c;大大提高了数据包处理的效率和吞吐量。 DPDK主…

Google Breakpad使用方法

源码下载地址&#xff1a;https://chromium.googlesource.com/breakpad/breakpad 依赖头文件下载地址&#xff1a; https://chromium.googlesource.com/linux-syscall-support Breakpad由三个主要组件&#xff1a; client 是一个库, 以library的形式内置在应用中&#xff0c…

可碧教你C++——位图

本章节是哈希的延申 可碧教你C——哈希http://t.csdnimg.cn/3R8TU 一文详解C——哈希 位图 位图是基于哈希表的原理产生的一种新的container——bitset 基于哈希映射的原理&#xff0c;我们在查找的时候&#xff0c;可以直接去定址到元素的具体位置&#xff0c;然后直接访问该…

池化层解析:简单易懂理解 PyTorch 中的核心组件

目录 torch.nn详解 nn.MaxPool1d nn.MaxPool2d nn.MaxPool3d nn.MaxUnpool1d nn.MaxUnpool2d nn.MaxUnpool3d nn.AvgPool1d nn.AvgPool2d nn.AvgPool3d nn.FractionalMaxPool2d nn.FractionalMaxPool3d nn.LPPool1d nn.LPPool2d nn.AdaptiveMaxPool1d nn.Adapt…

Springboot+RocketMQ通过事务消息优雅的实现订单支付功能

目录 1. 事务消息 1.1 RocketMQ事务消息的原理 1.2 RocketMQ订单支付功能设计 1. 事务消息 RocketMQ的事务消息&#xff0c;是指发送消息事件和其他事件需要同时成功或同时失败。比如银行转账&#xff0c; A银行的某账户要转一万元到B银行的某账户。A银行发送“B银行账户增加…

VirtualBox安装OpenEuler

VirtualBox安装OpenEuler 下载地址 virtualbox下载地址&#xff1a;https://www.virtualbox.org/wiki/Downloads openEuler下载地址&#xff1a;https://www.openeuler.org/zh/download/?versionopenEuler%2022.03%20LTS%20SP3安装virtualbox virtualbox安装penEuler点击新建 …

1-04C语言执行过程

一、概述 本小节主要讲解一个C程序从源代码到最终执行的过程&#xff0c;这个过程又可以细分为两部分&#xff1a; 源代码到可执行文件的过程可执行文件在内存中执行 本小节是C语言基础当中&#xff0c;比较容易被初学者忽视的知识点。而实际上&#xff1a; 熟悉C程序从源文…

高光谱分类论文解读分享之基于生成对抗性少数过采样的高光谱图像分类

IEEE TGRS 2022&#xff1a;基于生成对抗性少数过采样的高光谱图像分类 题目 Generative Adversarial Minority Oversampling for Spectral–Spatial Hyperspectral Image Classification 作者 Swalpa Kumar Roy , Student Member, IEEE, Juan M. Haut , Senior Member, IE…

kubernetes RBAC Authentication 详解

开头语 写在前面&#xff1a;如有问题&#xff0c;以你为准&#xff0c; 目前24年应届生&#xff0c;各位大佬轻喷&#xff0c;部分资料与图片来自网络 内容较长&#xff0c;页面右上角目录方便跳转 Kubernetes 安全架构 K8S安全控制框架主要由下面3个阶段进行控制&#xf…

React 类组件和函数组件

组件component 一.概念 Element VS Component (元素与组件) //不成文的约定:元素小写&#xff0c;组件大写 const divReact.createElement(div,...) 这是一个React元素(小写) const Div()>React.createElement(div,...) 这是一个React组件(大写) 什么是组件? 能跟其他…