深度解析自动化测试流程(纯干货)

news/2024/5/17 20:09:27/文章来源:https://blog.csdn.net/apex_eixl/article/details/133935454

最近很多小伙伴咨询自动化测试到底该怎么做?流程是什么样的?在每个阶段都需要注意什么?本文也就主要从自动化测试的基本流程入手,对面试自动化测试工程师的同学会有不少帮助。对于在职的朋友,也可以参考此流程,推进自己项目的自动化测试。

今天就通过这篇文章给大家深度解析一下自动化测试的流程。

自动化测试的流程和功能测试其实挺相似的,整个流程也是按照需求分析及测试计划阶段、测试设计阶段、测试执行和测试总结阶段,总结下来就是下面一张图,ppt中纯手绘,效果不好,大家见谅:

在这里插入图片描述

一、测试需求分析及计划阶段

自动化测试是要在手工测试之后进行的,也就是回归测试阶段,这时候其实是已经具备完善的功能测试用例啦,并且经过前期功能测试,系统版本也已经比较稳定啦,这就具备了自动化测试的必要条件,下面需要完成几个小任务:

1、抽样分析项目自动化测试的可行性

在进行项目自动化测试之前,第一步就是要确认其可行性,是否可以实行测试自动化。如果项目时间紧迫、项目周期短、项目需求变幻无常则建议和上级领导商议,不要开展自动化测试。想要开展自动化测试,还是应该遵循以下几个前提条件:

  • 软件需求变动不频繁
  • 项目周期足够长
  • 自动化测试脚本可重复使用

通过可行性分析后,接下来需要做一个demo ,使用选定的框架尝试识别页面元素,运行简易脚本,如果没问题,即可采用该框架对该项目进行自动化测试,常见的需要的验证的环境有:

  • WEB端的自动化测试采用python+selenium+unittest框架是否可行?
  • App端自动化测试采用Java+Appium+Junit框架是否可行?

在这里插入图片描述

2、测试需求分析

对系统的功能需求进行再次梳理,划分出可以进行自动化测试的需求,划分的标准一般是简单、重复性高、业务复杂度低的需求,这样便于我们快速地实现一个版本,从而建立推进自动化的信心。相反,选择了业务复杂的需求,则会花费大量的时间在脚本制作上,并且各种异常情况的处理,会严重打击我们推进自动化测试的积极性和信心,最后也就丧失了我们做自动化的初衷(自动化测试是不需要也没有必要做到 100%覆盖率的)。所以,在测试需求分析这个阶段,确定测试覆盖率以及自动化测试粒度、测试用例上的筛选等都是重点工作。

3、制定测试计划

理想情况下,测试始于测试目标和测试策略的建立,测试策略应满足测试目标的要求。管理层的测试计划包括评估完成所有测试活动的时间,测试活动安排及资源分配,控制测试过程以及跟踪整个测试过程所需采取的活动,这些高层次活动应该在项目开始前就实施,并贯穿项目的整个开发过程。

测试计划是测试过程中最重要的活动,包括如下活动:

  • 准入准出原则,确定什么时候可以开展自动化,达到什么标准,自动化项目可以结束
  • 测试范围,鉴别和确定测试需求的优先级
  • 进度安排,在什么时间交付什么成果
  • 人员安排,根据团队成员情况,技术好的复杂脚本实现;业务能力强的进行功能步骤拆解等
  • 风险评估,对项目过程中的风险进行预估

在这里插入图片描述

二、测试设计、开发阶段

本阶段主要的工作是测试用例的设计及脚本开发,一般情况下,我们是先进行测试用例的设计,在通过评定之后,保证测试用例已经覆盖了需求之后,再进行测试脚本的开发,这种方式是经过实践验证的,最为理想的做法。

1、测试用例设计

前面已经提到过,自动化测试用例不必从0开始,是完全可以从功能测试用例,通过筛选、简单修改就可以直接拿来用的,主要步骤为:

  • 筛选功能测试用例
  • 将其转化为自动化用例模板
  • 补充、修改不适于自动化的用例
  • 持续维护和优化自动化用例

筛选功能测试用例的标准参考如下:

  • 不是所有的手工测试用例都要转为自动化测试用例
  • 考虑到脚本开发的成本,不要选择流程太复杂的用例
  • 选择的用例最好可以构建成场景
  • 选取的用例可以是你认为是重复执行,很繁琐的部分
  • 选取的用例可以是主体流程,这部分适用于冒烟测试

在设计(补充、修改)自动化测试用例过程需要遵循的原则:

  • 一个用例为一个完整的场景,从用户登录系统到最终退出并关闭浏览器
  • 一个用例只验证一个功能点,不要试图在用户登录后把所有的功能都验证一遍
    尽可能少的编写逆向测试用例。
  • 用例和用例之间尽量避免产生依赖
  • 一条用例完成测试之后需要对测试场景进行还原,以免影响其它用例的执行

在这里插入图片描述

2、测试脚本开发

测试脚本开发包括创建具有可维护性、可重用性、简单性、健壮性的测试程序。同时要注意确保自动测试开发的结构化和一致性。根据已经开发好的测试用例,编写各个功能点的自动化测试脚本,并添加检查点,进行参数化。该过程还需要编写数据文件处理脚本、日志文件处理脚本、数据库处理脚本、公共检查点处理脚本等。

为了更好地团队合作进行自动化测试,我们需要对项目进行分层管理,可以根据需要划分公共模块部分、测试用例、测试数据、测试报告、测试日志等,并提供执行主模块。

在这里插入图片描述

其中公共模块可以包括:日志模块,邮件发送模块,公共登录、退出模块、数据库操作模块等,主要是便于测试用例中调用。

执行主模块主要负责所有测试用例调度的,可以参考如下代码:

import unittest
import time
from HTMLTestRunner import HTMLTestRunner
from public.mailsend1 import mailsend
from public.Loginmodel import verylogin,veryLogoutimport os
if __name__=='__main__':path1 = os.path.dirname(__file__)+r"/test_cases/"path2 = os.path.dirname(__file__)+r"/test_report/"send = mailsend()discover = unittest.defaultTestLoader.discover(path1,pattern='veryReg*.py')filename1 = time.strftime("%Y-%m-%d-%H-%M-%S")filename2 = filename1+r'.html'filename = path2+filename2with open(filename,'wb') as f:runner = HTMLTestRunner(stream=f,title='测试结果',description='第一轮测试结果')runner.run(discover)time.sleep(3)send.sendFujian(filename1)

最后为了生产一个可视化报告,我们可以选择二次开发的HTML格式报告

三、测试执行阶段

随着测试计划的建立和测试环境的搭建完毕,按照测试程序进度安排执行测试,可以通过手动或自动或半手动半自动方式执行,它们各自可以发现不同类型的错误。测试执行结束后,需要对测试结果进行比较、分析以及结果验证,得出测试报告(包括总结性报告和详细报告)。

如果脚本已经稳定,可以采用Jenkins工具进行持续集成,最终实现无人值守测试,集成方式

四、测试总结阶段

对测试结果文件中报告错误的记录进行分析,如果确实是由于被测系统的缺陷导致,则提交缺陷报告。对自动化测试的结果进行总结,分析系统存在的问题,并提交《测试报告》。

在这里插入图片描述

五、总结一下

1、自动化测试的局限性

在这里插入图片描述
对于自动化测试来说,不同的层次有不同的效率,项目中需要慎重考虑选择,按照测试金字塔模型以及投入/产出比,越向下,回报率越高。

  • 单元自动化测试(数据处理层):指对软件中最小的可测试单元进行检查和验证,一般需要借助单元测试框架,如java的Junit、TestNG,python的unittest、pytest;
  • 接口自动化测试(业务逻辑层):主要检查验证模块间的调用返回以及不同系统、服务间的数据交换,常见的接口测试工具有postman、jmeter、loadrunner等;
  • UI自动化测试(GUI界面层):UI层是用户使用产品的入口,所有功能通过这一层提供给用户,测试工作大多集中在这一层,常见的测试工具有UFT、Robot Framework、Selenium、Appium等;

以自动化测试行业领军者Google的自动化测试投入,不难看出那个梗有钱图:

  • 小测试(Unit):占比70%;
  • 中测试(Service):占比20%;
  • 大测试(UI):占比10%;

在这里插入图片描述
自动化测试面临的最大挑战就是变化,因为变化会导致测试用例运行失败,所以需要对自动化脚本不断debug,如何控制成本、降低成本是对自动化测试工具以及人员能力的挑战。

2、如何推进实施自动化测试

自动化测试是现在企业中级测试工程师所要求的基本技能,如果想在软件测试行业具备核心竞争力,就需要在这方面下点功夫,希望对面试自动化测试工程师的同学提供面试时候的思路。对于在职的朋友,提供推进自己项目的自动化测试的方法。

好了就先写到这里,文中还有很多不足之处,在后续持续维护更新。


最后

如果你想学习自动化测试,那么下面这套视频应该会帮到你很多

如何逼自己1个月学完自动化测试,学完即就业,小白也能信手拈来,拿走不谢,允许白嫖....

最后我这里给你们分享一下我所积累和整理的一些文档和学习资料,有需要直接领取就可以了!


以上内容,对于软件测试的朋友来说应该是最全面最完整的备战仓库了,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你。

​​

​​​​

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

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

相关文章

Apache Doris (四十五): Doris数据更新与删除 - Sequence 列

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. 基本原理

王道计算机考研 操作系统学习笔记篇章二: 进程管理

目录 进程与线程 进程的概念 概念 进程的组成 PCB 程序段、数据段 进程的特征 总结 进程的状态与转换 进程的状态 创建态、就绪态 运行态 阻塞态 终止态 进程的转换 进程的组织 链接方式 索引方式 总结 进程控制 什么是进程控制 如何实现进程控制 进程控制相关的原…

【1024程序员节】代码写诗(C++版)

#include <bits/stdc.h> #include <sal.h> using namespace std;class Sky { //天上 public:_Success_(return false) bool Sea(_In_opt_ int* Run) { //不复回int sea *Run;return false;} private:str…

【AI视野·今日CV 计算机视觉论文速览 第268期】Mon, 16 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Mon, 16 Oct 2023 Totally 61 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Vision-by-Language for Training-Free Compositional Image Retrieval Authors Shyamgopal Karthik, Karsten Roth, Massi…

家装、家居两不误,VR全景打造沉浸式家装体验

当下&#xff0c;用户对生活品质要求日益提升&#xff0c;越来越多的用户对多功能家装用品需求较大&#xff0c;由此造就了VR全景家装开始盛行。VR全景家装打破传统二维空间模式&#xff0c;通过视觉、交互等功能让用户更加真实、直观的体验和感受家居布置的效果。 一般来说&am…

PBA.常用人工智能预测分析算法

相同的数据型态&#xff0c;利用不同的方法分析&#xff0c;就可以解决不同的课题。例如目前已相当纯熟的人脸识别技术&#xff0c;在国防应用可以进行安保工作&#xff1b;企业可做员工门禁系统&#xff1b;可结合性别、年龄辨识让卖场进行市调分析&#xff0c;或结合追踪技术…

D-Link确认数据泄露:员工成为钓鱼攻击受害者

最近&#xff0c;台湾网络设备制造商D-Link确认了一起数据泄露事件&#xff0c;该事件导致公司员工成为钓鱼攻击的受害者。虽然公司表示泄露的数据属于“低敏感度和半公开信息”&#xff0c;但仍引发了公众的关注。让我们来看看事件的详细情况。 导语 近期&#xff0c;台湾网络…

小公司如何成功申请企业邮箱

对于小公司来说拥有专业的企业邮箱不仅有助于提升公司形象&#xff0c;还能有效提高工作效率。小公司怎么申请企业邮箱&#xff1f;以下是一些步骤和建议供您参考。 需要明确公司的需求。 这包括确定所需用户账户的数量&#xff08;一般是目前使用人数再加上几个备用的邮箱&…

c++_learning-并发与多线程

并发与多线程 并发&#xff1a;进程&#xff1a;线程&#xff1a;基本概念&#xff1a;线程安全&#xff1a;问题出现的场景&#xff1a;涉及的性质&#xff1a;如何保证线程安全&#xff1f; 并发的实现手段&#xff08;优先使用多线程并发&#xff09;&#xff1a;多进程并发…

Flutter开发GridView控件详解

GridView跟ListView很类似&#xff0c;Listview主要以列表形式显示数据&#xff0c;GridView则是以网格形式显示数据&#xff0c;掌握ListView使用方法后&#xff0c;会很轻松的掌握GridView的使用方法。 在某种界面设计中&#xff0c;如果需要很多个类似的控件整齐的排列&…

这4个网站太厉害了, 每一个都能帮你打开新世界大门

又是一期满满的干货&#xff01;今天给大家推荐几个小众但超好用的网站&#xff0c;每一个都能帮你打开新世界的大门&#xff01; 一、音分轨——在线人声分离网站 在线从任何音、视频中提取人声、伴奏和各种乐器&#xff0c;针对某一视频可以单独从里面提取人声或背景音乐&am…

JAVA反射(原理+使用)

引言 反射是一种机制&#xff0c;能够使java程序在运行过程中&#xff0c;检查&#xff0c;获取类的基本信息&#xff08;包&#xff0c;属性&#xff0c;方法等&#xff09;&#xff0c;并且可以操作对象的属性和方法 反射是框架实现的基础 反射的原理 讲述反射的原理之前&a…

Java并发面试题:(七)ThreadLocal原理和内存泄漏

ThreadLocal是什么&#xff1f; ThreadLocal是线程本地存储机制&#xff0c;可以将数据缓存在线程内部。ThreadLocal存储的变量在线程内共享的&#xff0c;在线程间又是隔离的。 ThreadLocal实现原理&#xff1f; ThreadLocal的底层是ThreadLocalMap&#xff0c;每个Thread都…

【算法学习】归并算法Merge Sort总结

归并排序思路简单&#xff0c;速度仅次于快速排序&#xff0c;为稳定排序算法&#xff0c;一般用于对总体无序&#xff0c;但是各子项相对有序的数列。 1. 基本思想 归并排序使用分治思想&#xff0c;分治模式下每一层递归有三个步骤&#xff1a; 分解&#xff08;divide)&a…

drawio都能做那些事情和模板示例

drawio都能做那些事情和模板示例 你可以使用drawio&#xff0c;并使用drawio提供的扩展模板库和大量的形状库&#xff0c;针对很多不同的工业领域创建不同类型的图表。 针对如下的内容中的所有的图&#xff0c;均可以下载源文件并导入到drawio中再次编辑&#xff08;供学习者…

初学C语言,写给自己的第一个实用程序

计算器&#xff1a;第一个实用程序 在 C 语言编程的学习之路上&#xff0c;同学们在了解基本概念&#xff0c;掌握基础语法之后&#xff0c;一定跃跃欲试想要给自己开发一款有意义的实用程序。 编程实现计算器是一个不错的选择。因为它难度适中&#xff0c;需要用到的知识又恰…

1814_ChibiOS中的时间以及时间间隔处理

全部学习汇总&#xff1a; GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 1. 时间的相关配置&#xff0c;有tick的计数精度、时钟频率、间隔时间精度、时间类型大小等不同的配置。这些参数&#xff0c;涉及到系统的时间计数…

SystemVerilog Assertions应用指南 Chapter1.31 在属性中使用形参

可以用定义形参( formal arguments)的方式来重用一些常用的属性。属性“arb”使用了4个形参,并且根据这些形参进行检验。其中还定义了特定的时钟。SVA允许使用属性的形参来定义时钟。这样,属性可以应用在使用不同时钟的相似设计模块中。同样的,时序延迟也可以参数化,这使得属性…

Pygame中实现图片的移动

在《Pygame中将鼠标形状设置为图片2-1》和《Pygame中将鼠标形状设置为图片2-2》中提到将鼠标设置为指定图片。接下来在该文章涉及到的代码基础之上&#xff0c;实现图片的移动&#xff0c;效果如图1所示。 图1 图片移动效果 从图1中可以看出&#xff0c;导入一个大猩猩的图片&…

设计师都有些常用的组件库?

Vue通常用于构建用户界面和单页应用程序。产品开发者可以从简单的组件开始创建&#xff0c;并逐渐衍生出更复杂的前端平台。通过合理应用UI组件库&#xff0c;设计师可以快速提高整体设计效率&#xff0c;更好地优化产品从外观结构到交互体验。本节将盘点9个常用的VueUI组件库。…