Diff技术是与传统的“比较预期输出与实际输出”略有不同的自动化测试技术。
Diff技术,顾名思义,其主要关心的是“不同”。以搜索引擎产品的测试为例:以同一个关键字在搜索引擎上进行多次重复测试(查询),随着时间段的变化,搜索引擎的索引数据也在发生变化,即使对同一个关键字,也不太可能在每次测试时给出一个所谓的“预期结果”。
怎样才能在这种情况下开展测试?一种可行的技术是就是“Diff”技术。下图展示了Diff方法的应用。
简单来说,Diff方法的应用包括以下步骤:
1.设置两个待比较的版本实例(通常是相邻的两个版本,例如RC和上一个产品版本),两个版本具有相同的数据基础或后端环境;
2.使用发送模块同时向两个版本发送相同请求;
3.比较模块收集两个实例的输出并对其进行比较;
4.比较结果输出为Diff报告。
Diff报告体现的是两个实例之间的不同,不同并非一定是由于缺陷导致,因此Diff报告需要通过人工审阅,判断报告中“不一致”的原因,决定后续步骤——后续步骤通常包括创建一个缺陷,安排探索性测试,或是据此确定回归测试范围等。
Diff测试技术可以在多个测试层面上被应用。例如,在UI层面上,可以通过图片Diff的方式(比较两个版本在相同输入情况下的UI截图)发现应用界面上的变化;对Web应用来说,也可以以文本Diff的方法比较两个实例输出的HTML文档,或是特定页面元素;在接口层面上,可以比较在两个实例上,相同的UI操作导致的前后端通讯的不同……
Diff技术甚至可以在测试过程中帮助确定测试范围。例如,对一个RC的全面的Diff发现,所有100个功能点中,有80个功能点的Diff结果与上一个版本没有任何差异,有20个功能点的Diff结果与上一个版本存在差异。基于这个结果,我们可以很容易的将存在差异的20个功能点作为RC测试的重点——个人认为,与依靠代码分析确定测试范围相比,这种方式直观有效得多。
当然,在实际项目中应用Diff技术也会遇到很多挑战,如何尽量消除Diff结果中的“噪声”是一个关键问题。以应用基于图片的Diff技术为例,如何消除图片比较结果中的噪声就是一个既需要技术手段(通过图片比较算法)也需要非技术手段(建立针对每个页面的mask)的话题。