3分钟看完-丄-Python自动化测试【项目实战解析】经验分享
目录:导读
引言
自动化测试
背景
测试团队
测试体系发展
测试平台
自动化测试现状
现状一:
现状二:
现状三:
现状四:
现状五:
现状六:
失败的背景
失败的经历
失败总结
引言
内容已经有了,但是标题想了很久,最终还是决定用这个。简单清楚明了——总结一场失败的自动化测试案例。
文笔欠佳,如有阅读不适,请见谅!
自动化测试
如今,软件测试行业里,人人都在讲自动化测试,人人都在做自动化测试。如果谁说自己不会自动化测试,都不好意思去面试。现在各大公司招聘信息都是必须会自动化测试,一部分公司招人只招测试开发。甚至有些大头公司都不分测试与开发两个职位。
所以,绝大部分公司都有人在搞自动化测试,甚至有一部分公司有一套成熟的自动化测试体系。你可以把它看成标准化流水线,类似现在讲的Devops。
这里,我讲的当然是我在公司的一次自动化测试体会。由于保密协议,这里简单介绍:
背景
公司是一线大厂的子公司,也可以称为合作伙伴。 类似华为旗下的荣耀。公司去年年初,由于业务越来越繁多,所以人员也是疯狂扩展,所以迭代相当频繁,标准是一周一个迭代,紧急小迭代,也有过两三天的时候。有人会说怎么做到的?
拼人啊,加班啊。
测试团队
先说我们测试团队吧,扩展后测试团队人数大概是40左右,其中职位有自动化测试,测试开发,性能测试,安全测试。唯独没有测试工程师。因为公司不招单纯的功能测试。
有人可能会质疑,那业务测试谁来做?
在这里,我们公司业务测试全职测是自动化测试工程师,他们兼任业务测试和所负责业务中的一部分自动化测试需求。
而测试开发是专职于测试体系建设中。性能和安全测试有时候会支援业务测试,但是他们也是专职于性能和安全方面的测试,面向全公司所有系统。
测试体系发展
起初测试团队是没有对测试技术体系思考,大家做自动化测试都是各自做各自负责的业务系统那一块,用的工具与方法各有千秋,编程语言方面大致分两派java和python。
这种分散的自动化测试带来的弊端就是:
1、数据无法可视化;
2、脚本维护难;
3、增加了学习成本;
4、易用性、移植性差;
5、无法统一管理;
...
...
这种分散的,小作坊形式的很快就不适应快速迭代的需求和市场变化。最核心的一点是,部门领导无法向老板展示数据。通俗的来讲,就是无法向领导展示我们测试团队存在的价值。
嘴巴说,谁都会。但是,领导想看数据,那么平台是唯一秀出测试团队工作中沉淀下来的数据的途径。这样有了数据,团队的KPI就出来了。
你说你天天在测试,天天在做自动化测试,做了多少,效果如何。领导不可能一个个找你们去统计,去查看。不管你脚本写的多优秀,框架设计得多么出神入化。终究没有所谓的正规化平台好。
然后,就这么定了。几位测试开发大神,在领导的安排下,经过多番讨论的设计方案,写了一套后台是Java的自动化测试平台。这里说明一下,只所以是Java,因为公司99%的系统是Java开发。
测试平台
时至今日,平台已经完善得差不多了,该有的都有,没有的也有了。简单说一下测试平台的主要功能:
1、接口测试;
2、UI测试(app和web);
3、性能测试;
4、流量监控;
5、接口覆盖率统计;
6、安全测试;
7、代码质量扫描;
8、生产发布卡点;
....
主流的功能就是这些,其他小功能我就不一一列举了。这套平台已经集成了软件测试中绝大部分的测试技术在里面;可以算得上一套标准的流水线了。
以前会自动化测试会觉得高大上,现在平台搭建起来了,并且已经维护了1万左右的测试用例在上面了。是不是更加牛逼了?
答案:我不知道平台搭建后是否真正牛逼了,但是它的建设至少对测试团队的影响有如下几点:
1、增加了团队的技术含量(至少领导不会认为我们只会点点点);
2、提高了团队的作战能力;
3、提高了测试效率(因人而异);
4、降低了成本(待查);
5、提高了产品质量(待查);
6、降低了学习自动化的难度;
...
上面只列了六点,对于我们测试团队的影响,也算人们口中常讨论的自动化测试的意义。其实还有很多,这里不一一复述了。
自动化测试现状
平台是完善好了,前面说了,平台已经维护了1万左右的接口测试用例,其他数据我暂时没看。显然平台健壮性是毋庸置疑的,易用性也很好,入门简单。
那么问题来了,对于迭代频繁的项目,我们在什么时候去编写接口测试用例呢?
这种问题,绝大多数的人都知道,常规的回答不限于这些:
1、接口测试需求评审了(绝大多数是没有);
2、什么开发接口开发好了,开发提供了接口文档之类的,我们就可以去平台维护接口测试用例了;
3、开发自测通过,代码提交;
...
...
这些回答都很标准,很理想。但是,你有没有想过,现实是很骨感的,就是会出现如下情形:
现状一:
版本变化得让你根本没时间维护的时候,你只有加班抽时间来维护,而且这种情况只有在领导发话了,大家才会去维护上去。有些人由于业务线确实忙,所以没维护,有些是自己写脚本,根本不想维护上去。当然也有人主动的去维护。
针对这个现状,领导又出必杀技,将接口测试用例设计和覆盖率的指标定下来,并且放到KPI考核项里去。
KPI你们都懂,这里就不讲述它的作用了。这个大招一放,大家都自觉的去平台上维护了。
现状二:
现状二就是现状一的延伸版,就是每次版本有新增的接口后,大家为了KPI会主动上去维护。然后有一大部分人也仅仅上去维护这次,后面版本接口有变更,也不会花时间去更新已经维护上去的接口。
其中原因,有些可能是真正的忙,没有时间。有些可能因为懒,不想去维护。总而言之,测试团队中有一部分人是没有去更新接口测试用例的。
现状三:
谈到自动化测试的用途时,大家都会记得其中一个是用于回归测试,减少人力投入到版本回归测试中去,从而把节省出来的时间和人力,用于更多的业务测试或者其他测试中去。
但是,现实却是,在版本变更中,真正去执行以前维护的接口测试用例来回归测试的人太少了。据我观察和了解,在短期迭代中,上个迭代维护的用例,这个迭代没人会去跑,哪怕只用一分钟的时间。
出现这种情况,一方面由于自信,太自信于觉得之前的接口没有变动,没必要去跑,另一方面,时间太短,又要交付测试,功能测好,直接就进入产品&业务验收环节。就把这一步省略掉。
当然,还有其他很多原因,这里不细说。结果都是一样,没有去维护历史数据。
现状四:
自从公司招进外包测试后,现在部分项目测试工作分配如下:
测试工程师专门负责设计用例,然后交给外包团队来将这些用例再翻译成测试脚本,这样的做法,效率不低下才怪。
首先外包同志不熟悉业务线,直接转化,还是得从了解业务开始。
其次功能测试用例直接翻译成自动化测试脚本存在重复性劳动,同时也会出现场景遗漏,场景不可用的情况。
总而言之,这种做法收益大大低于投入。
正确的姿势是:测试工程师自己就将测试脚本交付出来。对于那些全栈工程师而言,最正确的姿势是:开发人员自己就动手将测试脚本写出来。根据我对微软的了解,微软的 Visual Studio 团队,就是这么做的,他们根本就不区分开发和测试。
现状五:
谈自动化测试的时候,我们经常会讲到它的优点,其中一个就是降低错误率,发现人工无法发现的缺陷。那么,在这里统计的结果,我们做接口测试真正发现的缺陷是屈指可数,凤毛麟角的。
有的甚至一个都没有。当然接口测试本身也是有局限性的,他不可能完全代替手工去发现手工测试的缺陷。
这里只讲它的现状...
现状六:
...
...
综上所述,还有很多现状,我这里不一一列举,可以看出来,出现这种想象,一方面是由于个人原因,测试的责任和态度。
一方面领导要求所有项目都要做接口自动化测试,从来不评估哪些项目适合做接口自动化测试。
有点盲目跟风,做了自动化测试就闪光辉,而实际带来的价值,却是0。
还有一方面,也是关键的一点领导对自动化测试管理方面的欠佳,光靠KPI来触发是不行的。
失败的背景
上面已经讲了,目前公司自动化测试存在的普遍问题。
现在从我这个小团队来讲,项目要上阿里云,就是系统上阿里云,至于什么原因,就不说了,涉及保密协议。
系统上阿里云,当然没有那么简单,所有与系统相关的服务、数据库、中间件、流量等等,相对于迭代版本,这是一次比较大的变更过程。
然后,我们测试在里面承担了什么角色呢?
自动化测试在这次迁移的价值会是怎样呢?
失败的经历
项目上云,当然我们测试要保证项目上云后,所有功能都能正常使用。但是切换的那一段时间,你有多少时间去验证所有的功能都正常呢?
只有两三个小时,一年积累下来的功能,两三个小时如何验证完呢?
这个时候就是自动化测试该上场了。
这个项目自动化测试交给外包维护了,是在我们测试平台上维护的,主要是维护WebUI功能测试用例。接口测试用例是我们几个在维护。
到了那一天凌晨,大家都准备好了,准备上云。然后验证。
最后发现,没有维护一个WebUI测试用例(生产环境)。
临近上云的几个小时前,我问他维护了多少用例,他说测试环境维护了,生产环境没有。
我当时傻眼了,因为这个外包是专职安排弄UI自动化,用于上云验证。云上UI前端框架和云下前端框架是不一样,也就是页面元素不一样,所以测试环境维护的用例,根本无法在生产环境使用。
然后我们这边由于时间太赶了,接口测试用例还没有更新到云上环境的域名以及调试好。这个失职也是在于我。
导致,我们这次上云验证,没有跑过一个自动化相关的用例。
简单来说,等于这次上云,我们用于回归测试的自动化测试相关的用例及脚本,没有一个。
但是,我们投入在自动化测试的时间,差不多跟我们业务测试用例编写的时间趋于一致。
投入与产出是1比0的,结果是惨不忍睹。
我们4个测试,靠着经久不衰的手法,一路闪电带火花的点点点,来验证系统所有功能是否在云上正常。
一直验到第二天上午人家来上班...
假设,我们准备充分,接口和UI自动化测试用例都遍历了所有功能,我们也不至于熬了一个整整通宵,也不会这么辛苦,这么累。
失败总结
经过这次项目上云,发现了平时我们打着自动化测试的口号:降本增效,提高质量。而到了实际要用时,却发挥不出一点作用。当然,这里有很多原因,有个人,也有团队管理方面的。
但是,抛开原因不追究,其惨痛结果,反应一个问题,自动化测试是有意义的,也有价值。
但是,如果你运用和管理不当,它的价值没有发挥出来,将成为一堆废铁,终将百无一用。
试问有多少人,多少公司做的自动化测试(那些BAT、TMD一线大厂里面的测试团队除外,毕竟技术与管理体系已经非常完善),真正发挥了它的价值呢?
你们有评估自动化测试(包括平台)的收益吗?
如何评估的呢?
真正达到产出高于投入的有多少呢?
学习自动化测试的人越来越多,自动化测试在软件测试中已经是人人参与的,但是,如果不真正发挥它的作用,你们做的自动化测试,包括测试平台,可能就是:
1、为了体现测试团队的技术(面子);
2、为了团队KPI;
3、自娱自乐;
4、为了面试,拿高薪;
5、安慰自己;
6、为了装13;
7、盲目跟风,不管有没有价值,先要有这个东西存在;
...
...
综上,也有其他动机和目的,但是,在这里,我想说的是,做自动化测试,一定要在做之前思考不限于以下六个问题:
1、这个项目为什么要做自动化测试?
2、什么项目适合做?
3、什么时候做?
4、做哪些核心业务模块?
5、谁来做?
6、如何做?如何发挥它的核心价值?
其实搞清楚1,4,6三个问题就可以了,最关键的是做好第六点,我想你做出来的自动化测试,肯定在项目中得到良好的收益。
写在最后
如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!
看到这篇文章的人有觉得我的理解有误的地方,也欢迎评论和探讨~
你也可以加入下方的的群聊去和同行大神交流切磋
相关文章:

3分钟看完-丄-Python自动化测试【项目实战解析】经验分享
目录:导读 引言 自动化测试 背景 测试团队 测试体系发展 测试平台 自动化测试现状 现状一: 现状二: 现状三: 现状四: 现状五: 现状六: 失败的背景 失败的经历 失败总结 引言 内…...
Web漏洞-命令执行和代码执行漏洞
命令执行原理就是指用户通过浏览器或其他辅助程序提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令。漏洞成因它所执行的命令会继承WebServer的权限,也就是说可以任意读取、修改、执行Web目录下的…...
Towards Unsupervised Text Classification Leveraging Experts and Word Embeddings
Towards Unsupervised Text Classification Leveraging Experts and Word Embeddings Abstract 该论文提出了一种无监督的方法,使用每个文档中相关单词之间的文本相似度以及每个类别的关键字字典将文档分为几类。所提出的方法通过人类专业知识和语言模型丰富了类别…...

linux进程管理
进程管理 进程是启动的可执行程序的一个指令 1、进程简介 (1)进程的组成部分 已分配内存的地址空间安全属性,包括所有权凭据和特权程序代码的一个或多个执行线程进程状态 (2)程序和进程的区别 程序是一个静态的二进制…...

【深度强化学习】(6) PPO 模型解析,附Pytorch完整代码
大家好,今天和各位分享一下深度强化学习中的近端策略优化算法(proximal policy optimization,PPO),并借助 OpenAI 的 gym 环境完成一个小案例,完整代码可以从我的 GitHub 中获得: https://gith…...

【数据结构】第二站:顺序表
目录 一、线性表 二、顺序表 1.顺序表的概念以及结构 2.顺序表的接口实现 3.顺序表完整代码 三、顺序表的经典题目 1.移除元素 2.删除有序数组中的重复项 3.合并两个有序数组 一、线性表 在了解顺序表前,我们得先了解线性表的概念 线性表(linear…...

嵌入式安防监控项目——实现真实数据的上传
目录 一、相关驱动开发 二、A9主框架 三、脚本及数据上传实验 https://www.yuque.com/uh1h8r/dqrma0/tx0fq08mw1ar1sor?singleDoc# 《常见问题》 上个笔记的相关问题 一、相关驱动开发 /* mpu6050六轴传感器 */ i2c138B0000 { /* #address-cells <1>…...

SAP 生成UUID
UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。 UUID-Universally…...
DevOPs介绍,这一篇就足够了
一、什么是DevOps? DevOps是一种将软件开发和IT运维进行整合的文化和运动。它的目标是通过加强软件开发、测试和运维之间的协作和沟通,使整个软件开发和交付过程更加高效、快速、安全和可靠。DevOps涵盖了从计划和设计到开发、测试、交付和部署的全生命…...

libcurl库简介
一、libcurl简介libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。…...

Spark SQL支持DataFrame操作的数据源
DataFrame提供统一接口加载和保存数据源中的数据,包括:结构化数据、Parquet文件、JSON文件、Hive表,以及通过JDBC连接外部数据源。一个DataFrame可以作为普通的RDD操作,也可以通过(registerTempTable)注册成…...

Java【归并排序】算法, 大白话式图文解析(附代码)
文章目录前言一、排序相关概念1, 什么是排序2, 什么是排序的稳定性3, 七大排序分类二、归并排序1, 图文解析2, 代码实现三、性能分析四、七大排序算法总体分析前言 各位读者好, 我是小陈, 这是我的个人主页 小陈还在持续努力学习编程, 努力通过博客输出所学知识 如果本篇对你有…...

【springboot】数据库访问
1、SQL 1、数据源的自动配置-HikariDataSource 1、导入JDBC场景 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency>数据库驱动? 为什么导入JD…...
普通和hive兼容模式下sql的差异
–odps sql –– –author:宋文理 –create time:2023-03-08 15:23:52 –– – 差异分为三块 – 1.运算符的差异 – 2.类型转换的差异 – 3.内建函数的差异 – 以下是运算符的差异: – BITAND(&) – 当输入参数是BIGINT类型的时候&…...

github开源自己代码
接下来,我们需要先下载Git,的网址:https://git-scm.com/downloads,安装时如果没有特殊需求,一直下一步就可以了,安装完成之后,双击打开Git Bash 出现以下界面: 第一步:…...

数据库基础语法
sql(Structured Query Language 结构化查询语言) SQL语法 use DataTableName; 命令用于选择数据库。set names utf8; 命令用于设置使用的字符集。SELECT * FROM Websites; 读取数据表的信息。上面的表包含五条记录(每一条对应一个网站信息&…...

【Java】期末复习知识点总结(4)
适合Java期末的复习~ (Java期末复习知识点总结分为4篇,这里是最后一篇啦)第一篇~https://blog.csdn.net/qq_53869058/article/details/129417537?spm1001.2014.3001.5501第二篇~https://blog.csdn.net/qq_53869058/article/details/1294751…...

IDEA好用插件:MybatisX快速生成接口实体类mapper.xml映射文件
目录 1、在Idea中找到下载插件,Install,重启Idea 2、一个测试java文件,里面有com包 3、在Idea中添加数据库 --------以Oracle数据库为例 4、快速生成entity-service-mapper方法 5、查看生成的代码 6、自动生成(增删查改࿰…...

【JavaEE】初识线程
一、简述进程认识线程之前我们应该去学习一下“进程" 的概念,我们可以把一个运行起来的程序称之为进程,进程的调度,进程的管理是由我们的操作系统来管理的,创建一个进程,操作系统会为每一个进程创建一个 PCB&…...

智慧水务监控系统-智慧水务信息化平台建设
平台概述柳林智慧水务监控系统(智慧水务信息化平台)是以物联感知技术、大数据、智能控制、云计算、人工智能、数字孪生、AI算法、虚拟现实技术为核心,以监测仪表、通讯网络、数据库系统、数据中台、模型软件、前台展示、智慧运维等产品体系为…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...

在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...