软件测试经验与教训之测试自动化
【制定一个合适的目标对于自动化测试的成功实施至关重要,目标越具体,自动化测试越有可能得到好的评价并取得成功】
【管理层支持对于自动化测试的成功至关重要,但是有些管理层意识不到自动化能带来什么好处。一是因为他们没有好好的亲自调查,二是做自动化测试的人没有积极的沟通】
1.测试自动化的目标是降低测试成本
1.迅速检测出新版本中的不稳定的变更
2.尽可能迅速暴露回归程序错误
3.快速报告问题,因而这会使程序错误修改更容易
2.自动化测试比手工测试拓展的测试范围:
负载测试:200人同时使用被测试软件可以通过自动化来模拟这些场景。
性能基准测试:系统的性能是越好还是越差
配置测试:软件常常在不同平台,不同配置上运行,自动化测试有利于提高测试覆盖率
耐力测试:被测试产品使用几周或者几个月会出现什么情况
竞争条件:有些问题只有在一定条件下才会发生。竞争同一资源的两个线程或进程的顺序重叠
组合错误:有些财务涉及多个功能之间的交互。
3.自动化测试需要根据测试需求,软件产品体系结构和测试人员技能选择自动化测试策略。
切不可要求100%自动化
4.好的自动化测试是人设计出来的,与测试工具无关。如果设计的很差什么工具都白搭。
5.手工测试与自动化测试的区别在于,手工测试可以临时想出新测试,也可以注意到没有或不可能预测的现象。
6.自动化测试每次运行都是以同样的速度,同样的顺序,完全一样的鼠标移动和键盘操作做同样的事,除非遇到很预期不一样的会报错,否则都显示为正常
自动化测试五十遍和手工测试五十遍带来的价值绝对是完全不一样的。
7.使用自动化测试脚本时需要注意的问题如下
1.自动化运行的过程和结果与描述是不同的测试过程。 有可能是编写的时候搞乱了,有可能是经过修改后但是忘记修改注释了
2.测试已不再重要。。例如70年代以前的核心内存的特定连线错误
3.覆盖率可能很差
4.虚警可能很常见:随着时间的推移,不够仔细的自动化测试编程和被推迟的维护,会由于自动化测试编程中的程序错误导致测试失败
5.测试结果可能有错:有些测试不检查任何结果,除非产品崩溃否则测试都会通过。有些测试包含程序错误,可跳过部分测试,或不能报告检测出的失效。有时候可能会设置无效的黄金输出 文件。
8.好的测试脚本必须及时的补充性测试,或者修复或删除老的测试。
9.现在好多的工具可以录制自动化脚本,但是能自己写的话最好自己写,因为这种录制的脚本和页面捆绑的太死了,如果页面有变更的话,修改起来很麻烦。
10.无论是自动化测试工具,还是自己编写的自动化脚本最让人烦恼 的一点就是脚本或者工具有bug,这种只能自己检查,而且很难检查出来。
11.可以通过测试自己的测试代码或评审测试代码来避免自动化测试出现重大失误的可能性。
12.自动化回归测试脚本退化然后不能使用的原因有:
1.用户界面或者输出格式的变更
2.在不同的环境上面使用自动化脚本
3.维护脚本的时候,改出问题了
4.使用测试脚本人员的变更。
13.在全面实行自动化测试的时候,可以先试点某一小部分的功能来进行自动化测试。自动化测试的试点有助于展示测试小组的 能力,使得到全面实施自动化测试的需要得到的资源跟容易一些。
14.自动化测试也是一个软件开发过程,需要程序设计,测试和项目管理
测试:明确自动化的测试目标
编程:测试自动化就是编程
项目管理:如果不重视管理自动化项目可能不会达到最初意愿。
15.设计自动化测试时,应该明确考虑到的问题
。保证测试已经被正确的设置
。描述预期结果
。发现潜在错误和副作用
。从潜在测试失效中恢复
。防止测试相互干扰
16.避免在测试脚本中使用复杂的逻辑,这样会使测试更难理解,也更容易出错,使用线性化有助于关注测试的目的如果测试太复杂了,就容易引入错误。要使测试简单,使测试线性化。
17.自动化测试一般分为数据驱动和关键字驱动
18.测试脚本需要把测试生成和测试执行分开,有以下几个优点
1.测试易于理解和评审,以及查看代码
2.独立的测试用例生成器比较容易测试
3.预先生成数据,则更容易重复测试
4.报告发现的程序错误更容易
5.可以使用不同的测试工具或程序设计环境生成和执行测试
19.利用编程接口自动化测试,公共API不会有很大变化,其稳定性对测试自动化很有吸引力。
20.我们可以选择更容易取得成果作为突破口提高自动化测试效率
1.系统设置与准备:自动安装和配置系统
2.辅助诊断:有些bug很难表现出来,数据破坏和内存泄露一般到该数据被访问或内存耗尽时才会出现问题,诊断根据可以在缺陷出现的时候就检测出来
3.会话记录:有些错误报告需要提供完整的配置信息,自动化可以自动收集和报告必要的信息
4.测试生成:利用自动化手段生成测试输入