自动化测试现在已经得到了人们越来越多的关注,目前很多公司都已经专门成立了自动化测试团队,有专门的自动化架构师和自动化开发人员。对软件测试架构师来说,掌握自动化测试相关的知识和技术是必要的,但是掌握这些知识的目的不是设计自动化的架构或是具体来部署自动化,而是用好自动化:
第一,用好已有的自动化——让现有自动化能在产品测试中发挥最大的功效;
第二,会根据产品的测试需要向自动化团队提出合适的自动化需求,和自动化团队保持良好的互动。
要做到上面两点,需要建立正确的自动化观念;知道怎么去评价自动化的受益;对工具保持敏感度,能够根据产品选择合适的工具就是软件测试架构师需要学习了解的首要内容。

4.6.1 需要知道的一些自动化测试真相

一提到自动化测试,我们容易想到的就是“ 7×24 小时不间断测试” “反复测试”“效率高” “廉价”等赞美之词。但是,我们也发现,自动化测试做的人不少,成功的却不多。在这里,我们并不打算对自动化测试实施不尽如人意的原因、对策进行详细分析,这已经不在本书的讨论范围内了。我希望的是,作为软件测试架构师,能够比普通的测试、研发人员对自动化测试有更为深刻的认识,不盲目乐观,也不妄自菲薄; 不盲从于流行,也不限制于传统,能够真正将当前的自动化水平和产品测试结合起来,发挥它最大的作用。
我们要讨论的第一个关于自动化测试的“真相”就是它的“成本”。

1.自动化并不廉价,相反,自动化很贵
自动化测试是用一段程序去测试另外一段程序,这中间需要花费的成本其实并不比新开发一个产品少。
首先,很多团队希望部署自动化测试的原因,都是因为项目时间紧张,想通过自动化测试来提升效率,节省时间。但是他们却忽视了,开发自动脚本也是需要不少时间的,既然时间都已经不够用了,哪里还有时间再去开发脚本呢?这无异于缘木求鱼。在这种情况下,即使开发出来测试脚本,在时间压力下,脚本的质量必将无法保证,很多时候这些脚本没运行几次就被丢弃了,造成成本的浪费。
其次,自动化测试需要由懂自动化技术的人来操作。自动化测试其实也是开发代码,也需要专业人才才能胜任此项工作。
当然,自动化测试工具也不是免费的,需要购买或者二次开发。
时间成本、人力成本和技术成本,都是自动化中需要考虑的成本。自动化测试真的很贵,在部署之前,一定要考虑团队的消费能力。

2.自动化脚本往往没有想象中那么可靠
很多团队想部署自动化测试的另外一个重要原因是,自动化通过程序运行,验证标准是统一的,不会漏掉用例中的步骤,是最忠实可靠的。但具有讽刺意味的是,自动化测试给你的“OK”,可能真的只是幻象——脚本只会按照指定好的步骤去运行和确认结果,不会去捕捉一些突发的异常(或说至少不能全面地去捕捉)。而我们分析一下测试中发现的缺陷就能发现,究竟有多少缺陷是根据测试步骤发现的,又有多少缺陷是在步骤外“意外”发现的?换句话说,这些“意外”发现的缺陷,在部署自动化测试之后,可能都会发现不到。
除此之外,自动化测试工具或者自动化测试环境可能并不是那么可靠(自动化测试工具可能还没有被测产品测试得充分),自动化测试环境或者工具也会导致自动化测试“失败”,也就是说结果为“失败”的测试用例也不一定就是真的存在错误。
因此,无论是正确的自动化测试结果,还是错误的自动化测试结果,都需要人再去确认。

3.自动化测试不是单靠测试就能搞定的事儿
事实上,即便我们有了可靠的自动化测试工具和合适的自动化脚本开发人员,真正到了部署自动化的时候,也会发现并不是那么容易进行的。我们会发现,自动化测试需要SE、开发、测试、自动化工程师紧密配合才能有效运作起来,不是单靠测试就能搞定的。

自动化测试要想最大限度地发挥作用,就要尽早开发出脚本,这样才能反复使用脚本。但是自动化脚本不是想早开发就能早开发的,在开发之前有很多先决条件:
首先,“需求”要确定得清楚,特别是用户的输入输出,一定要尽早确认清楚,这要SE给力。
其次,“UI”或者“命令行”也需要尽早确定下来,而且确定了就最好不要随便更改了,这才利于自动化脚本中的一些“中间层”的设计,这要开发给力。
最后,测试用例要尽快写出来,这要测试给力。
上面无论哪个环节出现了问题,都会影响自动化测试的正常开展,使得自动化测试停滞不前,甚至返工,这其中蕴含的困难和阻力是不能小觑的。所以,对软件测试架构师来说,如果决定要部署自动化测试,可能就需要调整测试策略,加强对自动化测试中的风险识别,做好风险控制,并有针对性地对测试设计做一些调整。

4.6.2 如何评估自动化的收益

由于自动化是昂贵的,不是那么可靠的,也不是那么容易进行的,所以我们要有办法对自动化的收益进行评估,通过评估帮助我们在产品中制定合适自动化测试部署的策略,让自动化测试能够发挥最大的作用。

1.自动化测试的实施成本

自动化测试的实施成本,可以通过下面的计算公式来进行评估:
自动化实施成本=前期开发成本+后期的维护成本

其中,前期开发成本主要包含如下内容:

  • 人力成本: 和自动化开发人员相关的费用成本。
  • 时间成本: 自动化准备时间,自动化开发、调试的时间成本。
  • 金钱成本:工具购买、开发、维护的费用成本。

影响后期维护成本的是:

  • 产品变更引起的自动化测试脚本变更的成本。
  • 定位、修复自动化运行环境引起的脚本的健壮性问题的成本。
  • 定位、修复自动化运行环境的可靠性问题的成本。
  • 其他任何未知的引起测试脚本变更的因素引发的成本。

此外,这个评估中的内容,也是自动化部署时需要考虑的一些重要问题,在自动化部署前仔细分析考虑这些内容,还可以帮助我们提前识别风险,预防问题。

2.自动化测试的运行次数

自动化测试的运行次数是指在自动化测试脚本的生命周期内,这个脚本能够被执行的次数。显然,自动化测试的收益和自动化测试运行的次数是成正比的,脚本能够被运行得越多,自动化测试的收益才会越高。我们用如下的等式来表达两者之间的关系:
自动化测试的收益= 自动化测试的运行次数
自动化测试的运行次数为我们编写自动化测试脚本时,优先选择哪些测试用例提供了参考标准——不是优先选择容易进行自动化测试的测试用例,而是选择那些真正需要多次执行的测试用例。而且这个原则不仅适用在自动化脚本的开发上,还适用在自动化脚本的维护、自动化脚本可靠性的提升的优先选择上。

3.自动化测试实施成本比

自动化测试实施成本比的计算公式如下:
image.png
式中 k——手工执行自动化用例所花费的时间成本;
n——自动化测试用例执行的次数;
cl——花费在自动化测试前期的成本(时间成本+人力成本+金钱成本);
c2——花费在自动化测试后期的成本(时间成本+人力成本+金钱成本)。
这个公式可以帮助我们评估当前自动化测试的收益,还可以帮助我们确定适合当前项目的自动化测试和手工测试比。

4.6.3 自动化测试工具介绍

俗话说,“工欲善其事,必先利其器”。这个道理也适用于软件测试。对软件测试架构师来说,了解目前常见的自动化测试工具是有必要的。这样才能在有需要的时候,为产品测试选择合适的工具,或是向自动化测试团队提出需求。
我从单元测试、UI自动化测试和性能测试的角度,总结了常见的自动化测试工具。

128°第二部分突破:向软件测试架构师的目标迈进

1.单元测试工具

image.png

Compuware系列单元测试工具见表4-70。
表4-70 Compuware系列单元测试工具
image.png

Xunit系列单元测试工具见表4-71。
image.png

2.UI自动化测试工具

UI自动化测试工具见表4-72。
表4-72 UI自动化测试工具
image.png

3.性能自动化测试工具

性能自动化测试工具见表4-73。
表4-73 性能自动化测试工具
image.png