软件测试方法和装置与流程

文档序号:11177030阅读:225来源:国知局
软件测试方法和装置与流程

本发明涉及计算机技术,尤其涉及一种软件测试方法和装置。



背景技术:

软件测试是在软件上线运行之前所必须的一个环节,针对软件的不同应用环境可以采用不同的软件测试方法对其进行测试,从而保证软件上线运行过程中的运行稳定性。

在各类软件测试方法中,失败恢复(failover)测试是一种用于测试软件针对处理故障并恢复的过程的测试方法。目前对软件进行失败恢复测试时,往往采用在被测软件的程序代码中预先写入测试代码,从而编译后进行测试。

由于失败恢复测试中往往需要对多种执行失败的场景进行测试,从而需要被测软件进行各种不同的路径下模拟异常退出的场景,也就是通常所说的模拟异常路径,因此,在现有技术中每测试一种异常路径,便需要程序员更新代码并重新编译,测试效率较低。



技术实现要素:

本发明提供一种软件测试方法和装置,用于解决现有技术中失败恢复测试效率较低的技术问题。

为达到上述目的,本发明的实施例采用如下技术方案:

第一方面,提供了一种软件测试方法,包括:

执行目标程序;

当执行到所述目标程序中所预先设置的测试点时,调用所述测试点对应的测试程序对所述目标程序进行测试。

第二方面,提供了一种软件测试装置,包括:

执行模块,用于执行目标程序;

调用模块,用于当执行到所述目标程序中所预先设置的测试点时,调用所述测试点对应的测试程序对所述目标程序进行测试。

本发明实施例提供的软件测试方法和装置,通过预先在目标程序中设置测试点,从而在执行目标程序的过程中,执行到设置了测试点的位置之后调用测试点所对应的测试程序对目标程序进行测试。当需要模拟不同异常路径时,不需要对目标程序的代码进行修改,仅需要更新测试程序既可,因而也就省去了现有技术中由于修改了目标程序代码所带来的对目标程序进行重新编译的过程,提高了测试的效率。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1为本发明实施例一提供的一种软件测试方法的流程示意图;

图2为本发明实施例二提供的一种软件测试方法的流程示意图;

图3为本发明实施例三提供的一种软件测试装置的结构示意图;

图4为本发明实施例四提供的一种软件测试装置的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些 实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

下面结合附图对本发明实施例提供的软件测试方法和装置进行详细描述。

实施例一

图1为本发明实施例一提供的一种软件测试方法的流程示意图,如图1所示,包括:

步骤101、执行目标程序。

在编写目标程序代码时,已在目标程序中预先设置了测试点。该测试点的内容包括了测试点标识,例如测试点名称,另外测试点还可以包括宏和自定义代码,其中,宏用于指示自定义代码和调用测试程序的执行顺序。由于测试程序通常采用执行方式、事件内容和事件类型这种固定格式进行描述,因而为了提高测试的灵活性,用户可以在编写目标程序代码时,预先在测试点中写入一段用于测试的自定义代码。

进一步,在执行目标程序之前,可以将目标程序中的各测试点设置为关闭状态,然后对目标程序进行编译,从而使得目标程序不会受到测试点的影响,保证了目标程序的完整性和相对测试程序而言的独立性。可以在编译完成之后,由客户端发送远程过程调用协议(remoteprocedurecallprotocol,rcp)请求作为用于设置开闭状态的请求,服务器端根据rcp请求设置目标程序中的测试点为开启状态或关闭状态,进而服务器端在运行目标程序的过程中,确认测试点处于开启状态时,再调用相应的测试程序。

步骤102、当执行到目标程序中所预先设置的测试点时,调用测试点对应的测试程序对目标程序进行测试。

具体的,作为一种可能的应用场景,调用测试程序对所述目标程序进行失败恢复测试。作为另一种可能的应用场景,调用测试程序对目标程序进行执行时间的测试。

对于进行失败恢复测试的应用场景,具体可以根据测试点中的测试点标识,在用于记录测试程序的容器中查询所述测试点标识所标记的测 试程序,根据测试程序所指示的执行方式、事件内容和/或事件类型,对目标程序进行失败恢复测试。

其中,执行方式具体可以为执行单次、执行多次、随机执行等;事件类型具体可以为延迟、返回错码、抛出异常和终止进程等,事件内容可以为延迟的具体时间等。

可见,基于执行方式、事件类型和事件内容的组合,可以获得多种测试程序,同时,根据测试点设置的位置不同又可以模拟出不同的测试路径,因此,采用在目标程序中所预先设置的测试点,并在执行到测试点时,调用测试点对应的测试程序对目标程序进行测试的方式可以实现对多种场景的模拟。

另外,由于目标程序和测试程序相互独立,因而,当测试程序需要进行修改时,无需对目标程序进行重新编译,提高了测试的效率和测试的便捷性。尤其是将本实施例中的方案应用于分布式系统中时,由于分布式系统运行部署复杂程度较高,这种无需对分布式系统中所运行的目标程序修改代码和编译的优点就体现的更加充分。

实施例二

图2为本发明实施例二提供的一种软件测试方法的流程示意图,为了清除说明当客户端对服务器端的测试程序进行修改时的执行流程,本实施例提供了如图2所示的具体的流程示意图。

本实施例所提供的方法由服务器端和客户端执行,其中,服务器端用于运行目标程序,并且在服务器端设置有存储有测试程序的容器(map)。客户端可以通过rcp请求更新map内的测试程序。

针对服务器端来说,一方面,在目标程序内所需测试位置插入有测试点,例如消除漏洞(debug)点。

具体的,该debug点可以采用单例模式进行设计,在目标程序的代码中需要添加debug点的位置,声明一个debug点的名称,例如:declare_dbg_point(new_debugpiontname),其中,new_debugpiontname是这个debug点的名称。在声明这个debug点后就 可以在目标程序的代码中需要添加测试点的位置插入这个debug点,例如:dbg_point_pre_exec(new_debugpiontname,code)。其中,code为一段自定义代码,dbg_point_pre_exec是宏,这个宏指示了在执行debug点对应的测试程序之前执行自定义代码。

不同的宏可以指定在执行之前或者是执行debug点的测试程序后执行一段自定义代码。由于这部分的自定义代码位于目标程序中,因而是不能够由客户端修改的,需要在写目标程序的代码时进行确定。

另一方面,在map内存储有各个测试点所对应的测试程序,测试程序包括各debug点的执行方式(pointtype)、事件内容(action)和事件类型(actiontype)。其中,执行方式具体可以为执行单次、执行多次、随机执行等;事件类型具体可以为延迟、返回错码、抛出异常和终止进程等,事件内容可以为延迟的具体时间等。

如图2所示,软件测试方法包括:

步骤201、客户端发送rcp请求。

其中,rpc请求携带有debug点的名称,以及该debug点对应的测试程序更新后的执行方式、事件内容和事件类型。

步骤202、服务器端根据rcp请求更新测试程序。

服务器端接收到该rcp请求之后,将map容器中该debug点对应的测试程序中执行方式、事件内容和事件类型对应修改为rcp请求中的执行方式、事件内容和事件类型。

步骤203、当服务器端运行目标程序到测试点位置时,查询测试点对应的测试程序。

例如:当服务器端执行到dbg_point_pre_exec(new_debugpiontname,code)这一测试点时,服务器端首先执行自定义代码code,然后调用debug点的单例方法,从而在map容器中查询是否有需要执行的事件,包括事件内容和事件类型,以及事件的执行方式。

若存在需要执行的事件,进行执行。由于事件中包含的事件类型和事件的执行方式均存在多种不同的取值,根据不同的组合可以模拟出各种所希望的逻辑。

步骤204、判断测试程序中事件类型是否为延迟,若是,则执行步骤205,否则执行步骤206。

步骤205、根据延迟时间未结束的测试程序所剩余的延迟时间和当前测试程序中所指示的延迟时间,确定执行时间,并按照所确定出的执行时间进行延迟。

具体的,在执行延迟类型的事件之前,需要查询这个debug点之前已执行的debug点中是否存在事件类型为延迟,且延迟时间未结束的debug点,若不存在则执行该事件,若存在,则将未结束的debug点所剩余的延迟时间与当前事件的延迟时间之差,作为事件需执行的延迟时间,当事件需执行的延迟时间为正数时,按照所计算出的需执行的延迟时间执行该延迟事件。

这是由于前面的debug点没有执行完成,则处于延迟状态,若当前debug点同样为延迟,则在前面debug点的延迟基础上继续进行延迟,因而,实际延迟时间为前面的debug点的延迟时间与当前debug点的延迟时间之和。为了使得实际延迟时间符合测试程序所指示的延迟时间,需要延迟时间未结束的测试程序所剩余的延迟时间和当前测试程序中所指示的延迟时间,确定实际延迟时间。

步骤206、执行测试点对应的测试程序。

若测试程序中事件类型不为延迟,则直接按照测试程序中的内容进行测试,也就是说执行测试程序所指示的事件执行方式、事件内容和事件类型。

本实施例中,通过预先在目标程序中设置测试点,从而在执行目标程序的过程中,执行到设置了测试点的位置之后调用测试点所对应的测试程序对目标程序进行测试。当需要模拟不同异常路径时,不需要对目标程序的代码进行修改,仅需要更新测试程序既可,因而也就省去了现有技术中由于修改了目标程序代码所带来的对目标程序进行重新编译的过程,提高了测试的效率。

实施例三

图3为本发明实施例三提供的一种软件测试装置的结构示意图,如图3所示,包括:执行模块31和调用模块32。

执行模块31,用于执行目标程序。

调用模块32,用于当执行到所述目标程序中所预先设置的测试点时,调用所述测试点对应的测试程序对所述目标程序进行测试。

其中,测试点可以包括:测试点标识、宏和自定义代码。

具体的,调用模块32具体用于调用所述测试程序对所述目标程序进行失败恢复测试。

本实施例中,通过预先在目标程序中设置测试点,从而在执行目标程序的过程中,执行到设置了测试点的位置之后调用测试点所对应的测试程序对目标程序进行测试。当需要模拟不同异常路径时,不需要对目标程序的代码进行修改,仅需要更新测试程序既可,因而也就省去了现有技术中由于修改了目标程序代码所带来的对目标程序进行重新编译的过程,提高了测试的效率。

实施例四

图4为本发明实施例四提供的一种软件测试装置的结构示意图,如图4所示,在图3所提供的软件测试装置的基础上,调用模块32进一步包括:查询单元321和测试单元322。

查询单元321,用于根据所述测试点中的测试点标识,在用于记录测试程序的容器中查询所述测试点标识所标记的测试程序。

测试单元322,用于根据所述测试程序所指示的执行方式、事件内容和/或事件类型,对所述目标程序进行失败恢复测试。

进一步,测试单元322包括:查询子单元3221、计算子单元3222和执行子单元3223。

查询子单元3221,用于当所述测试程序的事件类型为延迟时,查询已执行的测试程序中是否存在延迟时间未结束的测试程序。

计算子单元3222,用于若存在,则根据所述延迟时间未结束的测试程序的剩余延迟时间,以及所述测试程序的事件内容所指示的延迟时间, 确定所述测试程序的实际延迟时间。

执行子单元3223,用于依据所述测试程序的实际延迟时间,对所述目标程序进行延迟。

进一步,软件测试装置还包括:自定义模块33、接收模块34、更新模块35、编译模块36、状态接收模块37、设置模块38和确认模块39。

自定义模块33,用于根据所述测试点中的宏所指示的自定义代码与测试程序的执行顺序,执行所述自定义代码。

接收模块34,用于接收更新请求。

其中,更新请求包括测试点标识,以及执行方式、事件内容和/或事件类型。

更新模块35,用于根据所述更新请求,对所述更新请求所指示的测试程序进行更新。

具体的,更新模块35具体用于将所述更新请求中测试点标识对应的测试程序中的执行方式、事件内容和/或事件类型,对应更新为所述更新请求中的执行方式、事件内容和/或事件类型。

编译模块36,用于将所述目标程序中的各测试点设置为关闭状态之后,对所述目标程序进行编译。

状态接收模块37,用于接收用于设置开闭状态的请求。

设置模块38,用于根据所述用于设置开闭状态的请求,设置所述目标程序中的测试点为开启状态或关闭状态。

确认模块39,用于调用所述测试点对应的测试程序对所述目标程序进行测试之前,确认所述测试点处于开启状态。

本实施例所提供的装置具体用于执行图1和图2所示的方法,各功能模块的具体实现方法参见对应实施例中的相关描述,本实施例中对此不再赘述。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁 碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1