一种接口测试方法以及装置
技术领域
本申请涉及数据处理领域,尤其涉及一种接口测试方法、装置。
背景技术
软件测试是伴随着软件的产生而产生的。早期的软件开发过程中软件规模都很小、复杂程度低,软件开发的过程混乱无序、相当随意,测试的含义比较狭窄,开发人员将测试等同于“调试”,目的是纠正软件中已经知道的故障,常常由开发人员自己完成这部分的工作。对测试的投入极少,测试介入也晚,常常是等到形成代码,产品已经基本完成时才进行测试。到了上世纪80年代初期,软件和IT行业进入了大发展,软件趋向大型化、高复杂度,软件的质量越来越重要。这个时候,一些软件测试的基础理论和实用技术开始形成,并且人们开始为软件开发设计了各种流程和管理方法,软件开发的方式也逐渐由混乱无序的开发过程过渡到结构化的开发过程,以结构化分析与设计、结构化评审、结构化程序设计以及结构化测试为特征。
大数据时代已来,软件应用程序离不开数据库,无论是在Web、桌面应用、客户端服务器、企业和个人业务,都需要数据库在后端操作。同样的在金融、租赁、零售、邮寄、医疗领域中,数据库也是不可缺少的。随着应用的复杂程度增加需要更强大和安全系数高的数据库才可以满足需求。为了满足高频率的应用程序事务(如银行或财务应用),数据库的可靠性,与安全性成为首要之重。
JDBC接口是一个JavaAPI,可以访问任何类型表列数据,特别是存储在关系数据库中的数据。JDBC代表Java数据库连接。JDBC库中所包含的API任务通常与数据库使用:如连接到数据库,创建SQL或MySQL语句,在数据库中执行SQL或MySQL查询,查看和修改记录。
在JAVA领域里的测试框架,JUnit是最多人使用的,它可以帮助我们编写单元测试,整合测试等,并有测试分类,测试运行器等功能。它包括以下特性:用于测试期望结果的断言(Assertion)、用于共享共同测试数据的测试工具、用于方便的组织和运行测试的测试套件、图形和文本的测试运行器。
如今一个项目迭代的周期越来越短,频次越来越高,每一次的改动都需要去做回归测试,而回归测试动则几十条甚至上百条,在这种节奏下,已经没有办法再依靠传统的手工测试去支撑,可以理解的是,人工手动检测的效率低下,并且由于需要检测的数量较多导致人工手动检测的过程当中容易出现检测错误的问题,故现有的人工手动检测的方式会导致接口回归测试的效率低下且精确性降低,故此,亟需一种新的接口回归测试方案。
发明内容
本申请提供一种接口测试方法,以提高接口测试的效率和测试结论的准确性。
第一方面,本申请提供了一种接口测试方法,所述方法包括:
获取测试用例文件;所述测试用例文件包括测试指令以及所述测试指令对应的预期测试结果;
调用目标接口执行所述测试指令,得到测试结果;
根据所述测试结果与所述预期测试结果,确定所述目标接口的测试结论。
第二方面,本申请提供了一种接口测试装置,所述装置包括:
文件获取单元,用于获取测试用例文件;所述测试用例文件包括测试指令以及所述测试指令对应的预期测试结果;
结果获取单元,用于调用目标接口执行所述测试指令,得到测试结果;
结论获取单元,用于根据所述测试结果与所述预期测试结果,确定所述目标接口的测试结论。
第三方面,本申请提供了一种可读介质,包括执行指令,当电子设备的处理器执行所述执行指令时,所述电子设备执行如第一方面中任一所述的方法。
第四方面,本申请提供了一种电子设备,包括处理器以及存储有执行指令的存储器,当所述处理器执行所述存储器存储的所述执行指令时,所述处理器执行如第一方面中任一所述的方法。
由上述技术方案可以看出,本申请提供了一种接口测试方法,所述方法可以先获取测试用例文件,其中,所述测试用例文件包括测试指令以及所述测试指令对应的预期测试结果;然后,可以调用目标接口执行所述测试指令,得到测试结果;接着,可以根据所述测试结果与所述预期测试结果,确定所述目标接口的测试结论。可见,本申请通过调用目标接口执行所述测试指令,以完成对于目标接口的测试,得到所述目标接口的测试结论,这样,便可以实现对目标接口的自动化测试,而不需要和现有技术一样,需要人工手动对接口进行测试,避免出现人工手动检测的过程当中出现检测错误的问题,从而提高了接口测试的效率和测试结论的准确性。
上述的非惯用的优选方式所具有的进一步效果将在下文中结合
具体实施方式
加以说明。
附图说明
为了更清楚地说明本申请实施例或现有的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请一实施例提供的一种接口测试方法的流程示意图;
图2为本申请一实施例提供的一种接口测试方法的流程示意图;
图3为本申请一实施例提供的一种接口测试方法的流程示意图;
图4为本申请一实施例提供的一种接口测试装置的结构示意图;
图5为本申请一实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合具体实施例及相应的附图对本申请的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
下面结合附图,详细说明本申请的各种非限制性实施方式。
参见图1,示出了本申请实施例中的一种接口测试方法,本申请可以应用在电子设备中,例如客户端、终端设备或者服务器等,需要说明的是,在一种实现方式中,本申请是可以基于JAVAJUNIT测试框架而实现。在本实施例中,所述方法例如可以包括以下步骤:
S101:获取测试用例文件。
所述测试用例文件可以包括测试指令以及所述测试指令对应的预期测试结果。其中,测试指令可以理解为用于调用目标接口执行测试的指令,而测试指令对应的预期测试结果可以理解为调用目标接口执行测试指令所获取到的理想结果,可以理解的是,预期测试结果可以用于判断利用测试用例文件对目标接口进行测试的结果进行验证。
在本实施例的一种实现方式中,测试用例文件可以为SQL文件,其中,测试用例文件中可以包括测试指令对应的SQL语句,比如SQL语句[sql-test],[sql-test]所标识的SQL语句作为测试主步骤,以便可以调用目标接口执行测试指令。
在一种实现方式中,在JUNIT单元测试框架中,读取测试用例文件SQL文件目录下的所有文件名并作为参数传入测试程序入口,以实现测试用例的批量执行。测试用例通过JDBC接口远程连接被测数据库,并执行SQL语句,并接收返回的数据,写入并保存到out文件中。定义预期结果exp文件(即所述测试指令对应的预期测试结果),将预期返回的结果写入并保存。通过所定义的exp预期结果文件与实际保存的返回out结果文件(即所述测试指令对应的测试结果)做diff比较,检查其一致性,以实现自动化测试。
S102:调用目标接口执行所述测试指令,得到测试结果。
在本实施例中,在获取到测试指令之后,可以调用目标接口执行所述测试指令,得到测试结果。在一种实现方式中,所述目标接口可以为JDBC接口。以图2举例说明,假设在测试指令SQL语句[sql-test]的test函数中,可以用于执行读取SQL文件并执行[sql-test]中的SQL语句,并对out文件和exp文件内容的diff结果做断言。
在一种实现方式中,所述测试用例文件还包括前置指令,即测试用例文件中可以包括前置指令对应的SQL语句,比如SQL语句[sql-setup],在setUp函数中,可以创建数据库连接,以及读取SQL文件并执行[sql-setup]中的SQL语句。具体地,在所述调用目标接口执行所述测试指令,得到测试结果的步骤之前,所述方法还包括:调用所述目标接口执行所述前置指令,以使得所述目标接口与被测数据库连接。也就是说,本申请中可以调用所述目标接口执行所述前置指令,以使得所述目标接口与被测数据库连接。测试前置函数setUp(@Before),test(@Test),tearDown(@After),data(参数化函数),构造函数。如图3所示,在一种实现方式中,所述前置指令可以包括连接URL、用户名、密码,其中,所述连接URL包括被测数据库的IP地址、端口参数、数据库名称,这样,可以利用连接URL可以确定被测数据库,并且与被测数据库进行连接,并且可以利用用户名和密码获取访问被测数据库的权限,以便进行后续操作;可以理解的是,可以利用置指令对应的SQL语句[sql-setup]的setup函数调用目标接口连接被测数据库,执行sql文件中带有标签[sql-setup]的语句。需要说明的是,数据库信息如IP地址,端口号,数据库名,用户名,密码等信息均保存在properties文件中,将这些信息以及数据库的常用操作封装成一个JDBC类,供上层调用。相应地,如图2所示,所述调用目标接口执行所述测试指令,得到测试结果,可以具体为:调用所述目标接口对所述被测数据库执行所述测试指令,得到所述测试结果,即调用所述目标接口JDBC接口模块对所述被测数据库执行所述测试指令对应的SQL语句,得到所述测试结果(即初始结果)。
在一种实现方式中,所述测试用例文件还包括:后置指令;即测试用例文件中可以包括后置指令对应的SQL语句,比如SQL语句[sql-teardown],SQL语句[sql-teardown]所标识的SQL语句作为测试环境恢复的步骤,所返回的数据不作验证,以保证此测试用例所做的配置不影响下一个测试用例。在SQL语句[sql-teardown]的tearDown函数中,读取SQL文件并执行[sql-teardown]中的SQL语句,并中断数据库连接,在data函数中,接收测试参数数据,即SQL文件名,此函数可以匹配以某个字段结尾的所有SQL文件,即在teardown函数中,实现以下操作,执行sql文件中带有标签[sql-teardown]的语句,并关闭数据库连接。在data函数中,将所有需要被测试的sql文件名作为参数批量导入。具体地,在所述调用所述目标接口对所述被测数据库执行所述测试指令,得到所述测试结果的步骤之后,所述方法还包括:调用所述目标接口执行所述后置指令,以使得所述目标接口与被测数据库关闭连接。
需要说明的是,在一种实现方式中,所述测试用例文件为SQL文件,所述测试指令、所述前置指令和所述后置指令均为SQL语句。比如一个sql文件对应一条测试用例,每条测试用例(即测试用例文件)中包含需要执行的sql语句,并将它们使用标签[sql-setup],[sql-test],[sql-teardown]区分不同执行阶段,即测试前,测试中,测试后,设计测试用例时,确保测试用例的内容是正确并且完整的。在本实施例中,可以使用JUNIT测试框架编写测试脚本,作为测试入口,重写setup,test,teardown,data函数,从而得到测试用例文件。也就是说,测试用例文件中的SQL语句分三部分,并添加以下标签做标识:[sql-setup],[sql-test],[sql-teardown]。[sql-setup]所标识的SQL语句作为测试前的环境准备操作,所返回的数据不作验证。[sql-test]所标识的SQL语句作为测试主步骤,所返回的数据将写入out文件,并与预期结果exp文件做diff比对。[sql-teardown]所标识的SQL语句作为测试环境恢复的步骤,所返回的数据不作验证,以保证此测试用例所做的配置不影响下一个测试用例。
在本实施例中类SqlFilesUtils.java实现文件的操作,此框架涉及三种主要文件sql,exp,out。文件sql操作包含如下:读取sql文件中的语句,将含有注释符号的行排除,以传入的标签作为提取标志,提取相应部分的语句,并返回。文件exp操作包含如下:定义sql文件标签[sql-test]中的语句及执行后返回的结果。文件out操作包含如下:将sql文件标签[sql-test]中的语句执行的结果输出并保存。类JDBCUtils.java实现JDBC接口的封装。实现连接数据库,执行sql语句并返回结果,关闭数据库连接的操作。
由于本申请中,测试用例文件包括所述测试指令、所述前置指令和所述后置指令,故如图2所示,在所述调用目标接口执行所述测试指令,得到测试结果的步骤之前,所述方法还包括:提取所述测试用例文件中的所述测试指令、所述前置指令和所述后置指令。在本实施例中,获取到测试用例文件后,可以先获取所述测试用例文件中的每一句SQL语句,接着,再根据各个SOL语句所携带的标签,确定所述测试指令、所述前置指令和所述后置指令;例如若SQL语句的标签为[sql-setup],则将该SQL语句确定为前置指令对应的SQL语句,若SQL语句的标签为[sql-test],则将该SQL语句确定为测试指令对应的SQL语句,若SQL语句的标签为[sql-teardown],则将该SQL语句确定为后置指令对应的SQL语句。
S103:根据所述测试结果与所述预期测试结果,确定所述目标接口的测试结论。
在获取到测试结果之后,可以将测试结果和预期测试结果进行比较,若测试结果和预期测试结果相同,则所述目标接口的测试结论为测试通过,若测试结果和预期测试结果不相同,则所述目标接口的测试结论为测试失败。
在本实施例中,预定义测试指令对应的预期测试结果(即exp文件验证结果)的详细过程为:
所述的测试用例包括两种类型,一种为正向测试用例,另外一种为负向测试用例。正向测试用例为验证类似select sql语句或数据库元命令的返回结果(即测试结果)是否与exp文件(即预期测试结果)内的内容定义一致。负向测试用例为验证执行不合法的sql语句后返回的错误信息是否与exp文件定义的一致。两者的验证规则均一致,若输出的out文件保存的内容与exp文件预定义的内容一致,则判定为通过,否则为失败。
由上述技术方案可以看出,本申请提供了一种接口测试方法,所述方法可以先获取测试用例文件,其中,所述测试用例文件包括测试指令以及所述测试指令对应的预期测试结果;然后,可以调用目标接口执行所述测试指令,得到测试结果;接着,可以根据所述测试结果与所述预期测试结果,确定所述目标接口的测试结论。可见,本申请通过调用目标接口执行所述测试指令,以完成对于目标接口的测试,得到所述目标接口的测试结论,这样,便可以实现对目标接口的自动化测试,而不需要和现有技术一样,需要人工手动对接口进行测试,避免出现人工手动检测的过程当中出现检测错误的问题,从而提高了接口测试的效率和测试结论的准确性。
可以理解的是与现有技术相比,本申请具有以下优点:
1、大大缩短回归测试执行的时间。在为引入此套测试框架前,手工执行数据库整套测试用例(数量1000+),需要10人天,引入该测试框架后,仅需0.5人天,可以使用更少的人力、更快地完成JDBC接口的自动化回归测试。
2、测试人员减少了工作量。可以使用节省下的时间执行其他更为复杂的工作,更大化地保证产品的质量。
3、增加了测试的可信度。因自动化测试用例定义了测试过程,测试预期结果,保证了测试用例的执行的完整性以及可靠性。
4、此框架还提供了后续扩展的易用性。测试人员仅需将测试用例写成sql文件,并保存在对应的目录下,且定义好预期结果exp文件,即代表成功添加了一个测试用例,不需要对代码部分进行深入了解。
如图4所示,为本申请所述一种接口测试装置的一个具体实施例。本实施例所述装置,即用于执行上述实施例所述方法的实体装置。其技术方案本质上与上述实施例一致,上述实施例中的相应描述同样适用于本实施例中。本实施例中所述装置包括:
文件获取单元401,用于获取测试用例文件;所述测试用例文件包括测试指令以及所述测试指令对应的预期测试结果;
结果获取单元402,用于调用目标接口执行所述测试指令,得到测试结果;
结论获取单元403,用于根据所述测试结果与所述预期测试结果,确定所述目标接口的测试结论。
可选的,所述测试用例文件还包括前置指令;装置还包括调用单元,用于:
调用所述目标接口执行所述前置指令,以使得所述目标接口与被测数据库连接;
相应地,所述结果获取单元402,用于:
调用所述目标接口对所述被测数据库执行所述测试指令,得到所述测试结果。
可选的,所述测试用例文件还包括:后置指令;所述调用还用于:
调用所述目标接口执行所述后置指令,以使得所述目标接口与被测数据库关闭连接。
可选的,所述测试用例文件为SQL文件,所述测试指令、所述前置指令和所述后置指令均为SQL语句。
可选的,所述装置还包括提取单元,用于:
提取所述测试用例文件中的所述测试指令、所述前置指令和所述后置指令。
可选的,所述目标接口为JDBC接口。
可选的,所述前置指令包括连接URL、用户名、密码;其中,所述连接URL包括被测数据库的IP地址、端口参数、数据库名称。
图5是本申请实施例提供的一种电子设备的结构示意图。在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry StandardArchitecture,工业标准体系结构)总线、PCI(Peripheral ComponentInterconnect,外设部件互连标准)总线或EISA(Extended IndustryStandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器,用于存放执行指令。具体地,执行指令即可被执行的计算机程序。存储器可以包括内存和非易失性存储器,并向处理器提供执行指令和数据。
在一种可能实现的方式中,处理器从非易失性存储器中读取对应的执行指令到内存中然后运行,也可从其它设备上获取相应的执行指令,以在逻辑层面上形成接口测试装置。处理器执行存储器所存放的执行指令,以通过执行的执行指令实现本申请任一实施例中提供的接口测试方法。
上述如本申请图1所示实施例提供的接口测试装置执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable GateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
本申请实施例还提出了一种可读介质,该可读存储介质存储有执行指令,存储的执行指令被电子设备的处理器执行时,能够使该电子设备执行本申请任一实施例中提供的接口测试方法,并具体用于执行上述接口测试所述的方法。
前述各个实施例中所述的电子设备可以为计算机。
本领域内的技术人员应明白,本申请的实施例可提供为方法或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例,或软件和硬件相结合的形式。
本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。