当前位置: 首页 > news >正文

为什么UI自动化难做?—— 关于Selenium UI自动化的思考

在快速迭代的产品、团队中,UI自动化通常是一件看似美好,实际“鸡肋”(甚至绝大部分连鸡肋都算不上)的工具。原因不外乎以下几点:

1 效果有限

通常只是听说过,就想去搞UI自动化的团队,心里都认为「UI自动化」等于「减少人工 提高效率」,这固然没什么大错,但是他们也会认为减少的人工成本和提高的效率会非常高,所以会对UI自动化寄予非常高的期望,这就很有问题了。毕竟现实是很残酷的,UI自动化真实的效果并没有那么好。
这个效果没那么好通常体现在两个方面:

A.本身无法完全满足复杂的业务代码框架

除了ID,Name这些常用元素不足,还有些本身框架就比较复杂,需要对开发有非常高的要求才能比较好地添加需要的信息,比如说VUE,非常好用的框架,封装得非常好的同时也意味着,改造VUE非常困难。更何况还有些前端代码直接是动态生成的,这使本就难搞的自动化雪上加霜。

B.UI自动化仅能就已知的问题做兜底,基本无法检查出新的BUG

有些同学会说,不适用还要强行用,用了不好用还要怪工具,真有你的。确实,第一点是因为被测系统框架本身和Selenium不兼容导致的,但是第二点就是目前自动化都无法逾越的问题。

这个特性是天生的,平常我们自己做测试的时候也知道,很多BUG其实是在测试用例之外发现的,而UI自动化毕竟是一段编码,它无法对超出预设的BUG进行报告,仅能对已知的问题做兜底。

其实兜底能做的好,就已经是非常好了,依然可以为公司和团队提供非常好的帮助,但是除开上述框架层面的原因外,公司层面的原因也非常关键。

2 重视度不够

众多设置了UI自动化岗位的公司,通常情况下,只有1到2位同学用仅一半不到的时间在写自动化脚本,而这些同学被寄予了厚望,希望可以做出一个覆盖面积广、测试通过率高、持续集成稳定、领导拿出去展示倍有面的UI自动化系统。

想想都气抖冷,但是这就是比较真实的现状。而除此之外,大部分招聘UI自动化的公司给出的薪资也较低,普遍在8-20之间(15以上一般都在大厂了)。我们换位思考一下,如果一个公司的主程月薪20K,你觉得这个公司的研发水平是怎么样的?答案不言自喻。有很多同学不服了,你UI自动化测试跑去跟正经开发比,真有你的。我还真就要说了,UI自动化想要落地,招人的标准就要冲着开发水平去招,不然就毫无意义。

当然,给出高工资并且全职做UI自动化的公司并不是没有,可是效果也一言难尽,因为这涉及到了执行层面的内容。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

3 维护起来太痛苦

自动化要做好,难在维护,这个是很多人都知道的。维护的原因只有一种:需求变更。无论是页面修改、逻辑修改还是底层代码变动导致的维护,其实都可以归结于需求。

每次维护通常分为以下几步:

1.跑全部用例,拿到出错的用例。
2.分析出错用例,找出因为本次修改导致的错误用例。
3.修改用例后复跑,确认没有问题。
4.重复步骤3,直到所有出错用例都修改完。
5.再次跑全部用例,确认没有问题合并代码。如果有问题,重复步骤3和4。

上述步骤已经非常耗时了,通常1到2个人的自动化团队,即使是全职,当用例累积到五六百时,大部分时间都会消耗在维护上,更何况很多都不是全职。耗时耗力,如果改好后能保证效果的话,其实勉强也能接受。但是非常不幸,上述的维护动作,通常是在我们正式跑用例出报告时才会发现有问题,这也导致了我们发出去的报告中的通过率会忽高忽低,没有UI修改时风平浪静,一旦有修改一地鸡毛。

而通过率的波动会导致很可怕的事情:不受信任。试想,你是测试leader或者开发又或者是业务测试同学,当一份自动化测试报告发过来的时候,点开一个错误用例发现是UI修改导致的,点开第二个还是,终于在一堆因为未维护导致的失败用例中找到一个其他原因导致的错误,找你一核对,发现是网络问题。看这份报告的人心态会是怎么样的?

多次这样之后,会关心这份报告的人,都不会记得你成功率是95%时的模样,只会记得成功率是80%时的模样,并给出结论:这东西没什么用。事实上,这还是做得好的情况,毕竟通过率可以达到95%已经非常不错,而市面上绝大部分公司的UI自动化通过率从来没有达到过95%,甚至80%都达不到,试问这样的结果拿出去,给谁看呢?丢谁的人呢?

总结:维护耗心耗力,结果依旧不受信任。

以上三点,是我自己总结的“UI自动化说了这么多年依旧鸡肋”的原因。它目前是一个实际投入100分,产出只有90分,然后还要持续投入越来越高的成本才能继续维持90分产出的东西。 但是却被不了解或者了解也装不了解的人看成是实际投入50分,产出可以到150分的一劳永逸的解决方案。以此吸引了一大波人进入这个领域,看了一段伪代码就说自己会了,完整地写了一个用例就说自己精通了,在某个公司做着半吊子的项目就说自己是专家了。

那么问题来了,它似乎没那么美,我们要不要做呢?

我们要不要做呢?

要不要做呢?

……

END今天的分享就到此结束了,点赞关注不迷路 !

相关文章:

为什么UI自动化难做?—— 关于Selenium UI自动化的思考

在快速迭代的产品、团队中,UI自动化通常是一件看似美好,实际“鸡肋”(甚至绝大部分连鸡肋都算不上)的工具。原因不外乎以下几点: 1 效果有限 通常只是听说过,就想去搞UI自动化的团队,心里都认…...

Python小白之“没有名称为xlwings‘的模块”

题外话:学习和安装Python的第一个需求就是整理一个Excel,需要读取和写入Excel 背景:取到的模板代码,PyCharm本地运行报错:没有名称为xlwings的模块 解决办法:这类报模板找不到的错,即是模块缺…...

RK3588 学习教程1——获取linux sdk

上手rk3588前,需要先拥有一块开发板,这样可以少走很多弯路。个人推荐买一块itx3588j的板子。挺好用,接口丰富,可玩性高。 sdk可以直接在firefly官网下载,不用管什么版本,下载下来后直接更新即可&#xff0…...

保护您的Google账号安全:检查和加固措施

简介:随着我们在日常生活中越来越依赖于Google账号,我们的个人信息和敏感数据也变得越来越容易受到威胁。为了确保您的Google账号的安全性,本文将介绍一些简单但有效的方法,帮助您检查和加固您的Google账号。 --- 在数字时代&am…...

「Verilog学习笔记」优先编码器Ⅰ

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 分析 分析编码器的功能表: 当使能El1时,编码器工作:而当E10时,禁止编码器工作,此时不论8个输入端为何种状态&…...

java实现TCP通信(socket)服务端-客户端

我在写的时候,我的需求就很简单,写一个服务端,去让别人进行请求,借鉴了很多聊天室什么的,越搞越复杂。 期间也使用到了 BufferedReader中readLine()方法,进行获取客户端传来的数据&…...

企业信息模糊搜索API的使用及应用场景

前言 随着企业数据的不断增加,如何高效地搜索和管理这些数据成为了企业管理者关注的重要问题。而企业信息模糊搜索API的出现,为企业提供了一种高效的解决方案。本文将介绍企业信息模糊搜索API的使用及应用场景。 一、什么是企业信息模糊搜索API&#x…...

.net6+aspose.words导出word并转pdf

本文使用net6框架,aspose.word破解激活并兼容net6,导出word模板并兼容识别html并给其设置字体,前端直接浏览器下载,后端保存文件并返回文件流,还有批量导出并压缩zip功能 1、安装Aspose.Words的nuget包选择21.8.0 版本…...

深度学习 植物识别算法系统 计算机竞赛

文章目录 0 前言2 相关技术2.1 VGG-Net模型2.2 VGG-Net在植物识别的优势(1) 卷积核,池化核大小固定(2) 特征提取更全面(3) 网络训练误差收敛速度较快 3 VGG-Net的搭建3.1 Tornado简介(1) 优势(2) 关键代码 4 Inception V3 神经网络4.1 网络结构 5 开始训练5.1 数据集…...

《深入浅出进阶篇》洛谷P4147 玉蟾宫——悬线法dp

上链接:P4147 玉蟾宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P4147 上题干: 有一个NxM的矩阵,每个格子里写着R或者F。R代表障碍格子,F代表无障碍格子请找出其中的一个子矩阵&#xff0c…...

社区论坛小程序源码系统,功能齐全,页面简洁,前端+后端+完整部署教程

现如今,社区论坛已经成为人们交流思想,分享经验,获取信息的重要平台。近年来,小程序的出现更是改变了传统的网站建设方式,让用户体验更加便捷,高效。今天源码小编来和大家分享一款社区论坛小程序源码系统&a…...

大数据开发面试(一)

1、Kafka 和 Flume 的应用场景? Kafka 和 Flume 的应用场景如下: Kafka:定位消息队列,适用于多个生产者和消费者共享一个主题队列的场景。适用于需要高吞吐量、可扩展性和容错能力的场景。主要用于大数据处理、实时数据流分析和日…...

softmax的高效CUDA编程和oneflow实现初步解析

本文参考了添加链接描述,其中oneflow实现softmax的CUDA编程源代码参考链接添加链接描述 关于softmax的解读以及CUDA代码实现可以参考本人之前编写的几篇文章添加链接描述,添加链接描述,添加链接描述 下面这个图片是之前本人实现的softmax.cu经过接入python接口,最终和pytor…...

如何解决 Node.js 20 升级中未预期的请求问题

在 Tubi,我们使用 Node.js 为 Web/OTT 应用进行服务端渲染及代理请求。近来,为了从新版本的性能改进和新功能中受益,我们将 Node.js 从 14.x 版本升级到了 20.x。 升级像 Node.js 这样的基础设施绝非易事,尤其是有着许多第三方依…...

no tests were found

将带有Test的方法返回类型设为void...

泛型擦除是什么

//在编译阶段使用泛型,运行阶段取消泛型,就是擦除. //因为泛型其实只是在编译器中实现的而虚拟机并不认识泛型类项,所以要在虚拟机中将泛型类型进行擦除, //擦除是将泛型以其父类代替,如String变成了object等. //在使用的时候还是进行带强制类型转化,只不过这是比较安全的转换,…...

7、线性数据结构-切片

切片slice 容器容量可变,所以长度不能定死长度可变,元素个数可变底层必须依赖数组,可以理解它依赖于顺序表,表现也像个可变容量和长度顺序表引用类型,和值类型有区别 定义切片 var s1 []int //长度、容量为0的切片&…...

linux grub2 不引导修复 grub2-install:error:/usr/lib/grub/x86_64-efi/modinfo.sh

系统部署在物理机上,开机后一直pxe不进系统,怀疑GRUB丢失。 查看bios 里 采用uefi 启动方式, 无硬盘系统引导选项, 且BMC设置为硬盘永久启动也无效。 挂载光驱ISO进入救援模式,sda为系统盘,重装grub报错 grub2-inst…...

建筑楼宇智慧能源管理系统,轻松解决能源管理问题

随着科技的进步与人们节能减排意识的不断增强,建筑楼宇是当下节能减排的重要工具。通过能源管理平台解决能效管理、降低用能成本、一体化管控、精细化管理和服务提供有力支撑。 建筑楼宇智慧能源管理系统是一种利用先进手段,采用微服务架构,…...

【洛谷算法题】P5711-闰年判断【入门2分支结构】

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5711-闰年判断【入门2分支结构】🌏题目描述🌏输入格式&a…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...