随着马蜂窝酒店业务规模的不断扩大,酒店平台与各OTA的业务往来越来越频繁。在实际业务中,我们在向各个OTA平台结算金额之前,需要通过对账环节与自己的系统订单进行比对,确认双方的订单金额和状态是否存在异常,并以此为依据结算金额的计算依据。为什么需要自动化测试?众所周知,会计数据对准确性的要求非常高。此前,酒店会计数据的一致性测试基本依赖于财务人员的人工处理。图1:过去我们业务的增长导致对账系统的测试任务越来越多,传统测试方式带来的问题也越来越明显:1)多源数据。记账数据来自不同的OTA平台,数据格式没有统一的标准和规范,影响了数据处理的效率。2)大量数据的处理效率和准确性。数据的检验结果由会计人员手工比对Excel文件得到。每个月需要处理大量流量数据。处理速度慢,准确率低,不可避免地会出现错误。3)多轮回归测试。测试期间的任务过程漫长且重复。经过多轮测试,人类很容易感到疲倦和厌倦,从而导致错误率增加,影响后续的测试结果。4)问题定位。采用人工测试,很难完整记录测试结果和测试报告。很多情况下,测试过程中遇到的异常情况无法实时记录,导致问题定位时间较长。基于酒店对账任务的现状和问题,我们决定以Excel表格为数据源,使用Java语言对数据进行整合、筛选、比对,搭建酒店对账自动化测试平台。一方面,它可以有效地用于在短时间内处理大量数据;另一方面,可以将财务人员从复杂的人工对账测试中解放出来,提高工作效率。图2:现在我们是这样的通过这篇文章,希望和大家分享这几个月来马蜂窝酒店财务对账项目的探索和实践,对对账自动化测试平台做一个总结。数据驱动的自动化测试系统前文提到,酒店的对帐数据来自不同的OTA,数据格式存在一定差异。如何使用同一套代码来处理这些数据差异,提高脚本的复用性?我们采用了数据驱动的测试方法。1.如何理解数据驱动如果把测试数据和代码结合起来,每次修改数据,两者都会同时改变。该测试方法不适用于酒店业务数据的处理。数据驱动方法将测试数据参数化,并将参数传递给测试脚本类的构造函数,使数据的变化驱动自动化测试的执行,最终改变测试结果。这样可以将测试数据和测试代码分开,单独维护,只需要少量的代码就可以生成大量的测试用例,提高了脚本的复用性和可维护性。2.技术实现结合以上,我们可以明确,在数据驱动的自动化测试框架中,必须具备与电子表格、文本文件、数据库等集成的能力;另一个必须有数据来控制测试的业务流程。我们使用Maven+TestNG+Java+POI来实现整个框架。--Maven是一个通过配置文件管理项目的构建工具。应用于自动化测试时,无论是Jar包管理还是测试用例执行,都表现良好。--TestNG是一套测试框架,可以使用注解来控制测试过程,从而实现增强的测试功能。它加入了单元测试、注解、组概念、套件、异常、参数化、依赖等测试思想,从而能够很好地支持和管理自动化测试任务。--ApachePOI是一种流行的API,它允许程序员创建、修改和显示MSOffice文件。它是由Apache软件基金会开发和分发的开源库,用于使用Java程序设计或修改MS-Office文件。它包含将用户输入的数据或文件解码为MSOffice文档的类和方法(详见官网:http://poi.apache.org/)。通过使用ApachePOI解析Excel文档,结合Java语言对文档内容进行进一步处理,可以达到自动化测试的效果。一个测试用例的具体执行流程为:图3:测试用例执行流程自动化测试框架总体结构图:图4:自动化测试框架结构图各模块功能:DataProvider:传递测试数据通过构造函数给测试脚本,从而达到Data-driven的目的;TestScript:封装测试脚本;commonFunction把一些常用的方法抽取出来放在这个模块中;数据:提取一些共享的公共数据,放在本模块中;报告:测试结果模块;ExecutionEntry:xml文件,可用于配置测试范围。整个框架的工作流程大致可以描述为:Testng.xml作为测试入口;DataProvider通过测试数据驱动测试脚本的执行;测试脚本通过POI读取测试数据,Java分析测试数据,然后输出Report(需要在Testscipt中使用数据模块和CommonFunc模块。)3.框架优化好的测试框架的目标是减少代码量,大大提高测试脚本开发效率。但不是一蹴而就的,而是随着项目的不断深入而不断完善。自投入使用以来,我们的框架一直在不断优化。我们主要与大家分享以下经验:1)数据模块。在测试的过程中,发现有些测试数据会被频繁使用,经常需要更改,而且每次更改需要更改很多文件。我们将这部分数据收集起来,放到了Data模块中。2)commonFunction模块。在读写Excel时,通过对不同单元格数据类型的判断和处理,增强了单元格操作的健壮性。3)Excel文件的读写需要多次循环。为了提高性能,应该提前对数据进行预处理,避免嵌套多个循环。近期规划及演进方向测试数据的数据源是通过Excel文件获取,需要人工进行数据整合,对持续集成是一个障碍。通过向接口传递参数来获取数据是一个理想的想法。通过接口获取数据的方式可以通过Jenkins实现持续集成,测试人员可以为财务人员提供一个可视化的参数输入入口,让财务人员可以触发测试脚本进行测试。这样做可以释放测试资源、增加回归频率并降低财务风险。本文作者:高攀,马蜂窝酒店研发团队高级测试工程师。主要负责酒店自动化系统的建设和优化,以及金融订单业务线的整体测试。【本文为专栏作者马蜂窝科技原创文章,作者微信公众号马蜂窝科技(ID:mfwtech)】点此查看作者更多好文
