发布新日志

  • 接口自动化测试工具研发

    2017-10-13 08:07:58

       此前做接口自动化测试用了不少工具,如selenium、robotframwrok+httplib、soapUI、jmeter等,总是在脚本与数据分离、脚本维护、前置数据及结果校验等问题上不能如意。为此,决定自己研发一个接口自动化测试工具以更好地解决以上问题,并实现测试配置的方法实现可以不同环境运行。

       工具主要分前端界面与执行引擎。前端界面采用BS架构,在浏览器上创建项目、接口定义、测试数据、测试配置以及执行计划等,后端主要是执行引擎,可基于HttpClient、okHttp、rest-assured等封装好的http请求组件(不用自己造轮子,而且在多线程处理及性能上往往不如封装好的组件)。执行时,执行引擎读取测试接口及数据构造http请求,然后再根据测试数据中配置的检查点进行检查,从而完成整个测试过程。

       此时,工具的基本框架已完成,解决脚本与数据分离、脚本维护(只需维护接口定义)问题。前置数据即是用例执行前的初始化动作,目前设计是通过三种方式实现。一、通用数据如账号密码那些则通过自定义的配置项传入,并缓存起来供测试过程中调用(如脚本中通过?{#client_id}方式调用),从而实现在不同环境中运行;二、自定义函数,此主要是与业务相关的,如接口测试在审批某个流程,此前的流程在初始化方法中调用自定义函数完成初始化操作或返回数据给测试用例。函数可实现某个业务操作或直接操作数据库(非测试环境可能不允许),但函数都需要在工具中定义(也曾考虑在前端编写函数存入数据库,执行时再调用,但考虑到函数需要调试,直接在工具中编写调试更方便,由此则出现工具与业务混杂的问题。当然也可将业务相关的迁移到另外一个工具中由测试工具调用,没有将工具产品化的计划就不折腾了)。三、执行其它测试用例作为初始化动作或获取相关数据。 目前三种方式基本可解决前置数据或初始化操作的问题,但测试数据中可能会较多的函数调用或参数调用,没那么直观,而且自定义函数需要一定的编码功能才能完成。

       结果校验也有两种方式实现。一、基本校验:如校验http返回状态码,校验返回数据是否存在(如果返回的是json字符串,建议基于rest-assured 实现执行引擎,此组件已封装有不少校验);二、自定义函数:可通过自定义函数进行业务检查或直接查询数据库方式进行验证,如果返回的是json字符串,可实现校验json schema,这个非常方便校验返回的字段及类型。

       此外,再加上查看测试报告、定时执行以及发送测试结果等辅助功能,工具基本成型。目前工具在试用完善中,待实践验证后或可开源出来供大家参考。
Open Toolbar