自动化测试难点案例分析,其实自动化你用错方向还不如不用
随着国内企业软件开发及测试水平的提升,许多企业开始尝试开展自动化测试的应用,以提高测试效率和测试质量。虽然在国外自动化测试工具应用已经很普遍,但国内许多企业对于软件自动化测试的理解还停留在表面上,没有深入的理解到企业实施自动化测试所要具备的条件以及自动化测试本身的局限性,导致自动化并没有给企业带来多少实际的价值,反而还浪费了资源。 下面是两个企业推行自动化失败的案例:
案例1:L公司是中国一家专注医疗设备与软件研发的高科技企业,产品包括超声,放射,检验和医疗IT。医疗IT软件产品包括超声工作站、放射工作站、叫号工作站、信息系统等。整个软件产品线有80多名工程师,测试工程师有15人。以前公司的测试大部分是手工测试,现在由于软件的版本发布较多,测试团队很难跟上开发的节奏。产品线王总找到测试部经理李华,看是否能开展自动化测试,并要求在下个季度完成自动化技术的预研和实践。测试部经理李华经过与部门两名自动化测试工程师的讨论,决定使用QTP和Winrunner作为测试工具,经过三个月的预研之后,工具可以使用了,但在使用过程中遇到了以下的问题:
1) 自动化工具在录制脚本的时候很多对象无法识别。
2) 由于软件的需求变更较多,程序界面变更较快,原来录制的脚本很难重用。
3) 软件程序的BUG很多,使用测试工具时出现很多的异常,无法顺利跑完脚本。。。。
案例2: K公司是一家主要从事网络游戏咨询服务及相关游戏增值业务,是全球著名,中国最大的游戏增值服务提供商之一,主要提供游戏点卡、游戏装备、虚拟货币、网游账号等网上交易服务。该公司开发团队采用的开发模式为敏捷开发,每周需要发布一个版本,对软件测试团队的要求较高,不但需要快速的测试每一个新版本,而且要找出BUG,这样对于本来偏向于手工测试的质量保证团队是一个非常大的挑战,负责质量的陈副总为了提高测试的效率,直接从IBN公司挖了一个自动化测试高手刘军过来,作为整个测试部门的负责人,意在提高公司自动化测试技术和软件质量水平。但刘军经过6个月的努力,发现自动化测试在K公司根本派不上用场,大部分的项目带是采用手工测试,原本想把测试效率提升一下的刘军,在6个月之后,选择离职。。。。。究其原因,有以下几个:
1)刘军虽然是自动化测试高手,但对于K公司的业务不太熟悉。
2)敏捷开发过程中自动化测试很难派上用场。
3)企业对于自动化能带来的收益过于短视,没有给予一定的时间进行技术积累。
以上两个案例,是目前中国软件企业遇到的普遍性的问题,一方面想提高软件测试的效率,一方面又不想增加测试资源,想走捷径,比如通过一些自动化工具进行辅助测试等等。上个月笔者在北京测试公开课上也遇到了一家中国互联网企业的研发总监,他们面临的问题跟以上两家企业的问题基本上类似,想开展自动化测试但不知从何下手,如:自动化测试团队与开发人员的关系,自动化测试人员的绩效指标,自动化测试团队究竟需要领导哪些支持?自动化测试的人员如何培养?自动化测试能做到什么程度。。。。。。。
带着这些问题,笔者根据以往在华为和阿里巴巴两家著名公司的测试管理经历,和近期对多家企业进行自动化测试辅导的经验,分别从“技术、组织、流程、人”四个方面对自动化测试实施难点进行简要的分析:
1) 从技术方面,目前国内从事自动化测试的工程师还不多,这跟国内一种浮燥的开发氛围有关系。因为企业开展自动化测试,不但需要购买工具,还需要招聘具备开发能力的测试工程师,并且回报周期较长,有的需要半年,有的需要一两年,这一点是很多企业无法实现的。国内自动化测试做得比较好的企业腾讯、阿里巴巴、百度等公司,无不投入了较高的成本,自动化测试技术包括测试工具开发和自动化测试工具应用两类。 测试工具开发是指开发适合自已产品的测试工具,像一些脚本语言PHP、PYTHON、TCL/TK、SHELL等等,主要用于集成测试和单元测试;另一种自动化测试技术是指自动化测试工具的应用,主要是应用各种成熟的测试工具,如QTP,LR,Silktest等等, 这类技术只需要掌握工具即可。由于国内“重开发、轻测试”思想依然存在,很多企业不愿花钱购买自动化测试工具和招聘高素质自动化测试人才。导致测试水平低下,测试跟不上开发的情况屡见不鲜。 企业要想实施自动化测试,必须先过技术关,案例1中的L公司显然技术的积累不够,没有成功自动化测试经验的技术人员很可能导致自动化测试失败。
2) 组织方面,很多公司都建立了系统测试部,但真正有独立自动化测试小组的公司廖廖无几,有的公司也试图让系统测试人员来从事自动化测试,这是一个误区。因为系统测试人员往往偏向于黑盒测试, 他们对于代码逻辑和模块接口方面了解非常少, 很难从事测试工具的开发和自动化测试工具的应用。共创力咨询认为, 自动化测试小组应独立于测系统测试团队, 自动化测试小组更多的职责在于提高测试用例的自动化率, 和维护自动化测试脚本。测试工具开发小组可以独立于测试工具应用小组, 因为前者更偏向于开发, 这个团队的身份其实跟开发团队没有什么两样,他们负责收集自动化工具开发需求,并进行设计开发和验证。后者主要负责工具应用, 他们需要把工具应用到公司的业务中去。自动化测试工具应用小组可以参与一部分的系统测试工作,以撑握和熟悉具体的业务知识, 更好的提高软件自动化率。因此,在组织方面,共创力建议企业开发过程中自动化测试和手工测试分开, 自动化测试分为两个小组, 一个是做工具开发, 一个是自动化工具的应用,两个小组如果人数不多,可以合二为一, 如果人数超过一定规模, 如10个以上, 则可以成立两个单独的小组。
3) 在流程方面, 自动化测试需要有相关测试流程的保障。自动化测试不再跟手工测试一样, 在软件打完包之后进行测试, 自动化测试在编写脚本或写测试用例的时候需要跟开发人员人间作深入的沟通, 了解软件的逻辑实现和模块之间的接口, 如UI的控件实现方式变化之后,开发人员应及时通知测试开发人员, 对测试的脚本进行调整和维护, 对开发人员提交文档的规范性有更高的要求。案例2中的K公司采用了敏捷开发模式, 对于自动化测试工具的应用,显然不太适合, 因为频繁的UI变更,将导致测试用例的维护工作量较大, 还不如做手工测试, 针对K公司这种情况, 共创力建议除了使用自动化测试做一些后台的测试之外,前台依然采用手工测试。
4) 在人方面,自动化测试如何得到保障呢? 最近笔者统计了一下目前研发职位的招聘情况,软件测试人员的招聘职位较多,尤其是高级测试工程师供不应求, 究其原因, 目前很多企业已经意识到了测试这块短板, 但缺乏高水平的测试工程师, 懂开发的工程师都不愿从事测试, 从事测试的工程师基本不懂开发。。。。。这是一种不好的现象, 在华为公司,许多测试工程师同样懂软件开发,在进入公司前需要考查C++基本编程,而且,测试人员的工资待遇不比开发人员差,这就为公司开展各项自动化测试提供了一个基本条件,人员可以得到保证。国内除了几家大公司如华为,中兴,迈瑞,阿里,腾讯等之外,许多公司的测试人员都是不懂开发的,很难真正的推行自动化测试。。。。。
综上所述, 企业要推行软件自动化测试,不是一件容易的事, 领导不但需要支持建立测试开发团队,而且需要招聘有经验的自测试化测试人员,并树立自动化测试部门的权威性,真正给企业带来效益,降低人工测试的成本。随着国内软件企业对质量意识的提升,相信自动化测试逐渐会取代一部分的手工测试,自动化测试的地位也将逐渐显现出来。
最后,笔者根据多年的自动化测试实践经验, 总结出一些经验和教训, 给大家分享:
1) 并不是所有的软件都适合自动化测试, 像有些需要人机界面进行测试的, 只能使用手工测试。如需要通过眼睛判断颜色或通过人操作键盘等等。
2) 自动化测试工具并不能帮助我们找出更多的BUG, 而只能提高测试的效率和质量。自动化测试工具也是需要人去操作和维护的,它只能机械的重复人的动作,而并不比人聪明。
3) 对于版本频繁变更或需求变化较快的软件,尽量不要使用自动化测试工具,因为使用工具维护的成本太高。
4) 对于自动化测试尽量在版本稳定后进行,如前面三轮采用人工测试,软件基本稳定后再使用自动化工具进行回归测试,如果版本不稳定,使用自动化工具将事倍功半,得不偿失。
5) 对于自动化测试技术,需要做长期的规划,针对自身业务的发展状况和开发技术的规划,组织自动化测试小组研究测试方面新的技术,在产品测试的过程中,慢慢积累,不断总结,让测试技术得以沉淀。
6) 自动化测试工程师最好有开发的背景和经验,对于自动化测试工具应用的工程师最好有成功的工具实践经验。因为只有具备成功的经验,对于自动化工具在软件开发过程中的应用会如鱼得水,取得事半功倍的效果。
B站2023年最详细的python接口自动化测试全栈测试开发技术入门到精通教程
相关文章:

自动化测试难点案例分析,其实自动化你用错方向还不如不用
随着国内企业软件开发及测试水平的提升,许多企业开始尝试开展自动化测试的应用,以提高测试效率和测试质量。虽然在国外自动化测试工具应用已经很普遍,但国内许多企业对于软件自动化测试的理解还停留在表面上,没有深入的理解到企业…...

866363-70-4,N3-C5-NHS ester,叠氮-C5-NHS 主要物理性质分享
●外观以及性质:Azido-Aca-NHS淡黄色或无色油状,叠氮化物可以与炔烃、DBCO和BCN进行铜催化的点击化学反应。NHS酯可以与胺基反应,形成稳定的酰胺键。●中文名:叠氮-C5-NHS ester,6-叠氮己酸活性酯●英文名:…...

字符流定义及如何深入理解字符流的编码
IputSrem类和OupuSrem类在读写文件时操作的都是字节,如果希望在程序中操作字符,使用这两个类就不太方便,为此JDK提供了字符流。同字节流样,字符流也有两个抽象的顶级父类,分别是Reader和Writer其中,Reader是…...

什么是pod类型
很久很久以前,C 语言统一了江湖。几乎所有的系统底层都是用 C 写的,当时定义的基本数据类型有 int、char、float 等整数类型、浮点类型、枚举、void、指针、数组、结构等等。然后只要碰到一串01010110010 之类的数据,编译器都可以正确的把它解…...

2023年中小企业实施智能制造的建议
智能制造的载体是制造系统,制造系统从微观到宏观有不同的层次,主要包括制造装备、制造单元、制造车间(工厂)、制造企业和企业生态等。随着智能制造的深入推进,未来智能制造将向以下五个方向发展。 (一&…...

【LeetCode】剑指 Offer 19. 正则表达式匹配 p124 -- Java Version
题目链接:https://leetcode.cn/problems/zheng-ze-biao-da-shi-pi-pei-lcof/ 1. 题目介绍(19. 正则表达式匹配) 请实现一个函数用来匹配包含. 和*的正则表达式。模式中的字符.表示任意一个字符,而’*表示它前面的字符可以出现任意…...

linux和windows中安装emqx消息服务器
大家好,我是雄雄,欢迎关注微信公众号雄雄的小课堂 现在是:2023年3月1日21:53:55 前言 最近几天看了下mqtt,通过不断的搜索资料,也将mqtt集成到项目中,跑了个demo运行,和预想中的差不多&#x…...

【XXL-JOB】XXL-JOB的搭建和使用
【XXL-JOB】XXL-JOB的搭建和使用 文章目录【XXL-JOB】XXL-JOB的搭建和使用1. 任务调度1.1 实现任务调度1.1.1 多线程实现1.1.2 Timer实现1.1.3 ScheduledExecutor实现2. 分布式任务调度2.1 采用分布式的原因3. XXL-JOB3.1 XXL-JOB介绍3.2 执行流程4. 搭建XXL-JOB4.1 创建数据库…...

HCIP-5OSPF基本原理及基本配置学习笔记
1、OSPF基本原理 开放式最短路径优先OSPF(Open Shortest Path First)协议是IETF定义的一种基于链路状态的内部网关路由协议。 RIP是一种基于距离矢量算法的路由协议,存在着收敛慢、易产生路由环路、可扩展性差等问题,目前已逐渐被…...
Migrate your data into databend with DataX
现在互联网应用越来越复杂,每个公司都会有多种多样的数据库。通常是用最好的硬件来跑 OLTP,甚至还在 OLTP 中进行分库分表来满足业务,这样对于一些分析,聚合,排序操作非常麻烦。这也有了异构数据库的数据同步需求&…...
ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
【ansible 设置host为localhost,执行ping命令报错】 [eniq-slocalhost ansible]$ ansible all -m ping -i inventory localhost | UNREACHABLE! > { "changed": false, "msg": "Failed to connect to the host via ssh: Perm…...
有限元中三角形的一些积分公式
文章目录有限元中三角形的相关积分公式有限元中三角形的相关积分公式 在 xyxyxy 平面中, 通过三个点 (xi,yi),(xj,yj),(xm,ym)(x_i, y_i), (x_j, y_j), (x_m, y_m)(xi,yi),(xj,yj),(xm,ym) 定义一个三角形, 令坐标原点位于其中心(或者重心)…...
【docker-compose】安装mongodb
1. 安装方式 压缩包容器安装docker(推荐,一分钟安装) 2. 环境 linux服务器已安装好 docker docker-compose (不了解的客官,请点击进入) 3. 步骤: Step 1: linux下建立如下目录…...
【ClickHouse源码】物化视图的写入过程
本文对 ClickHouse 物化视图的写入流程源码做个详细说明,基于 v22.8.14.53-lts 版本。 StorageMaterializedView 首先来看物化视图的构造函数: StorageMaterializedView::StorageMaterializedView(const StorageID & table_id_,ContextPtr local_…...

.NET 使用NLog增强日志输出
引言 不管你是开发单体应用还是微服务应用,在实际的软件的开发、测试和运行阶段,开发者都需要借助日志来定位问题。因此一款好的日志组件将至关重要,在.NET 的开源生态中,目前主要有Serilog、Log4Net和NLog三款优秀的日志组件&…...

一道阿里类的初始化顺序笔试题
问题很简单,就是下面的代码打印出什么? public class InitializeDemo {private static int k 1;private static InitializeDemo t1 new InitializeDemo("t1" );private static InitializeDemo t2 new InitializeDemo("t2");priv…...
cuda找不到路径报错
编译C文件时出现:error: [Errno 2] No such file or directory: :/usr/local/cuda:/usr/local/cuda/bin/nvcc 在终端输入: export CUDA_HOME/usr/local/cuda...

Elasticsearch进阶之(核心概念、系统架构、路由计算、倒排索引、分词、Kibana)
Elasticsearch进阶之(核心概念、系统架构、路由计算、倒排索引、分词、Kibana) 1、核心概念: 1.1、索引(Index) 一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引&…...
Android包体积缩减
关于减小包体积的方案: 一、所有的图片压缩,采用webp 格式。 (当然有些图片采用webp格式反而变大了,可以仍采用png格式) 二、语音资源过滤 只保留中文 resConfigs "zh-rCN", "zh” 可以减少resourc…...
【华为OD机试】 网上商城优惠活动(C++ Java Javascript Python)
文章目录 题目描述输入描述输出描述备注用例题目解析C++JavaScriptJavaPython题目描述 某网上商场举办优惠活动,发布了满减、打折、无门槛3种优惠券,分别为: 每满100元优惠10元,无使用数限制,如100199元可以使用1张减10元,200299可使用2张减20元,以此类推;92折券,1次…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...