要找到自动化测试的思路,首先得明确自动化测试的本质。对自动化测试的本质的理解不同,导致了在进行自动化测试过程中对于组建团队、制定目标计划等的不同,决定了最终自动化测试的实施和效果的不同。所以必须先把自动化测试的本质说明白。
谈本质的问题,每个人的理解是不尽相同的。咱们这里说的自动化测试的本质,主要基于对 “人工被机械替代 ” 的理解:随着工业时代的开启,“人工被机械替代”已成为很普遍的现象,运行着的机器,以成百上千倍于人工的效率在进行生产。如果测试能自动化,不也能节省大量人工吗?这也是人们的直观感受和期望。
但如果撇开直观现象和感受,我们如何看“人工被机械替代 ” 呢?
第一,能量。
粗略地从能量到角度看,人工过程是生物能量向动能转化的过程。就测试而言,是食物转化为脑力思考和手工测试的行动,再转化为电脑执行的电能。
机械是化石能源向动能的转化过程。就自动化测试而言,是化石能源和人的生物能(脑力思考)转化电能,电能之间再进行转化。
既然是能量转化,那么可以明确知道:1遵守能量的守恒定律,但实际的转化过程存在能耗;2 熵(无序性)会增大,为了有序,必须有额外的能量。
所以从能量的角度来理解:1 能量要守恒,那么人工测试与自动化测试所需要的能量是相当的,但能量的来源从生物能变成了一部分的化石能源或者电能,减少了人的生物能,所以人会轻松一些。但还是需要消耗生物能,人得设计自动化的工具,脚本。2 限于介质,能量不可能完全转化;限于脑力,测试不可能能全自动化,总有无法自动化的。3为了维持自动化的有序进行,必须额外地投入其他能量,就像是维护测试工具、脚本、测试环境等日常工作。
第二,经验。
能量之所以可以转化,需要介质。而人工转自动执行的重要介质是人的脑力。由人的脑力消耗到自动化的工具、脚本、测试场景等这些产出物是人的经验的表达。所以自动化测试,可以看成是测试的经验复制和积累的过程。
所以根据复制积累的经验不同,就可以产生不同的自动化测试。例如:
最常见的是积累手工测试人员的经验。于是就产生了很多以录制或模仿行为为基础的自动化方案。例如功能自动化工具的selenium、qtp,安全测试中的端口扫描、sql注入、脚本注入等工具。这从根源上回答了为什么脱离手工测试而开展的功能自动化测试都会失败的原因。
接着是积累由机器交互行为产生的经验。这必须借助手工测试运行,来录制或模仿机器间的通信过程。例如,常见的性能测试工具LR、jmeter。所以,从这个角度出发,就可以理解,性能测试人员一定要理解业务场景、系统交互流程、系统真实运行的场景。
再者是积累基于历史的经验。例如IBM的appscan家族的安全工具。通过积累各种web安全问题和变种,进行自动化的安全检测;findbugs、fortify通过积累bug模式和规则进行源码的自动扫描。
另外,就是根据自身业务特点进行的经验积累:
比如,对于偏重流程的系统,像交易系统,OA系统,不同的数据会走不同的流程,限于测试人员的经验范围,现在需要积累客户的经验范围进行自动化,就会需要把生产的数据下载到测试环境中,进行脱敏处理后、跑用户的数据进行回归测试,常被称为业务仿真测试。
比如,对于偏重规则或模型的系统,像风控系统、搜索引擎,不同规则的设置有不同的触发场景,不同的模型需要不同的基础数据。自动生成这些基础数据,营造场景的触发条件,或者不同因子的积分或计数条件来匹配模型,计算模型效果等。
当然,以上积累的经验都是来自人的。如果把机器学习加入到自动化测试中,积累机器自己的经验,或者挖掘生产数据,使其在一定程度上自我学习,也会是很有挑战的思路。
总的来说,自动化测试,不论功能、性能、安全等,都是能量转化的过程、是经验积累的过程。好的,这是一句废话,但不可忽视。
以上说的不能告诉你具体自动化测试的思路,理解自动化测试过程中的所有问题。但世界就存在于你的概念之中,当你明确了你的自动化测试的本质了之后,才能把握解决个中问题的解决方向。