微信读书排版引擎自动化测试方案(3)

发表于:2017-03-10来源:WeRead团队博客作者:WeRead点击数: 标签:微信
那么,如何完成步骤 3 的自动化,让机器做人类的事情呢?我们把它再细分成三个步骤: 1. 获取排版结果的数据表示 首先,需要找到一种机器能读懂的数

那么,如何完成步骤 3 的自动化,让机器做人类的事情呢?我们把它再细分成三个步骤:

1. 获取排版结果的数据表示

首先,需要找到一种机器能读懂的数据表示,这种数据表示要既能够表示排版的结果、反映代码的修改,也能够通过算法来对比,对比的结果要便于可视化的展示,方便开发、测试同学判断差异是否符合预期。

我们的选择有:

  1. NSAttributedString,是从 EPUB、TXT 处理后得到的中间数据,包括文字和排版样式。这种数据结构比较抽象,没有一种很好的差异计算方法、和差异结果可视化方法。

  2. 阅读器屏幕截图,位图格式,借助各种成熟的数字图像处理算法,容易计算差异

考虑到 2 容易计算差异,可视化输出效果较好,我们选取阅读器屏幕截图作为数据表示。

2. 对比图像差异

选择了图像作为排版结果的数据表示,那么如何对比图像差异呢?

首先,我们要选取图像特征,然后才能对比图片差异。图像的特征,从视觉认知概念上,有低、中、高级特征:

  • 低级特征:如像素域、频率域、ImageHash
  • 中级特征:如 sobel 边缘特征
  • 高级特征:抽象视觉概念,比如从 CNN 算法训练得到的标签,如车、枪、球

这里我们希望每个像素的差异都能检测到,所以选取像灰度化处理过的图像矩阵作为特征。

原文转自:http://wereadteam.github.io/2016/08/23/Typesetter/