自动化测试到底是什么

引子



偶然在群里有人问自动化测试到底是啥,搞不懂。qtp对象库好麻烦,jmeter怎么做测试。。。。一堆一堆的问题。其实说实话真心不知道该咋解答了,我的内心是累的~

突然想到自己的新书里不就解释过这些吗!看来还是很多童鞋对于自动化测试的认知存在巨大的问题啊!

so,以下内容选择《小强软件测试疯狂讲义》



重新认识性能测试之后我们再来看看自动化测试到底是什么。其实这个话题我在不同的场合多次谈过,甚至在我创办的“挨踢脱口秀”中也专门做了一次节目来说明,但可惜的是仍然有很多朋友对自动化测试的认知是不完整的,那本节就再次带领大家重新认识一下。

自动化测试到底是什么?我们可以简单的理解为前期通过人工编码完成框架,后期来解放人力并自动完成规定的测试。更通俗点可以这么理解:现在有小强1号和2号两个机器人,你对其中的小强1号机器人进行编码告诉他“在每天中午12点的时候给小强2号机器人一巴掌”,那么当到了中午12点的时候小强1号机器人就会按照你的编码要求执行,并给小强2号机器人一巴掌,这样你就可以干其他事情去了,不需要自己来做,解放了人力,提升了效率(莫名的感觉到自己的脸被打了一巴掌啊)。

讲到这里大家应该明白什么是自动化测试了吧?嘿嘿,你真的以为自己明白了?我想这时候肯定有不少朋友会脱口而出,自动化测试不就是QTP、Selenium、Appium这些玩意嘛?如果你真的这么理解那还是不够完整。大部分朋友都觉得一说自动化测试就是指UI层自动化测试,其实UI层自动化测试只是其中的一种而已,具体的层级我们会在后面的章节讲解。

最后我也必须提出一点,任何无法服务于业务的技术都是没有价值的,自动化测试也是,只有自动化测试能真正的服务于业务,并带来较高性价比才有价值,单纯拿代码堆叠起来的自动化测试不可取。

自动化测试分层模型



我们全新认识了自动化测试之后就来看看自动化测试分层模型,同时也会和大家聊聊自动化测试到底怎么用才能“恰当好处”。此模型在网上也看到过,不知道是谁最先写出来的,总之感谢此模型的创造者!我在这个模型上面做了一些微调,方便小白朋友们更好的理解。分层模型如图1.3所示。

图1.3 自动化测试分层模型

有了性能测试分层模型的经验,自动化测试分层模型就容易理解了,它主要是分为了三层,下面我们就一层层的来详细讲解。

UI层



这个是大部分朋友理解的自动化测试,UI指的就是用户可以用肉眼看到的页面。基本上我接触的小白朋友一说自动化测试就认为是UI层的,这个误解我觉得真的太可怕了。

我们先来聊聊UI层自动化测试的原理。不论是Web端还是移动端,原理都是一样的:就是基于页面元素的识别和定位来进行模拟用户行为。首先识别到某个元素,比如一个按钮,然后定义一个动作,比如点击,这样就通过代码模拟完成了一次按钮的点击,代替了人工去点击。如果后期再加入数据驱动和Page Object思想就基本可以形成一个UI层自动化测试框架了。明白了这个道理之后我们再来聊聊UI层自动化测试的适用范围。

对于UI层自动化测试的适用范围,我个人不建议做大规模的应用,从自己的实践经验来看大规模的应用UI层自动化测试最后的结局总是悲剧的。主要是由于以下几个原因导致:

1) UI变化频繁,计划根本赶不上变化(同意的小伙伴们请点赞)。

2) 初期见效太慢,等不了,我们都希望恨不得用了自动化测试技术就能立马看到带来的效果,但事实总是相反,自动化测试的效果是在后期体现的。

3) 前端的开发不规范,导致很多元素识别和定位起来较为困难。

那UI层自动化测试是不是就不能应用了呢?必然不是!保持一个客观、公正的态度来看待是非常重要的,至少从我个人的实践经验来讲,UI层自动化测试可以应用到冒烟测试中,这里的冒烟测试是指主流程的测试,就是那些非常重要且不会频繁变化的流程,可以利用UI层自动化测试来完成。比如,之前我们会对电商系统的主流程做每日的UI层自动化回归测试,用来保证线上系统功能的正常,效果还不错。所以,用与不用关键在于它的适用范围,只有在合适的范围内使用了合适的技术才会表现出最好的效果。

最后用一句话总结下:“给你一把屠龙刀,如果你不会用那就和菜刀一样”,只有对自动化测试有了正确的认知才能更好的去推动它的发展,也只有明白了它们的特点才能更好的运用。

接口层



接口层是现在在企业中应用最为广泛的自动化测试方法之一,它的优点在于基本规避了UI层自动化测试的缺点,并且一旦形成较为稳定、完整的框架后基本上是比较通用的,不论是在Web端还是移动端都可以使用。但缺点也很明显,就是对测试工程师的编码能力要求较高,这也是很多测试工程师止步于此的重要原因。

对于接口层自动化测试是我个人比较推荐,也是建议大家有能力多去学习一下的,对于自身测试技术的提升还是有明显帮助的。一般接口层自动化测试都会用Python、Ruby等语言开发,比如,某租车公司的接口测试框架是用Ruby开发的,我们之前的接口测试框架是用Python开发的,这里大家不必纠结用什么语言开发,每个语言在编程思想上是通用的,只是在语法上稍有不同而已,基本上你熟悉了一门语言后学其他的语言都会非常快。多说无益,只有做过的朋友才能体会它的好。后面的章节中也会给大家讲解一些轻量级框架的设计与实现。

单元层



单元层的自动化测试对测试工程师的编码能力要求较高,且要能看懂业务的实现代码,这样才能针对被测代码编写单元测试代码,一般都是引入XUnit、TestNG等框架来完成。为什么大部分公司在这个层级也无法很好的推行呢?原因在1.2节性能测试分层模型中已讨论过,此处不再讲述。

其实,自动化测试的难点在于框架的设计,并不在于写代码。框架的设计需要统筹全局,就好像一个指挥官。而最后来实现框架你招几个有代码能力的人怎么都可以实现。在小强自动化测试班中我也能深刻地感受到,很多学员在学写代码的时候表现还不错,但在最终设计框架的时候毫无头绪,或者说是没有框架设计的思想,导致大脑一直空白,如果是这样那你学的再好都没有用,因为你学的用不上,只有当你具备总体框架设计的思维能力,才能利用所学的语言去实现,过程中无非就是在实现的过程中遇到问题了查查资料而已,至少你能迈出这最重要的一步了。可见,有时候思想是多么关键啊!

初学者如何选择学习哪种技术



这个话题有点沉重,因为一旦表述不好肯定会被一些无良的人骂之,但思前想后还是决定写这一章节。因为我被太多的朋友问过这个问题了,大概统计了一下,基本每两天就会被问到一次,有时候一天还会被问到N次,我回答的都要吐血了,为此还在《挨踢脱口秀》中专门做了一期节目,可见这个话题的必要性了,也希望能帮助有选择纠结症的朋友。

下面我尽量客观的以我自己的学习经历来聊聊,也许这个经历不是最好的,甚至是错的,但可以给大家一些参考,少走一些弯路,我觉得就是有价值的。

首先,我们说说学习性能测试需要面临的几个挑战,大家可以结合自己的实际情况看看自己是否适合继续学习。

第一,庞大的知识体系,这个是我们面临的第一个挑战。性能测试是一项复杂且需要耐心的工作,我们需要在复杂的系统中“抽丝剥茧”,一层层分析从而确定性能问题。这个过程会涉及中间件、Web服务器、缓存、数据库、代码等知识,所以没有一个较为完整的知识体系就很难进行下去。虽然说是挑战,但在我看来却是大部分小白朋友最佳的入门途径,因为它能帮助我们快速建立较为完善的知识体系,对于我们而言有百利而无一害。不知你是否遇到过这样的场景,被指着鼻子说:连一个SQL语句都不会写,连中间件是什么都不知道你还和我们讨论什么。这样的“羞辱”虽然让我们不开心,但也直白地指出了现在很多测试工程师在整体知识体系方面的欠缺,只有把自己的短板补起来才有底气和实力去争取更美好的事物。

第二,较强的分析能力,这个是我们面临的第二个挑战。就好像动画片《柯南》,在复杂的犯罪现场破案,需要不断的推断和论证,这个过程中有可能会把之前确定的事情推翻了,也有可能好几天都没有进展,但这也是它的魅力,可以说是痛并快乐的。

在我接触过很多学员之后,我发现大家一个共性的问题就是逻辑分析能力较差,在分析的过程中经常是东一点西一点,完全没有逻辑可言,都是乱猜,并且经常容易掉入细节,一旦掉入无法自拔,导致停滞不前,这也就是为什么很多人觉得性能测试难的原因。在我看来,性能测试的分析过程就像剥洋葱,你需要一层层剥开才能看到问题所在,这个过程就需要你有较强的逻辑分析能力,同时也要具有宏观性,只有站在一定的高度去看待问题才能豁然开朗,不然就会陷入死胡同。一旦这个思维能力培养好了,就会事半功倍,学习其他技术时效率也会提高,所以万事都需付出才能有收获。

其次,我们再来说说学习自动化测试需要面临的几个挑战。

第一,编码能力,这个是逾越不过的坎儿。说到这里可能会有朋友问难道性能测试不需要编码能力吗?答案是需要,但比起自动化测试来说门槛相对低点。其实对于一个优秀的测试工程师来说编码能力是必备的技能。

如何提升自己的编码能力也是不少朋友咨询过我的问题,真心没有什么捷径。我觉得就是要多练习多总结,我说的练习是真正的动手去做而不是看。我带过的学员中其实大部分同学都存在一个问题,就是上课讲的时候听起来感觉很简单,不以为然,但当自己下课后练习时却出现各种问题,很简单的知识点能搞一天,所以一定要多练习,每次犯过的错误也都要及时总结,不能让自己在同一个地方跌倒两次。我再苦口婆心一句:“没有不起眼的砖,没有看不到的框架,漂亮的楼房怎么能屹立不倒”。

第二,逻辑思维能力。在有了编码能力之后就能做自动化测试了吗?显然不能,因为自动化测试最终是希望建立一个框架或者平台,这是一个大工程,一定要有较强的逻辑思维能力和设计能力才行。就好比,你会焊接技术但不代表你会设计汽车啊。所以自动化测试真正的难点在于设计思想,一点经验都没有的朋友做起来确实会比较吃力,这也就是为什么我个人建议可以先学习性能测试,培养能力和思维之后再学自动化测试的原因了。

说了这么多,我想大家应该心中已经有了答案,再次声明,这些只是我个人的看法,不见得对,仅供参考而已,不喜勿喷。

时间: 2024-09-30 21:31:59

自动化测试到底是什么的相关文章

功能测试与自动化测试到底谁高级?

转眼出来工作已经4年了,在这4年里主要从事测试工作,今天我想在这里说下目前我对测试行业的一些认识.其实测试这个职位无非分为功能测试,性能测试,自动化测试以及安全性测试,随着近几年测试的发展,很多公司也越来越重视测试,都设有专门的测试人员,就目前国内软件公司的发展来看,应该有90%以上的公司有测试职位,可见测试在软件体系中还是占有很大分量的.但是如何去定位软件测试的高级与否,今天我就专门来说下我的观点.“高级”一词一直是技术行业中被众多技术人员所向往以及崇拜的,做技术这行的都想往高级方面发展,但是

自动化测试思考2

资料来自网络(黑夜小怪) 自动化测试概念 现在越来越多的人在关注使用自动化测试.似乎自动化测试已经成了一个"高级".但是其实很多人对自动化测试本身有很多误解,自动化测试不是银弹,不是瑞士军刀.自动化测试并不能代替测试本身.很多领导或者客户了解到自动化测试,就都会有用自动化测试覆盖测试的冲动.在这种冲动下,投入大量的人力财力,经常是无功而返的.自动化测试到底怎么了? 自动化测试的原则 原则1: 针对重点业务,进行回归的自动化测试 自动化测试一般都是需要编写脚本,通过脚本的执行来达到测试的

自动化测试入门、分类及工具使用说明

一开始接触编程的时候,还是感觉自动化测试在运维测试界,应该是高大上的东西了.那么自动化测试到底都有哪些常用的工具呢,它们到底有哪些各自的特色呢,今天和大家一起看看吧,具体里面的工具去搜一下就可以了,找找权威的网站,在这我就不一一追加了.下面是自动化测试分类大概有七种. 对Web UI 的自动化测试程序 对Windows 窗体UI的自动化测试程序 性能测试, 性能测试都需要用到自动化 数据库测试, 比如测试存储过程 接口测试 (这种只能用自动化测) 单元测试 API测试, 比如(测试WCF ser

自动化测试----打卡第四天

什么是自动化测试?不管你是刚入行的小白,还是已经在做软件测试的工作,相信你一定听说过或者接触过自动化测试.那么,自动化测试到底是什么意思呢?顾名思义,自动化测试是,把人对软件的测试行为转化为由机器执行测试行为的一种实践,对于最常见的 GUI 自动化测试来讲,就是由自动化测试工具模拟之前需要人工在软件界面上的各种操作,并且自动验证其结果是否符合预期.你是不是有点小激动?这似乎开启了用机器代替重复手工劳动的自动化时代,你可以从简单重复劳动中解放出来了.但现实呢?自动化测试的本质是先写一段代码,然后去

性能测试分层模型-选自书籍:小强软件测试疯狂讲义

百度搜索:小强测试品牌 新书推荐 本书终于在前段时间出版了,现在已经可以在各大网店购买了,搜索书名即可.书籍购买地址:https://detail.tmall.com/item.htm?id=547310727717 这里我特别提前说一句:任何东西都有一定的受众群体,世界上也没有任何东西可以让所有人100%满意.So,本书也是.只要本书中有一个篇章的内容给你带来了影响那就是这本书的价值!感谢大家的支持. 引子 我为什么会把这个话题放到最开始呢?就是因为这些年在企业工作中.在教育领域培训中接触过不

前端里移动端到底比pc端多哪些知识?

前端里移动端到底比pc端多哪些知识,为啥面试时好多公司都问h5水平如何? 我做过几年的web前端开发,就简单谈谈自己的感受吧. 首先来看看PC端和移动端在前端开发上的一些区别: (1)PC考虑的是浏览器兼容性,移动端开发考虑的更多的是手机兼容性,因为目前不管是android手机还是ios手机,一般浏览器用的都是webkit内核,所以做移动端开发,更多考虑的应该是手机分辨率的适配,和不同操作系统的略微差异化: (2)在部分事件的处理上,移动端自然是偏向于触屏的,所以触屏事件的一些规律要多摸索一下,

开启真机的View Server引入HierarchyViewer/By写monkeyrunner自动化测试脚本

其实相关文章网上也有不少了,不过在真机上开启View Server的中文文章好像只有一篇,前段时间按照这篇文章的内容,并结合英文源文去hack我的Nexus S(4.1.2)也走了一点弯路.现在总结一下我的步骤(其实有相当一部分拷贝了这篇,衷心感谢原文作者).并写点在开启View Server之后monkeyrunner的脚本. 先交待一下背景,monkeyrunner作为自动化测试Android系统工具在某些情况下还是比Robotium易用一些,不过monkeryrunner判断测试结果是否正

关于自动化测试的误区(一)

自动化测试作为软件测试的一种技术手段,时常被大家讨论.本人在自动化技术方面有过略有小成,今天聊一聊关于自动化的一些误区,以帮助新手能正确的了解和认识自动化一些概念. 测试的行为本质是什么? 为什么先从这个概念开始谈起,因为对于新手来说,总是把自动化看得很高端和复杂. 先来看看功能测试如何进行的:编写测试用例,测试用例当中最主要的是测试步骤和预期结果:测试人员根据测试用例执行操作步骤,然后通过眼睛和思考判断实际结果与预期结果是否相等.如果相等,测试通过:如果不相等,测试失败. 自动化测试要做的事情

软件开发到底是怎么一回事呢?

人生得一良友不易,友人是做数据库DBA(运维方向)出生,对软件开发算是没有什么经验,但是最近手头却有点儿事让它对软件这件事开始有了兴趣.于是就问我这个问题.我呢,水平很差,这么大的标题丢过来,怎么回答呢?好在友人给明确了方向: 代码管理,版本控制,补丁管理,架构设计,模块划分,接口设计,报错编码制定,日志设计,测试方法,安全管控,性能规划 然后我就根据这些,作答如下,既然写了这么多,就拿出来和大家分享. 1.代码管理,版本控制,补丁管理对于单一产品的公司,其实问题就是各种迭代和这些迭代的管理.首