IO和交互
IO, 是一个应用和外界交互的手段。
应用,最关键的交互对象,是用户。通过IO,应用可以响应用户在屏幕上的按,滑,拉等操作,显示相应的内容。一款应用,必须通过和用户的交互,才能展现它的功能。如果按它点它都没反应,显而易见,这个应用没有存在的意义。
除了和用户的交互,应用时常需要和其他的软件配合,比如服务器,文件系统,数据库等等,它会读取一个网络请求,发送一条网络消息,修改一个文件等等。这种交互可以让不同的软件系统相互协作,共同完成用户所期待的功能。
由此可见,对一个应用来讲,IO必不可少。
IO和测试
然而,从软件自动化测试的角度来看,IO不仅增加了测试的难度,而且降低了测试的质量。
从和用户交互的角度来看,首当其冲的难题,自动化测试的实现绝不可能依赖于用户的手动介入,否则就不能称之为自动化测试了。一种对策,是事先录制下来用户的操作,然后将其重现。还有一个办法,就是用编程的方式,模拟用户操作。仅仅处理用户输入这一部分,就给测试带来了不少麻烦。
除此之外,还有应用和其他系统的交互。如果一个前端应用使用了后台,那么测试前端就得把后台服务器跑起来。在某些情况下这根本无法完成,比如交互的对象是一个不受自己控制的服务器。即便应用所需的各个交互对象都可以被成功构建,文件或网络的写入和读出,都会大大增加测试的执行时间,进而降低测试的质量。
测试策略
在这种情况下,我们需要什么样的测试策略?这个问题的答案,将是我们测试方案最根本的指导思想。
你开发了一个应用,你最需要测的是什么?我建议你现在暂停五分钟,好好想想这个问题的答案。
IO蒸馏
这恰恰是我想提出的IO蒸馏的概念,通过IO蒸馏,我们要把我们的核心竞争力给提炼出来,越纯越好,纯到所有的IO都被分离出来。一旦实现分离,我们就可以用一种模拟的假IO来替换难以控制的真IO,这样既能保证我们通过IO来测验应用的功能,又大大的降低测试的复杂度。
下图表示的是我们IO蒸馏的过程。
结语
对任何一款应用来讲,IO都扮演着至关重要要的作用,IO是应用体现它价值的舞台。然而,IO的自然属性对自动化测试带来了巨大的挑战。面对这个挑战,以测试核心竞争力为出发点的IO蒸馏,给我们带来了一套高效的测试方法。它把IO和应用的核心业务高度隔离开来,一方面使得应用的核心竞争力得以凸显,另一方面,让模拟假IO替换真IO成为可能,大大了提高了测试的效率。