自动化测试只不过是实施测试的一种手段,是用来弥补手动测试的不足的。

  举个例子:

  某手机研发公司,客户抱怨3G视频通话中偶尔有图像传输不过来的情况,测试部门展开测试,由人去一遍一遍不停地执行3G视频通话,耗费和很多人工,重复上百次上千次亦无法重现故障。

  正好这时候该公司刚刚开始组建自动化测试团队,自动化测试工程师编写程序,模拟各种通话条件,让手机去自动执行。程序部署好以后,在实验室内调集了十几部手机,开始执行,测试人员下班回家去了。第二天上班来看结果,已经自动执行了好几千次通话过程了,而这几千次通话过程中,有2次图像传输失败。

  然后,察看相应的串口日志、TAPI日志、关键函数的输入输出结果,已经可以锁定系统内部的故障点了。

  然后通过日志分析,找到了always reproduce故障的scenario,从而找到了正确的复现故障的repro steps

  然后把repro steps、log等关键信息提交给开发部门进行bug fixing

  这是一个真实的案例,从这个案例中你会看到,自动化测试可以实现手动测试不能或者不便于实现的事情。

  在上述案例中,手动测试在某些情况下无法地模拟特定的故障发生的条件,而且在大量重复测试中测试人员会产生疲劳的问题,是否每次都能正确地执行测试计划?人的因素带来很大的不确定性。更不要说手动测试的大量的人工消耗,要知道在一家知识型企业里,人工的价格是很昂贵的。该企业为了降低人工消耗的成本,雇佣大量初级的测试工程师,更加加大了人的不可靠性因素。

  但是自动化测试则不同,它开发成本略大,但执行成本很低,而且无论重复一千次还是一万次,都能精确执行测试计划。

  有些故障的重现可能在几千次测试中的1、2次,如果执行测试计划不精确,也许把这宝贵的1、2次故障重现给略过了,导致为测试付出的成本付诸东流。

  另外自动化测试能够比手动测试更加深入到系统内部,比如,在执行测试计划的同时,收集日志和系统关键状态、关键函数的输入输出。

  这一点虽然手动测试也可以做,但往往没有那么深入,而且为了多监控一个系统状态要使测试复杂度上升很多。

  但是自动化测试也有不足,这些不足恰好是可以通过手动测试来弥补的。比如某些理化条件非常复杂的测试,自动化测试很难模拟所有条件,这时不得不借助手动测试来完成测试计划。另外手动测试也更容易发现真实使用场景中的故障,而自动化测试则严重依赖于test case的设计是否严谨合理。

  往往初级的测试工程师一般是从手动测试开始做起,高级的测试工程师经常开发自动化测试工具,而的测试工程师的手动测试又比高级测试工程师增加很多,但这时的手动测试和初级工程师的手动测试有所不同,更侧重于深层次的分析。