关键词:
软件测试
自动化测试
GUI模型
遍历测试
摘要:
在移动端应用蓬勃发展的市场中,各大移动端软件需要抢占用户,提升用户留存率,因此会对软件进行不间断的更新迭代。为把控上线质量、防止频繁发版带来不可预知的问题,需在上线前进行严格测试。除软件功能外,最影响用户体验感和留存率的就是GUI(Graphical User Interface,图形用户界面)及软件稳定性。市面上已有很多自动化测试工具,但应用后并不能完全适配当下各公司的主流页面自动化测试。因此,如何设计和实现一个基于公司的用户范围和页面特点、支持GUI自动测试、能够及时上报稳定性故障的自动化遍历测试工具是亟待解决的问题。
本文介绍了作者在美团实习期间开发的名为Mravel的GUI自动化遍历测试系统。首先,通过分析公司产品特点,分析稳定性问题来源,阐述本系统的背景和实际意义,得出系统需求;其次,介绍了系统结构,根据系统需求和测试流程将系统划分为元素获取、自动生成测试用例、元素遍历、用例管理和异常管理五大模块;再次,对模块进行了详细设计与实现;最后针对需求设计测试用例测试本系统的功能与性能,将本系统与常见的自动化测试工具进行对比,得出本系统的优势。
本系统采用C/S架构,并实现了跨平台测试。根据公司产品页面特点开发了用于高效获取测试元素的SDK(Software Development Kit,软件开发工具包)。在元素获取时,遍历测试调用方为客户端,SDK为服务端,接收HTTP请求,完成终端元素的采集筛选并返回。为探索GUI模型并生成元素遍历路径,本系统采用基于模型的自动测试生成技术,提出了基于GUI事件序列的遍历算法MESG-Tree,该算法将UCT(Upper Confidence Bounds for Trees)思想应用于路径选择,并针对测试任务对其做了改进,能够利用全局信息,权衡探索和利用选择高价值和高覆盖率的遍历路径。采用基于控件路径的方法保存生成的遍历路径作为测试用例,保存的测试用例可在不同设备上自适应回放。进行元素遍历时,遍历测试调用方为客户端,移动端设备为服务端,接收HTTP请求,使用WDA(Web Driver Agent)或ADB(Android Debug Bridge)等工具完成对i OS或Android设备的远程控制。遍历测试过程中:采用感知哈希算法对比元素操作前后的界面截图,判定GUI功能正确性;保存用例的执行情况和执行数据,供相关人员进行用例管理;监控运行日志并抓取系统崩溃和内存泄漏等异常问题,将发现的异常进行反馈和统计。
目前本系统已成功接入上游系统,与各业务方成功建立连接并进行实际运用。相较以往的测试方法,本系统的遍历效率提升了47.5%,元素覆盖率提升了27%,错误发现率提升了50%,有效提高了人均工作效率,降低了回归测试人力成本。