具体实施方式
下面,参考附图详细说明本发明的优选实施方式。在附图中,虽然示于不同的附图中,但相同的附图标记用于表示相同的或相似的组件。为了清楚和简明,对已知功能和结构的详细描述将被省略,以避免使本发明的主题不清楚。
图1示出了根据本发明的实施例的接口测试***的示意图。如图1中所示,该***包括被测接口110、与被测接口110配合进行接口测试的调用接口120以及下面将要详细描述的网络代理130。
在图1所示的实施例中,网络代理130连接在被测接口110和调用接口120之间,并包括接口测试工具132和协议体数据修改单元136。协议体数据修改单元136用于对从调用接口120返回被测接口110的返回数据进行处理以生成测试数据。接口测试工具132用于向被测接口110转发所生成的测试数据,并观察和记录被测接口110对测试数据的处理。
如图1中所示,在被测接口110和调用接口120之间可存在非测试用途的正常网络通信。该正常网络通信可以不经过本发明实施例中的网络代理。
然而在进行测试时,会从被测接口110向调用接口120发送用于测试的数据,调用接口120接收到该数据时产生上述的返回数据。在一些实施例中,从被测接口110向调用接口120发送的数据会途径网络代理(具体地,例如网络代理中的接口测试工具132),但网络代理130(例如其中的接口测试工具132)不对该数据进行修改。而在另一些实施例中,由于无需修改,该数据发送也可不途径网络代理130。图1示出了后一种情况,为了使图示简洁并易于理解,图1中未示出该用于测试的数据从被测接口110向调用接口120的发送。
上述协议体数据修改单元136的处理包括对协议体数据进行修改,以数据驱动的方式进行接口测试,即通过向被测接口110发送不同数据(例如,异常数据)并观察被测接口110对这些不同数据的处理来测试被测接口110的各项性能。在测试时,被测接口110作为客户端可修改目标服务的IP地址和端口,以配置为测试工具132所监听的IP地址和端口。该修改可由被测接口所在设备执行,也可由接口测试工具执行,或者可由其他任何相关的设备执行,本发明不对此进行限制。此外在此,无需对调用接口120做任何改变。
如本领域中所知的,通信协议(如http等)包括协议头和协议体两部分,前者通常保证通信正常进行,后者表示具体通信内容。因此本文中使用的协议体数据有时也被称为协议的数据部分。
在可实施本发明实施例的一些示例中,例如网站需要调用第三方提供的数据接口,且调用过程中采用json明文字符串的方式传输。在对网站接口进行测试时,需要对超出临界值的数据进行测试,而第三方接口无法人为构造这样的测试数据。此时可采用本实施例提供的方法截获明文数据包,并可将其直接修改为任意数值,再转发给被测接口,观察被测接口的处理流程。
上述示例采用json明文字符串的方式传输数据,然而在其他一些示例中,接口通信并不直接使用明文的TCP数据,而是可采用http协议、snmp协议、ssh协议等多种方式,或者将复杂结构序列化发送,构成私有协议体。鉴于此,如图1所示,网络代理130还包括接口协议解析单元134,用于在修改数据之前对被测接口110与调用接口120之间使用的协议进行解析。
由于一个网络接口通常采用一种固定协议进行通信,因此在测试前需要配置所使用的协议结构。具体地,对于公共协议,按照固有结构解析;对于私有协议,首先动态加载协议结构体,再对该协议结构体进行反序列化。协议结构体通常采用“.h”文件配置,在测试工具130运行时可根据用户所选协议来动态调用。
在本发明的其他一些实施例中,还可以实现测试场景的备份和接口的回归测试。在这些实施例中,如图1所示,网络代理130还可包括场景数据备份单元138,用于备份测试场景。在此情况下,接口测试工具132可利用所备份的测试场景来进行自动回归测试。
具体地,场景数据备份单元138可备份以下至少一项:
·从调用接口120接收到的返回数据(可作为用于自动匹配消息的key值)
·被测接口110和调用接口120之间的通信所使用的协议
·通过协议体数据修改单元136修改返回数据而生成的测试数据(可能为多个值,可采用json字符串的方式存储)
在一些示例中,测试数据也可提前编辑。在此情况下,图1中所示的网络代理130可包括配置文件(未示出)。可将需要遍历的数值作为测试数据保存在配置文件中。当反复执行同一接口的通信时,接口测试工具130可以将调用接口120返回的返回数据作为关键字在场景数据备份单元138备份的测试场景中选择对应的测试场景并应用所选择的测试场景,以及自动顺序地使用配置文件中保存的测试数值来作为向被测接口110转发的测试数据,以实现接口遍历性测试和Fuzz测试。
通过使用上述的网络代理执行接口测试,测试人员可直接配置环境,执行数据驱动的测试。该方案无需多人联调构造接口数据,节约了人力并提升了效率。在使用接口协议解析单元134时,该方案还具有较强的通用性,可对传输层之上的标准协议和非标准协议进行解析并构造测试数据,以实现接口协议测试。而在使用场景数据备份单元138时,备份后的测试场景可重复执行,不必重新购造测试数据,节约人力,提高回归测试效率。
以上参考图1描述了根据本发明的实施例的接口测试***及其中使用的网络代理的简要结构。需要注意的是,该简要结构仅是为了阐述本发明的方案而做出的示例性结构,本发明的方案不限于图1所示的结构。例如,该结构中还可以存在其他的组件和/或测试接口,如数据库***、redis***、zookeeper、其他websevice等。例如,该结构中的各个单元也可以通过更多或更少的组件来实现,如接口协议解析单元134和协议体数据修改单元136可在同一组件中实现等。或甚至在一些情况下,接口协议解析单元134、协议体数据修改单元136和场景数据备份单元138中的一个或多个可被并入接口测试工具132。此时接口测试工具132相当于上述实施例中的网络代理130。在一些示例中,接口协议解析单元134、协议体数据修改单元136和场景数据备份单元138中的一个或多个可以通过可拆卸模块的方式并入接口测试工具132。
下面将参考图2描述根据本发明的实施例的接口测试方法的流程图。图2示出了一种用于测试接口的方法的简要流程图。该方法由上述的网络代理130执行。
如图2所示,在步骤210中,例如由协议体数据修改单元136对从调用接口120返回被测接口110的返回数据进行处理以生成测试数据。
在步骤220中,例如由接口测试工具132向被测接口110转发所生成的测试数据。
在步骤230中,例如由接口测试工具132观察和记录被测接口110对测试数据的处理。
在一些示例中,处理返回数据包括对协议体数据进行修改,以数据驱动的方式进行接口测试。在测试时,被测接口110作为客户端可修改目标服务的IP地址和端口,将其配置为测试工具132所监听的IP地址和端口。无需对调用接口120做任何改变。
如上所述,在一些示例中,例如,在接口通信不直接使用明文的TCP数据的情况下,在修改数据之前可对被测接口110和调用接口120之间使用的协议进行解析。该解析由接口协议解析单元134完成。图3示出了协议解析的具体操作的流程图的示例。
具体地,在步骤310中,进行新协议的注册。如果要选择的协议已注册,该步骤可跳过。协议注册过程是使协议结构文件和协议名称相关联,以便测试人员后续选择该协议。接口协议解析单元134可自动加载并解析。
在步骤320中,在所注册的协议中选择被测接口110和调用接口120之间的通信所使用的协议。
在步骤330中,判断所选择的协议是否是公共协议。
如果是公共协议,在步骤340中,调用内置的固有结构进行协议解析。
如果不是公共协议,则表明协议是私有协议,在步骤350中动态加载协议结构体。如上所述,协议结构体通常采用“.h”文件配置,动态加载协议结构体包括读取“.h”文件。
在步骤360中,对步骤340中调用的固有协议结构或步骤350中动态加载的协议结构体进行解析,并在步骤370中判断协议解析是否正常。
如果协议解析不正常,在步骤380中向用户提示解析错误,结束协议解析操作。用户之后可根据相关流程进行错误处理,如重新选择协议或重新注册协议等等。在步骤380中,可通过声音、灯光、文字显示或本领域技术人员所熟知的其他提示方式中的任一者或其组合来提示用户,本发明不对此进行限制。
如果协议解析正常,则在步骤390中显示解析后的数据内容,以供用户使用协议体数据修改单元136修改数据,并同样结束协议解析。
利用本发明的其他一些实施例,还可以实现测试场景的备份和接口的回归测试。测试场景备份由图1所示的场景数据备份单元138完成。具体地,场景数据备份单元138可备份以下至少一项:
·从调用接口120接收到的返回数据(可作为用于自动匹配消息的key值)
·被测接口110和调用接口120之间的通信所使用的协议
·通过协议体数据修改单元136修改返回数据而生成的测试数据(可能为多个值,可采用json字符串的方式存储)
在一些示例中,测试数据也可提前编辑。在此情况下,图1中所示的网络代理130可包括配置文件(未示出)。可将需要遍历的数值作为测试数据保存在配置文件中。当反复执行同一接口的通信时,接口测试工具130可以将调用接口120返回的返回数据作为关键字在场景数据备份单元138备份的测试场景中选择对应的测试场景并应用所选择的测试场景,以及自动顺序地使用配置文件中保存的测试数值来作为向被测接口110转发的测试数据,以实现接口遍历性测试和Fuzz测试。
所备份的测试场景可被接口测试工具132使用来进行自动回归测试。图4示出了根据本发明的实施例的自动回归测试方法的示例性流程图。
如图4所示,在步骤410中准备测试环境,如配置测试接口110和调用接口120,设置所使用的协议等。
在步骤420中,执行接口调用,抓取从调用接口120返回的返回数据。
在步骤430中,在采用非明文方式传输数据时,对数据传输所使用的协议进行解析。
在步骤440中判断是否执行自动测试
如果不执行,方法步骤进行到步骤450,显示协议结构和数据内容,并在步骤460中由用户通过协议体数据修改单元修改数据内容以产生测试数据。在步骤470中,向被测接口110发送测试数据,且可选地备份测试场景。然后,方法转到步骤420继续执行,直至测试结束。
如果在步骤440处确定执行自动测试,在步骤480中,根据数据包内的内容识别测试场景。具体地,可以将调用接口120返回的返回数据作为关键字在场景数据备份单元138备份的测试场景中选择对应的测试场景并应用所选择的测试场。
接下来,在步骤490中获取测试数据。例如,可顺序地使用配置文件中保存的测试数值来作为测试数据。或者在一些示例中,可使用场景数据备份单元138备份的与识别出的测试场景相对应的测试数据来作为所获取的测试数据。
在步骤495中,修改测试数据的数据包并向被测接口110发送测试数据。具体地,修改数据包的数据内容。例如,可将数据内容修改为异常数据,如负数、小数、空值、不合理数据等等。修改内容可根据具体的测试目的而定。该修改可由用户在网络代理所提供的界面(未示出)处手动执行,或通过调用预先设置的程序/代码自动执行,本发明不对此进行限制。
通过修改测试数据的数据包,可模拟调用接口处可能产生的任何异常情况,由此可通过观察并记录被测接口对该异常情况的处理/反应来对被测接口的各项性能进行测试。
然后,方法转到步骤420继续执行,直至测试结束。
上面的描述仅用于实现本发明的实施方式,本领域的技术人员应该理解,在不脱离本发明的范围的任何修改或局部替换,均应该属于本发明的权利要求来限定的范围,因此,本发明的保护范围应该以权利要求书的保护范围为准。