怎样对用户界面模块进行自动化测试

时间:2021-12-03 06:54:38

和同事聊到这个话题。自动化测试和单元测试对软件项目的重要度不言而喻;而在项目实践的过程中,我们往往发现,针对算法、业务逻辑、数据处理等模块的自动化测试比较容易,但针对一个图形界面进行自动化测试就比较困难,困难在很难模拟出图形界面上的用户输入,更难获得并判断其结果是否符合预期。

实际上,用户界面是否可自动化测试,是对整个系统架构的要求。在系统架构的层面上,就要求能够降低用户界面的耦合性,同时,要能够提供无需通过用户界面就能够访问业务规制的能力。在系统架构设计的初期,就要以创建可自动化测试框架系统为目的。系统越是具有可测试性,耦合关系就越弱。我们常常觉得用户界面难于测试,往往是因为耦合性过高。

仔细思考我们对用户界面的测试要求,可以分成两个方面:一是界面布局、显示效果等必须符合设计规约,二是界面的输入输出响应必须符合系统规约。关于第一点,使用自动化方法测试界面的布局实际上意义不大。想像我们写test case去测试某个按钮是否在指定位置上,或者某个标签的颜色值,其投入产出是完全不相符的。这类测试完全可以采取人工的方法,也不会影响到我们采用自动化测试的主要目的:保证多次迭代后的代码的准确性。

关于第二点,在系统的设计过程中,我们应该在构造界面GUI对象时保持其尽可能是轻量的,能够做到内容和表现分离。MVC就是典型的代表。构建GUI对象时,使用一个瘦视图类来负责界面表现,将其他的处理逻辑包装成我们所熟悉的便于测试的模块。采用这种设计模式,用户界面构造就易于使用test case来处理了。

易测试性本质上就是弱耦合性,如果发现自己的软件系统实在难于进行单元测试,不管是功能模块还是用户界面模块,往往就意味着系统架构和模块设计上出现了问题。