具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
请请参照图1,图1示出了本发明实施例提供的服务端200与至少一个客户端100进行交互的示意图。服务端200可通过网络300与客户端100进行通信,以实现服务端200与客户端100之间的数据通信或交互。服务端200包括至少一个供客户端100进行接口测试的应用程序400。客户端100通过网络300与服务端200建立通信连接后,可通过网络300从向服务端200发送接口测试请求,并接收服务端200反馈的响应结果。
在本发明实施例中,服务端200为测试服务器。客户端100可以是,但不限于,智能手机、个人电脑(personal computer,PC)、平板电脑等。客户端100的操作系统可以是,但不限于,安卓(Android)系统、IOS(iPhone operating system)系统、Windows phone系统、Windows系统等。
请参照图2,图2是图1所述的客户端100的方框示意图。该客户端100包括接口测试装置110、存储器120、处理器130及通信单元140。
存储器120、处理器130以及通信单元140各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。接口测试装置110包括至少一个可以软件或固件(firmware)的形式存储于存储器120中或固化在所述客户端100的操作系统(operating system,OS)中的软件功能模块。处理器130用于执行存储器120中存储的可执行模块,例如接口测试装置110所包括的软件功能模块及计算机程序等。
其中,所述存储器120可以是,但不限于,随机存取存储器(Random AccessMemory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(ProgrammableRead-Only Memory,PROM),可擦除只读存储器(Erasable Programmable Read-OnlyMemory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-OnlyMemory,EEPROM)等。其中,存储器120用于存储程序,处理器130在接收到执行指令后,执行所述程序。通信单元140用于通过网络300建立客户端100与服务端200之间的通信连接,并用于通过网络300收发数据。
处理器130可以是一种集成电路芯片,具有信号处理能力。上述的处理器130可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)、语音处理器以及视频处理器等;还可以是数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器130也可以是任何常规的处理器等。
第一实施例
请参照图3,图3示出了本发明实施例提供的接口测试方法流程图。接口测试方法应用于客户端100,其包括以下步骤:
步骤S101,根据树状结构图,获取待测接口的目标测试用例,其中,树状结构图包括多条分支,每条分支形成一条测试用例,目标测试用例为树状结构图中的一条目标分支形成的测试用例。
在本发明实施例中,树状结构图可以是思维导图,其由一个个节点组成,包括顶级节点、一级节点、二级节点等,顶级节点是根节点,一级节点隶属于顶级节点,二级节点隶属于一级节点,思维导图由测试人员根据实际的测试需要进行编写。例如,思维导图的每条分支均包括一级节点和隶属于该一级节点的所有二级节点,也就是说,一级节点、隶属于该一级节点的所有二级节点提供的信息共同形成一条测试用例。
在本发明实施例中,二级节点可以包括请求节点、响应节点,还可以根据需要在二级节点中包括备选节点,也就是求节点、响应节点和备选节点是一级节点的子节点,每个二级节点都必须包括请求节点和响应节点。换句话说,一条测试用例必须包含一级节点提供的信息、以及隶属于该一级节点的请求节点和响应节点提供的信息,如果有备选节点,则还应该包括备选节点提供的信息。作为一种实施方式,一级节点必须包括接口名称,二级节点必须包括请求节点和响应节点,二级节点可以包括备选节点。其中,一级节点提供待测接口的参数信息,请求节点提供待测接口的请求数据信息,响应节点提供待测接口的响应数据信息,备选节点提供查询服务端200的数据库的查询语句、以及该查询语句执行的预期信息。
请参照图4,以图4示出的树状结构图为例进行说明,其中,start节点为顶级节点,/api/cube.dashboard.pay.find节点和/api/cube.dashboard.page.get节点为一级节点,request节点、response节点和sql节点为二级节点,其中,request节点为请求节点,response节点为响应节点,sql节点为备选节点。/api/cube.dashboard.pay.find节点、以及/api/cube.dashboard.pay.find节点的子节点request节点、response节点和sql节点形成一条测试用例,/api/cube.dashboard.page.get节点、以及/api/cube.dashboard.page.get节点的子节点request节点和response节点形成一条测试用例。在本发明实施例中,目标测试用例是思维导图中的一条目标分支形成的测试用例,目标分支可以根据一级节点的接口名称来确定,例如,如果需要测试的接口为/api/cube.dashboard.pay.find,则api/cube.dashboard.pay.find节点、以及/api/cube.dashboard.pay.find节点的子节点request节点、response节点和sql节点形成的测试用例为目标测试用例。
在本发明实施例中,由于思维导图自身的特性,在接口发生变化时,可以通过拖动思维导图的节点就可以快速修改测试用例,也就是说,当接口的名称发生变化而执行的功能不变时,只需要在思维导图中,拖动新的一级节点至原有的一级节点即可,而不需要重新编写测试用例。如果多条测试用例都是用于测试同一个接口,则只需要修改思维导图中相关的多条分支各自对应的一级节点,即可完成多条测试用例的批量修改。例如,在图4中,当接口“cube.dashboard”发生变化时,只需要将新的一级节点,拖动至原有的一级节点处,即完成了测试用例的修改。
作为一种实施方式,测试人员可以使用xmind或freemind软件编写思维导图,思维导图可以使用XML(Extensible Markup Language,可扩展标记语言)格式存储。因此,根据树状结构图,获取到的待测接口的目标测试用例也是基于XML的文件。
步骤S102,判断目标测试用例是否符合预设规范。
在本发明实施例中,预设规范可以包括,但不限于一级节点为接口名称、二级节点包括请求节点和响应节点、节点名称使用英文且单词拼写无误等。
在本发明实施例中,如果判定目标测试用例不符合预设规范,则执行步骤S103,如果判定目标测试用例符合预设规范,则执行步骤S104。
需要说明的是,在本发明实施例中,根据需要步骤S102可以省略,也就是说,默认目标测试用例符合规范,根据树状结构图获取到待测接口的目标测试用例之后,可以直接执行遍历目标测试用例的步骤,即执行步骤S104。
步骤S103,对目标测试用例中相应的节点进行标注且不执行遍历目标测试用例的步骤。
在本发明实施例中,如果判定目标测试用例不符合预设规范,则对出错的节点进行标注且不执行遍历目标测试用例,并将标注有出错节点的目标测试用例反馈至测试人员,使得测试人员可以直观地看到错误并进行修改。测试人员修改好之后,触发程序模块继续执行步骤S102,直到测试人员将测试用例修改到合格为止,也可以设置程序模块间隔预设时间(例如,2分钟)执行一次步骤S102,直到测试人员将测试用例修改到合格为止。
作为一种实施方式,可以使用一些特殊标注来表示出错的类型,例如,“×”号表示单词拼写错误,“+”号表示此节点忘记填写等,测试人员根据实际需要灵活设置特殊标注的样式、颜色等。请参照图5,图中的“×”表示“reqest”拼写错误,“+”号表示“response”节点忘记填写。
步骤S104,遍历目标测试用例,得到用例数据信息,其中,用例数据信息包括请求数据信息和响应数据信息,且用例数据信息由非标记语言构成。
在本发明实施例中,如果判定目标测试用例符合预设规范或者默认目标测试用例符合规范,则对目标测试用例进行遍历,以得到用例数据信息。用例数据信息由Python、Java、C、C++等非标记语言构成,故可以使用对应非标记语言的XML处理库对目标测试用例进行遍历,例如,使用Python对应的xml库https://docs.python.org/2/library/xml.html进行遍历,输出用例数据信息。
作为一种实施方式,遍历目标测试用例的方法可以为:首先,遍历顶级节点;然后,遍历一级节点,如果该一级节点包括接口名称(例如,一级节点为/api/apiname,则apiname为对应的接口名称),则依据该一级节点,得到待测接口的参数信息;再依次遍历该一级节点的所有子节点,也就是先遍历请求节点得到待测接口的请求数据信息、后遍历响应节点得到待测接口的响应数据信息,如果有备选节点,则得到查询语句及该查询语句执行的预期信息,最终得到用例数据信息。遍历可以是生成key:value规则信息,如payId:539718,遍历图3中的第一条目标测试用例,得到的用例数据信息可以是:
请参照图6,步骤S104可以包括以下子步骤:
子步骤S1041,依据一级节点,得到待测接口的参数信息。
在本发明实施例中,如果该一级节点包括接口名称(例如,一级节点为/api/apiname,则apiname为对应的接口名称),则依据该一级节点,得到待测接口的参数信息。
子步骤S1042,依据请求节点,得到待测接口的请求数据信息。
子步骤S1043,依据响应节点,得到待测接口的响应数据信息。
步骤S105,根据请求数据信息生成用于测试待测接口的测试协议。
在本发明实施例中,遍历目标测试用例,得到用例数据信息之后,需要对用例数据信息进行组装,组装出用于测试待测接口的测试协议,其方法可以包括:首先,对用例数据信息添加公共参数,得到请求内容实体,公共参数可以包括:待测接口的签名信息、当前的时间,当前的ip等,签名信息是为了向服务端200发送请求时,便于服务端200进行校验;然后,根据请求地址、请求方法、请求协议和请求内容实体,得到用于测试待测接口的测试协议,请求地址可以是服务端200的地址,请求方法可以是POST方法,请求协议可以是HTTP协议。以步骤S104中遍历图3中的第一条目标测试用例,得到的用例数据信息为例,根据该用例数据信息中的request信息生成的测试协议可以是:
POST{{URL}}/api/cube/.dashboard.game.find
{
“id”:”1332396785551”,
“ensrypt”:”md5”,
“sign”:”{{sign}}”,
“client”:{
“caller”:”cube-dashboard”,
“os”:”android”,
“userAgent”:”uc”,
“uuid”:”0b4160cb-5d61-4d78-94c6-ffa979907c6f”,
“ch”:”WM_1010”,
“ip”:”127.0.0.1”,
“ua”:“ua”
“operator”:“aaa123@icloud.com”
},
“data”:{
“timestamp”:{{timestamp Header}},
“search”:{
“keyword”:”539718”,
“bueinessLine”:”1”}}
}。
作为一种实施方式,可以根据一级节点中的接口名称,反查该接口名称对应的请求地址,例如。如果一级节点为/api/cube.dashboard.xxx,则对应的请求地址就是cubedashboard地址。
步骤S106,依据测试协议向服务端发送接口测试请求,并接收服务端反馈的接口响应数据。
在本发明实施例中,测试协议组装完成后,依据测试协议向服务端200发送接口测试请求,服务端200通过该请求后,基于该请求自动执行接口测试,同时输出接口响应数据,接口响应数据可以是服务端200调用该接口成功之后启动的应用程序400的名称和地址,并将该接口响应数据反馈至客户端100,例如:请求服务端200测试添加游戏的接口时,服务端200添加对应的一款游戏,当服务端200调用该接口成功后,服务端200输出的接口响应数据就是该游戏Id及游戏名称。此外,服务端200输出该接口响应数据的同时,还会在数据库中添加一条新的游戏数据,该游戏数据包括游戏Id及游戏名称。以步骤S105中的测试协议为例,依据该测试用例像服务端200发送接口测试请求之后,服务端200基于该请求自动执行接口测试后,输出的接口响应数据就为““payId”:539718,payName”:支付宝”,同时将该数据添加至数据库中,并将该接口响应数据发送至客户端100。
步骤S107,将接口响应数据与响应数据信息进行比对,以得到测试结果。
在本发明实施例中,获取到服务端200反馈的接口响应数据后,将该接口响应数据与用例数据信息中的响应数据信息进行比对,如果接口响应数据与响应数据信息不一致,则接口测试未通过;如果接口响应数据与响应数据信息一致,且测试用例不包括备选节点,则接口测试通过;如果接口响应数据与响应数据信息一致,且测试用例包括备选节点,则执行备选节点的查询语句以从服务端200的数据库中获得查询结果,并将查询结果与备选节点的预期信息进行比对,如果查询结果与备选节点的预期信息一致,则接口测试通过;如果查询结果与备选节点的预期信息不一致,则接口测试未通过。以步骤S106中服务端200基于该请求自动执行接口测试后发送至客户端100的接口响应数据“payId”:539718,payName”:支付宝”为例,由于步骤S104中得到的响应数据“payId”:539718,payName”:支付宝”与该接口响应数据一致,如果查询结果也与备选节点的预期信息一致,则判定接口测试通过,如果如果查询结果与备选节点的预期信息不一致,则判定接口测试未通过。
在本发明实施例中,接口测试完成之后,可以输出测试报告,该测试报告可以与步骤S101中的树状结构图对应,也就是将步骤S101中的树状结构图中每一个分支的测试结果均进行标注。例如,测试通过则标注一个笑脸图标,测试未通过则标注一个哭脸图标等,测试人员可以根据实际需要灵活设置。测试报告可以设置为接口测试未通过时进行邮件告警。例如,发送邮件至步骤S105生成的测试协议中地址为“aaa123@icloud.com”的邮箱进行告警。
请参照图7,步骤S107可以包括以下子步骤:
子步骤S1071,当接口响应数据与响应数据信息一致时,输出第一测试结果并将该第一测试结果在树状结构图中进行显示。
在本发明实施例中,第一测试结果表示接口测试通过,可以在测试用例的一级节点处进行标注,例如,在测试用例的一级节点处标注一个笑脸图标。
子步骤S1072,当接口响应数据与响应数据信息不一致时,输出第二测试结果并将该第二测试结果在树状结构图中进行显示。
在本发明实施例中,第二测试结果表示接口测试未通过,可以在测试未通过的节点处进行标注,例如,在测试用例的一级节点和具体出错的节点处各标注一个哭脸图标。
子步骤S1073,当接口响应数据与响应数据信息一致时,执行备选节点的查询语句以从服务端的数据库中获得查询结果,其中,数据库包括接口响应数据。
在本发明实施例中,执行备选节点的查询语句以从服务端200的数据库中获得查询结果是为了实现测试结果的二次校验,可以保证接口测试的准确性。
子步骤S1074,当查询结果与备选节点的预期信息一致时,输出第三测试结果并将该第三测试结果在树状结构图中进行显示。
在本发明实施例中,第三测试结果表示接口测试通过,可以在测试用例的一级节点处进行标注,例如,在测试用例的一级节点处标注一个笑脸图标。
子步骤S1075,当查询结果与备选节点的预期信息不一致时,输出第四测试结果并将该第四测试结果在树状结构图中进行显示。
在本发明实施例中,第四测试结果表示接口测试未通过,可以在一级节点和备选节点处进行标注,例如,在测试用例的一级节点和备选节点处各标注一个哭脸图标。
请参照图8,/api/cube.dashboard.pay.find节点处的笑脸图标,表示接口cube.dashboard测试通过;/api/cube.dashboard.page.get节点和pageId节点处的哭脸图标,表示接口cube.dashboard测试未通过,且出错的节点为pageId。
在本发明实施例中,首先,利用思维导图编写测试用例,使得测试用例的可读性更强,同时,由于思维导图自身的特性,在接口发生变化时,可通过拖动思维导图的节点就可以快速修改测试用例;其次,测试人员利用思维导图编写好测试用例之后,遍历目标测试用例,得到包括请求数据信息和响应数据信息的用例数据信息,以执行接口测试,无需开发接口测试代码;最后,借助思维导图作为测试人员的测试用例编写工具,让测试人员更加聚焦于测试用例的编写,而不是测试代码的编写,可以有效提高接口测试的效率。
第二实施例
请参照图9,图9示出了本发明实施例提供的接口测试装置110的方框示意图。接口测试装置110应用于客户端100,其包括目标测试用例获取模块111、判断模块112、执行模块113、用例数据信息获得模块114、测试协议生成模块115、接口响应数据接收模块116及测试结果获得模块117。
目标测试用例获取模块111,用于根据树状结构图,获取待测接口的目标测试用例,其中,树状结构图包括多条分支,每条分支形成一条测试用例,目标测试用例为树状结构图中的一条目标分支形成的测试用例。
在本发明实施例中,目标测试用例获取模块111可以用于执行步骤S101。
判断模块112,用于判断目标测试用例是否符合预设规范。
在本发明实施例中,判断模块112可以用于执行步骤S102。
执行模块113,用于对目标测试用例中相应的节点进行标注且不执行遍历目标测试用例的步骤。
在本发明实施例中,执行模块113可以用于执行步骤S103。
用例数据信息获得模块114,用于遍历目标测试用例,得到用例数据信息,其中,用例数据信息包括请求数据信息和响应数据信息,且用例数据信息由非标记语言构成。
在本发明实施例中,用例数据信息获得模块114可以用于执行步骤S104。
请参照图10,图10为图9示出的接口测试装置110中用例数据信息获得模块114的方框示意图。用例数据信息获得模块114包括参数信息获得单元1141、请求数据信息获得单元1142及响应数据信息获得单元1143。
参数信息获得单元1141,用于依据一级节点,得到待测接口的参数信息。
在本发明实施例中,参数信息获得单元1141可以用于执行子步骤S1041。
请求数据信息获得单元1142,用于依据请求节点,得到待测接口的请求数据信息。
在本发明实施例中,请求数据信息获得单元1142可以用于执行子步骤S1042。
响应数据信息获得单元1143,用于依据响应节点,得到待测接口的响应数据信息。
在本发明实施例中,响应数据信息获得单元1143可以用于执行子步骤S1043。
测试协议生成模块115,用于根据请求数据信息生成用于测试待测接口的测试协议。
在本发明实施例中,测试协议生成模块115可以用于执行步骤S105。
接口响应数据接收模块116,用于依据测试协议向服务端发送接口测试请求,并接收服务端反馈的接口响应数据。
在本发明实施例中,接口响应数据接收模块116可以用于执行步骤S106。
测试结果获得模块117,用于将接口响应数据与响应数据信息进行比对,以得到测试结果。
在本发明实施例中,测试结果获得模块117可以用于执行步骤S107。
请参照图11,图11为图9示出的接口测试装置110中测试结果获得模块117的方框示意图。测试结果获得模块117包括第一测试结果输出单元1171、第二测试结果输出单元1172、查询语句执行单元1173、第三测试结果输出单元1174及第四测试结果输出单元1175。
第一测试结果输出单元1171,用于当接口响应数据与响应数据信息一致时,输出第一测试结果并将该第一测试结果在树状结构图中进行显示。
在本发明实施例中,第一测试结果输出单元1171可以用于执行子步骤S1071。
第二测试结果输出单元1172,用于当接口响应数据与响应数据信息不一致时,输出第二测试结果并将该第二测试结果在树状结构图中进行显示。
在本发明实施例中,第二测试结果输出单元1172可以用于执行子步骤S1072。
查询语句执行单元1173,用于当接口响应数据与响应数据信息一致时,执行备选节点的查询语句以从服务端的数据库中获得查询结果,其中,数据库包括接口响应数据。
在本发明实施例中,查询语句执行单元1173可以用于执行子步骤S1073。
第三测试结果输出单元1174,用于当查询结果与备选节点的预期信息一致时,输出第三测试结果并将该第三测试结果在树状结构图中进行显示。
在本发明实施例中,第三测试结果输出单元1174可以用于执行子步骤S1074。
第四测试结果输出单元1175,用于当查询结果与备选节点的预期信息不一致时,输出第四测试结果并将该第四测试结果在树状结构图中进行显示。
在本发明实施例中,第四测试结果输出单元1175可以用于执行子步骤S1075。
本发明实施例还揭示了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器130执行时实现本发明前述实施例揭示的接口测试方法。
综上所述,本发明提供的一种接口测试方法、装置、客户端及计算机可读存储介质,用于测试待测接口,所述方法包括:根据树状结构图,获取待测接口的目标测试用例,其中,树状结构图包括多条分支,每条分支形成一条测试用例,目标测试用例为树状结构图中的一条目标分支形成的测试用例;遍历目标测试用例,得到用例数据信息,其中,用例数据信息包括请求数据信息和响应数据信息,且用例数据信息由非标记语言构成;根据请求数据信息生成用于测试待测接口的测试协议;依据测试协议向服务端发送接口测试请求,并接收服务端反馈的接口响应数据;将接口响应数据与响应数据信息进行比对,以得到测试结果。与现有技术相比,本发明可以通过拖动树状结构图的节点快速修改测试用例,同时该测试用例可以直接用于接口自动化测试,易用性强,且测试效率高。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。