2017-09-19 23:13

 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明,否则将追究法律责任。https://blog.kokojia.com/xqtesting/b-459.html

引子


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

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

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

自动化测试到底是什么


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

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

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

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

自动化测试分层模型


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

3b0800001418fdb8e402

图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语句都不会写,连中间件是什么都不知道你还和我们讨论什么。这样的“羞辱”虽然让我们不开心,但也直白地指出了现在很多测试工程师在整体知识体系方面的欠缺,只有把自己的短板补起来才有底气和实力去争取更美好的事物。

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

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

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

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

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

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

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


 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明,否则将追究法律责任。https://blog.kokojia.com/xqtesting/b-459.html