首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

解密SuperMap iDesktop自动化测试技术

测试是使用人工或自动的手段来运行或测量软件系统的过程,以检验软件系统是否满足规定的要求。随着软件项目越来越大型化、复杂化,人工测试已经满足不了软件测试的要求,为了提高测试效率和质量,自动化测试的应用越来越普遍。

SuperMap iDesktop作为一款桌面GIS软件,尤为注重用户交互体验,这也使得用户界面(User Interface,简称UI)交互测试尤其重要。同时,iDesktop已提供了超过1500个功能入口,仅仅靠人工测试,无法充分反馈出当前的质量情况。因此,UI交互自动化测试成为了日常监控软件质量的必要手段。

UI自动化测试过程介绍

在分层自动化测试理论中,相对于单元测试和接口测试,UI自动化测试的投入产出比被认为是比较低的,那为何SuperMap iDesktop还是如此重视UI自动化测试?

因为无论SuperMap iDesktop内部功能代码逻辑多复杂、多重要,最终用户接触到的始终是界面交互与处理结果。单纯地靠单元测试和接口测试,无法充分证明SuperMap iDesktop交付给用户的功能的可用性。而SuperMap iDesktop本身的界面交互是比较稳定的,UI自动化测试可以将测试人员从大量简单、机械、重复的任务中解放出来,提升工作效率。

SuperMap iDesktop的UI自动化测试,通过对鼠标和键盘外接设备交互的模拟,真实地还原了用户使用桌面的场景:①打开数据→②鼠标点击打开功能界面→③设置参数→④执行功能→⑤检查结果。

用户使用场景

这也是比较常见的一个测试过程。特别是在临近版本发布阶段时,测试人员往往需要手工重复执行上千个这样的测试过程,以保证SuperMap iDesktop所有功能的可用性。当引入UI自动化测试后,测试人员的工作就发生了很大的变化,所有细节内容都将由测试脚本自动完成。测试人员的工作重心从手工执行测试过程转变为根据自动化测试结果判断测试过程是否存在问题。测试通过,一般可认为测试过程中涉及的功能正常;测试失败,则需分析是功能问题还是自动化脚本问题,并进行问题反馈或代码修复。

在SuperMap iDesktop自动化测试框架中,测试过程具体是如何被实现的?以“打开数据”这个动作为例,过程如下:①模拟鼠标点击Ribbon上的“文件”→②模拟键盘输入路径字符串→③模拟鼠标点击对话框中的“打开”→④自动检查是否成功打开目标数据源。

UI自动化测试过程模拟:打开数据

这样就完成了“打开数据”的整个自动化操作过程。内部实现上可以总结为:三次获取屏幕坐标点,三次鼠标点击屏幕坐标点,一次键盘输入字符。

对日常手工测试内容进行类似的分解操作后,便形成了大量的自动化测试案例。

解密关键点

为了方便案例的管理,SuperMap iDesktop引入了Nunit测试工具,结合“SuperMap iDesktop的功能在屏幕上的位置坐标点基本是既定的”这一特性,似乎只需要“Nunit管理案例+WindowsAPI模拟键盘鼠标”即可完成自动化框架的搭建。但随着案例数的增加,仅通过记录屏幕坐标来完成整个自动化测试过程,将会带来很大的维护成本,如功能位置发生任何变动都可能导致自动化案例内容的频繁修改等。

如何通过功能名称等显式信息,灵活并正确地获取到点击的屏幕坐标点,让SuperMap iDesktop做出对应的功能反应?

常见UI自动化测试工具的一般工作方式包含:①录制脚本→②执行脚本→③自动校验结果。但随着界面技术的不断创新,录制过程往往会存在对象无法识别的现象,且录制的脚本需要针对产品情况进行二次修改,对测试人员的开发能力有较高要求。自动化测试工具也可以通过反射来加载被测试程序,可以跨线程直接获取和设置被测试程序的各种控件属性等,却容易出现线程干扰,导致案例卡死等问题。通过反射加载的被测试程序会作为测试进程的一个线程来运行,共用测试主进程资源,也无法单独监控SuperMap iDesktop本身对操作系统资源的消耗。而实际手工测试中,SuperMap iDesktop是以进程来运行的,以线程方式进行自动化测试也不能很真实地还原交互操作。

那么,如何在维持SuperMap iDesktop进程独立性的情况下,解决稳定性问题呢?测试人员在长期实践过程中发现:通过以跨进程Socket通信传递控件信息的方式,结合桌面产品的二次开发特性,可有效地解决“对象无法识别”和卡死等问题,同时也维持了进程的独立性,能方便地收集到运行过程中的资源消耗等辅助信息,收集测试覆盖率(使用OpenCover工具)等。

至此,便形成了SuperMap iDesktop特有的UI自动化测试框架:Nunit管理测试过程 + Socket进程间通讯获取控件信息 + WindowsAPI模拟键盘鼠标操作。

自动化测试框架结构

SuperMap iDesktop自动化测试框架经过长期的实践积累和优化,形成了三层结构:

自动化测试框架的三层结构示意

1、基础交互层:结合SuperMap iDesktop的二次开发,在SuperMap iDesktop中增加一个接收消息的插件。该插件通过Socket协议接收测试端发送的控件位置请求消息,然后插件从SuperMap iDesktop内部获取控件信息并通知测试端。

通过Socket通信实现测试端与客户端间跨进程传递控件信息,是SuperMap iDesktop自动化测试框架的核心。以点击某个Button为例,过程如下图所示:

以点击某个Button为例的自动化测试执行过程示意

2、桌面公共UI操作封装:在1的基础上,将一系列常用的操作封装成工具集提供给测试人员直接使用,例如打开数据源、打开地图、点击Ribbon上某个具体的控件、点击工作空间中某个具体的右键菜单项等。

3、测试案例:根据手工测试内容,直接利用1和2的现有成果,将测试内容转化为测试案例,并采用Nunit测试工具进行管理。

目前SuperMap iDesktop基于上述的自动化测试技术和手段已能够很好地进行集成测试。实践证明,SuperMap iDesktop自动化测试框架可以很好地为SuperMap iDesktop提供质量保障,有效地节省了人力和时间资源,提高了测试效率。

作者 |端产品研发中心 刘晓妮 张世燕

责编 | 王静静

【近期回顾】

欢迎转载~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190221B12RRY00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券