CN111221721B - 一种单元测试案例自动化录制和执行方法及装置 - Google Patents

一种单元测试案例自动化录制和执行方法及装置 Download PDF

Info

Publication number
CN111221721B
CN111221721B CN201811424964.3A CN201811424964A CN111221721B CN 111221721 B CN111221721 B CN 111221721B CN 201811424964 A CN201811424964 A CN 201811424964A CN 111221721 B CN111221721 B CN 111221721B
Authority
CN
China
Prior art keywords
test
parameter value
case
test method
test case
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201811424964.3A
Other languages
English (en)
Other versions
CN111221721A (zh
Inventor
徐健
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Mobile Communications Group Co Ltd
China Mobile Group Shanghai Co Ltd
Original Assignee
China Mobile Communications Group Co Ltd
China Mobile Group Shanghai Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by China Mobile Communications Group Co Ltd, China Mobile Group Shanghai Co Ltd filed Critical China Mobile Communications Group Co Ltd
Priority to CN201811424964.3A priority Critical patent/CN111221721B/zh
Publication of CN111221721A publication Critical patent/CN111221721A/zh
Application granted granted Critical
Publication of CN111221721B publication Critical patent/CN111221721B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本发明实施例提供一种单元测试案例自动化录制和执行方法及装置,该录制方法包括:获取Test方法的入参值和出参值;将所述Test方法的入参值和出参值放入DumpInfo对象数组中进行序列化,生成测试案例并保存所述测试案例。该执行方法包括:读取测试案例,反序列化DumpInfo对象数组,得到Test方法的入参值;根据所述Test方法的入参值反射执行所述Test方法。本发明实施例提供的单元测试案例自动化录制和执行方法及装置,在不侵入应用代码的前提下,通过代码路径或实现类、实现方法的配置,实现在程序运行时动态捕捉到方法的出入参进行案例录制,并实现录制案例的自动化执行。

Description

一种单元测试案例自动化录制和执行方法及装置
技术领域
本发明涉及数据加密解密领域,尤其涉及一种单元测试案例自动化录制和执行方法及装置。
背景技术
为快速响应市场变化,目前很多公司采用敏捷开发模式,实现快速迭代,为保证迭代质量,迭代过程中通过单元测试、接口测试和集成测试等提升交付质量,其中单元测试作为第一道关口必不可少,否则会导致问题延迟到应用编译发布完成后才发现,此时需要代码修复后重新编译发布,时间成本较高,BUG暴露的越晚成本越高。目前市场上与很多成熟的单元测试框架,如Junit、TestNG等,也有很多的Mock框架如PowerMock、EasyMock等来实现单元测试时的环境隔离,使用该类框架需要测试人员或开发人员分析接口方法逻辑,并手工编写单元测试案例,为保证案例有效性,涉及到资源访问或其它业务逻辑层需要进行模拟mock,案例执行情况也需要人工发起后进行结果分析判断,人力和时间成本较高。
为此,很多公司采用自动化的手段实现单元测试案例的编写和执行,以节约开发时间和开发成本,提升测试效率。一种方法是通过预设的单元测试标准,分析源代码结构,根据分析的出入参参数类型进行参数构造,从而生成单元测试案例。另一种方法是通过针对测试数据库进行模拟mock以得到mock API,生成包括所述mock API的嵌入式关系型数据库,当需要对被测单元进行单元测试时,采用所述嵌入式关系型数据库包括的所述mockAPI对所述被测单元进行单元测试。
现有的单元测试案例录制和执行技术存在如下缺陷:
单元测试案例自动生成方法还是基于静态代码进行分析,根据预设规则进行参数构造,该方法具有很多的局限性,如java具有多态性,对象需要在程序运行时才能准确判断,通过静态代码分析无法确定;该方法最终生成的只是测试单元的出入参,如果方法内部的判断逻辑和出入参无关,如查询配置表或读取配置文件或调用其它方法等,则该部分逻辑无法完成100%覆盖;针对出参或入参为复杂对象类型的测试单元,需要对象同步提供get和set方法,否则无法完成参数构造;测试单元中某些条件判断如果写法上是直接调用其他方法,根据方法返回结果进行判断,则需要一直分析到最底层方法,一方面会导致效率低下,另一方面,如果底层方法是第三方工具类中的方法,则无法进行分析构造。
发明内容
本发明实施例为克服上述技术缺陷,提供一种单元测试案例自动化录制和执行方法及装置。
第一方面,本发明实施例提供一种单元测试案例自动化录制方法,包括:
获取Test方法的入参值和出参值;
将所述Test方法的入参值和出参值放入DumpInfo对象数组中进行序列化,生成测试案例并保存所述测试案例。
第二方面,本发明实施例提供一种单元测试案例自动化执行方法,包括:
读取测试案例,反序列化DumpInfo对象数组,得到Test方法的入参值;
根据所述Test方法的入参值反射执行所述Test方法。
第三方面,本发明实施例提供一种单元测试案例自动化录制装置,包括:
获取单元,用于获取Test方法的入参值和出参值;
录制单元,用于将所述Test方法的入参值和出参值放入DumpInfo对象数组中进行序列化,生成测试案例并保存所述测试案例。
第四方面,本发明实施例提供一种单元测试案例自动化执行装置,包括:
读取单元,用于读取测试案例,反序列化DumpInfo对象数组,得到Test方法的入参值;
执行单元,用于根据所述Test方法的入参值反射执行所述Test方法。
第五方面,本发明实施例提供一种电子设备,包括存储器和处理器,所述处理器和所述存储器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如第一方面或二方面所述的方法。
第六方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面或二方面所述的方法。
本发明实施例提供的一种单元测试案例自动化录制和执行方法及装置,弥补了现有单元测试案例需要人工编写的不足,在不侵入应用代码的前提下,通过代码路径或实现类、实现方法的配置,实现在程序运行时动态捕捉到方法的出入参进行案例录制,并实现录制案例的重放以及自动化执行。特别是针对存量代码,在不对代码进行侵入的前提下,可通过该方式不断积累案例,提升单元测试覆盖率;同时,结合持续集成,将单元测试案例的执行和覆盖率判断作为持续集成的必要步骤,以保证交付到测试环境的代码质量。
附图说明
图1为本发明实施例提供的一种单元测试案例自动化录制方法的流程示意图;
图2为本发明实施例提供的单元测试案例录制过程示意图;
图3为本发明实施例提供的一种单元测试案例自动化执行方法的流程示意图;
图4为本发明实施例提供的单元测试案例执行过程示意图;
图5为本发明实施例提供的一种单元测试案例自动化录制装置的结构示意图;
图6为本发明实施例提供的一种单元测试案例自动化执行装置的结构示意图;
图7为本发明实施例提供的一种电子设备的实体结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的一种单元测试案例自动化录制方法的流程示意图,如图1所示,包括:
步骤11,获取Test方法的入参值和出参值;
步骤12,将所述Test方法的入参值和出参值放入DumpInfo对象数组中进行序列化,生成测试案例并保存所述测试案例。
首先介绍一下录制与执行均要使用到的一个JavaBean——DumpInfo,每个DumpInfo对象代表一个方法的入参数数据或者出参数据,一对DumpInfo对象即记录了一个方法的完整数据。
Test方法即被测试方法,本发明实施例提供的方法是为了实现不影响应用运行的前提下,在运行时动态获取到Test方法的出入参,序列化后进行保存。在Test方法开始处添加一段代码,用于获取Test方法的入参类型和入参值,将数据放入DumpInfo对象数组中并进行序列化后存入文件。在Test方法结束前添加一段代码,用于获取Test方法的出参类型和出参值。
进行上述修改后,在类文件被加载方法被执行后,会执行到添加的代码,并将获取到的数据作为一个测试案例存入文件。
本发明实施例提供的单元测试案例自动化录制方法,弥补了现有单元测试案例需要人工编写的不足,在不侵入应用代码的前提下,通过代码路径或实现类、实现方法的配置,实现在程序运行时动态捕捉到方法的出入参进行测试案例录制,特别是针对存量代码,在不对代码进行侵入的前提下,可通过该方式不断积累测试案例,提升单元测试覆盖率。
在上述实施例的基础上,若所述Test方法中调用了Mock方法,所述方法还包括:
获取所述Mock方法的入参值和出参值;
根据调用顺序将所述Mock方法的入参值和出参值放入所述DumpInfo对象数组中进行序列化,保存到所述测试案例中。
Mock方法指的是对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。由于真实对象可能具有不可确定的行为,产生不可预测的效果,(如:股票行情,天气预报),从而导致真实对象很难被创建,真实对象的某些行为很难被触发等,故引入Mock对象。
若Test方法中调用了若干个Mock方法,在测试案例录制时,也需要获取Mock方法的入参值和出参值,将Mock方法的入参值和出参值放入DumpInfo对象数组中进行序列化。
一个Test方法的DumpInfo对象加上多个Mock方法的DumpInfo对象组成的数组称之为案例。每个DumpInfo对象包含以下属性:
private String hashID;
private String uuid;
private String clzName;
private String methodName;
private LinkedList<Object[]>params=new LinkedList<Object[]>();
private Map<String,Object>retValue=new HashMap<String,Object>();
private boolean isBegin;//是否是函数开始部分
private String convertSet;
private HashMap<String,Object>extendConfig=new HashMap<String,Object>();
hashId是每个对象的唯一标识;uuid是一组出入参对象的唯一标识;clzName是方法所在类的类路径;methodName是方法名称;params按顺序记录入参类型和入参值;retValue记录出参类型和出参值;isBegin表示是入参值还是出参值;convertSet和extendConfig是一些扩展配置。
图2为本发明实施例提供的单元测试案例录制过程示意图,如图2所示,包括:
步骤21,基础配置,首先配置好配置文件,配置文件中填写需要录制测试案例的Test方法的类路径、方法名、参数类型,也可以使用通配符“*”来指定某个包中的所有类的所有方法或者某个类中的所有方法都添加录制功能;Mock方法也同样配置类路径、方法名、参数类型或者使用通配符来为指定的Mock方法添加录制功能。
步骤22,JAR包引用,在应用程序启动前使用javaagent参数来指定录制测试案例的代理JAR包;
步骤23,应用启动测试,在应用启动之前代理JAR包会先启动,然后读取配置文件,初始化配置;
步骤24,配置文件解析,在每个类文件加载之前根据类路径进行正则匹配,判断该类是否需要进行测试案例录制,如果需要,再判断类中的各个方法是否需要录制,需要录制的方法称为Test方法;
步骤25,字节码动态修改记录出入参,使用javassist修Test方法在Test法开始处添加一段代码,用于获取方法的入参类型和参数值,将数据放入对象中并进行序列化后存入文件;
步骤26,方法调用链保存,按调用顺序遍历Test方法内调用的所有其他方法,根据配置判断这些方法是否属于需要Mock的方法,符合的方法称为Mock方法,在Mock方法前添加一段代码用于获取Mock方法的入参类型和入参值,在Mock方法后添加一段代码用于获取Mock方法出参类型和出参值,并将这些数据存入对象中并进行序列化后存入文件;在Test方法结束前添加一段代码,用于获取Test方法的出参类型和出参值;
步骤27,测试案例生成,对类文件进行上述修改后,在类文件被加载方法被执行后,会执行到添加的代码,并将获取到的数据作为一个测试案例存入文件;
步骤28,测试案例执行,读取测试案例,反序列化所述DumpInfo对象数组,得到Test方法的入参值和出参值以及Mock方法的入参值和出参值;
步骤29,测试案例导入。
本发明实施例提供的单元测试案例自动化录制方法,弥补了现有单元测试案例需要人工编写的不足,在不侵入应用代码的前提下,通过代码路径或实现类、实现方法的配置,实现在程序运行时动态捕捉到方法的出入参进行案例录制,特别是针对存量代码,在不对代码进行侵入的前提下,可通过该方式不断积累案例,提升单元测试覆盖率。
在上述实施例的基础上,在所述生成测试案例之后,保存所述测试案例之前,所述方法还包括:
基于MD5算法,根据所述Test方法的入参值HashCode和所述Test方法的出参值HashCode获取所述测试案例的摘要;
根据所述测试案例的摘要查找已保存的案例中,是否存在与所述测试案例的摘要一致的案例,若存在,则不进行重复保存;
若不存在与所述测试案例的摘要一致的案例,获取所述Test方法的布尔数组,所述Test方法的布尔数组用于表示所述Test方法的分支覆盖情况;
将所述Test方法的布尔数组与已保存的案例的布尔数组比对,若一致,则所述测试案例不进行保存,其中所述已保存的案例的布尔数组用于表示所述已保存的案例对应的方法的分支覆盖情况。
在录制测试案例时,需要考虑2个方面:如何剔除重复案例和如何剔除分支覆盖一致案例。
对于同一个方法,如果入参一模一样,在同等环境下,理论上返回值也是完全一样的,此为重复案例,此种场景下录制一次后不需要再录制第二次,需要保证测试案例不重复录制。
HashCode是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值,HashCode的存在主要是为了查找的快捷性,HashCode可用来在散列存储结构中确定对象的存储地址。MD5算法即MD5消息摘要算法(MD5Message-Digest Algorithm),是一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5可用于对一段信息(Message)产生信息摘要(Message-Digest)。在生成测试案例时会根据Test方法的入参DumpInfo的HashCode以及返回值DumpInfo的HashCode使用MD5算法获取摘要,理论上同样的入参值同样的出参值获取的摘要是一致的,该摘要被作为案例的唯一标识,称之为HashId。每次保存同一个方法的测试案例时会先根据该测试案例的HashId查找已保存的案例中是否已存在与此HashId一致的案例,如果已经存在则无需重复保存。如此,则可以保证重复案例不会重复录制。
只剔除入参值和返回值一致的重复案例是不够的,在一个应用运行过程中,一些方法会被调用很多次,并且每次调用时入参可能都不一致,但是每次调用时的分支覆盖却是一样的,对于单元测试来说,分支覆盖完全一致的案例只需要一条即可。例如,在下述代码中:
入参值分别为2、4、6、8等案例分支的分支覆盖实际上是一致的,这类案例只需要一条即可,那么必须剔除其他的案例。为了剔除此类重复案例,在录制测试案例的时候必须要记录每次方法被调用时方法所的分支覆盖情况。在类加载前使用ASM修改字节码,首先分析Test方法,获取方法的分支数,在Test方法中添加一个布尔数组,称之为probs数组,数组长度即为分支数,数组中每一项的值用来表示对应分分支是否被执行,初始值全部为false。在每个分支的代码中注入一段代码,代码的功能为设置probs数组中相应下标的值为ture,在Test方法最后添加代码将该数组作为测试案例的一部分存入案例文件。
修改后类被加载,方法被执行的过程中便能记录下来本次执行所涉及的分支。每次保存同一个方法的案例时会先将此案例的probs数组与已经保存的案例的probs数组进行比对,如果已经存在则无需重复保存。如此,则可以保证分支覆盖完全一致的案例不会重复录制。
本发明实施例提供的单元测试案例自动化录制方法,在不侵入应用代码的前提下,通过代码路径或实现类、实现方法的配置,实现在程序运行时动态捕捉到方法的出入参进行案例录制,同时,采用方法剔除了重复案例以及分支覆盖一致的案例,避免了重复录制,减少了操作步骤,节省了空间。
图3为本发明实施例提供的一种单元测试案例自动化执行方法的流程示意图,如图3所示,包括:
步骤31,读取测试案例,反序列化DumpInfo对象数组,得到Test方法的入参值;
步骤32,根据所述Test方法的入参值反射执行所述Test方法。
测试案例录制后,需要进行执行。为保证录制的测试案例能够正常执行,首先要创建一个类加载器,类加载器的URL需要包含被测试项目编译后的所有class文件所在的目录,还要包含项目依赖的所有jar包的路径。
类加载器创建后开始解析测试案例文件,上述提到录制的测试案例实际上是一个保存了DumpInfo对象数组序列化后的数据的文件,首先读取文件,并进行反序列化得到DumpInfo对象数组,数组中包含一对Test方法的入参值和出参值。根据Test方法的DumpInfo可以获取类路径、方法名、参数类型、各个入参的值、出参类型、出参值,使用类加载器加载该类,再根据方法名和参数类型获取方法。使用获取的入参值反射执行该方法,得到一个返回值,比对执行后的返回值和录制的出参值,如果一致则认为测试案例执行通过,否则认为测试案例执行不通过。
本发明实施例提供的单元测试案例自动化执行方法,实现了录制案例的重放以及自动化执行。特别是针对存量代码,在不对代码进行侵入的前提下,可通过该方式不断积累案例,提升单元测试覆盖率;同时,结合持续集成,将单元测试案例的执行和覆盖率判断作为持续集成的必要步骤,以保证交付到测试环境的代码质量。
若所述Test方法中调用了Mock方法,所述方法还包括:
读取所述测试案例,反序列化所述DumpInfo对象数组,得到所述Mock方法的入参值和出参值。
若Test方法中调用了Mock方法,录制的测试案例实际上是一个保存了DumpInfo对象数组序列化后的数据的文件,首先读取文件,并进行反序列化得到DumpInfo对象数组,数组中包含一对Test方法的入参值和出参值,以及N对Mock方法的入参值和出参值。根据Test方法的DumpInfo可以获取类路径、方法名、参数类型、各个入参的值、出参类型、出参值,使用类加载器加载该类,再根据方法名和参数类型获取方法。
Test方法中调用了Mock方法时,测试案例录制时也会将其录制进去。如果录制的测试案例中有Mock方法,那么在执行Test方法时,这些Mock方法就不应该真实执行,而是使用Mock方法录制下来的出参值直接替换真实的执行结果,这样做才能保证测试案例执行结果不因为数据库、接口等发生变化而受到影响。
本发明实施例提供的单元测试案例自动化执行方法,实现了录制案例的重放以及自动化执行。特别是针对存量代码,在不对代码进行侵入的前提下,可通过该方式不断积累案例,提升单元测试覆盖率;同时,结合持续集成,将单元测试案例的执行和覆盖率判断作为持续集成的必要步骤,以保证交付到测试环境的代码质量。
在上述实施例的基础上,所述方法还包括:
获取所述Test方法的出参值,将返回值与所述Test方法的出参值进行对比,若一致,则所述测试案例执行通过,其中,所述返回值是根据所述Test方法的入参值反射执行所述Test方法得到的;
否则,所述测试案例执行不通过。
图4为本发明实施例提供的单元测试案例执行过程示意图,如图4所示,包括:
步骤41,选择测试案例;
步骤42,测试案例出入参加载,读取文件,并进行反序列化得到DumpInfo数组,数组中包含一对Test方法的入参值和出参值以及N对Mock方法的入参值和出参值;
步骤43,执行单元测试方法调用;
步骤44,实际出参计算;
步骤45,解析并计算测试案例录制出参;
步骤46,实际出参与录制出参比较;
步骤47,生成测试报告。
Test方法中调用了Mock方法时,测试案例录制时也会将其录制进去。如果录制的测试案例中有Mock方法,那么在执行Test方法时,这些Mock方法就不应该真实执行,而是使用Mock方法录制下来的出参值直接替换真实的执行结果,这样做才能保证测试案例执行结果不因为数据库、接口等发生变化而受到影响。
具体操作是,在执行方法之前,首先使用javassist对类字节码进行修改。依次遍历方法中调用的所有方法,如果该方法是Mock方法,那么从DumpInfo中获取对应的数据,修改调用该方法的代码,去掉对方法的调用,直接获取到DumpInfo中的出参值赋给接收出参值的变量,修改掉所有Mock方法,将修改后的字节码保存为一个新的类文件。使用类加载器加载修改后的类,直接使用获取的入参值反射执行该Test方法,得到一个执行结果,比对执行后的结果和录制的出参值,如果一致则认为测试案例执行通过,否则认为测试案例执行不通过。
测试案例执行后的结果要与录制的出参值(预期结果)进行比较,判断测试案例是否通过,这是单元测试中判断代码质量的重要的依据,如果执行结果与预期结果不一致,很有可能对方法的修改产生问题,需要开发人员检查代码,所以保证执行结果比对的准确性很重要。
对于返回类型为基本类型的Test方法来说,结果比对很简单;对于返回类型为对象的Test方法来说,比对结果就稍显复杂。需要比对对象中的每个属性的值,如果属性的类型是对象,那么再比对这个对象中所有属性值,直到最终比对的是基本类型,只有所有基本类型的值均相同,才认为测试案例执行通过;对于无返回类型的Test方法来说,无法比对返回值,则比对方法中调用的Mock方法的入参,比对所有Mock方法此次执行时的入参和录制的入参是否相同,只有全部相同才认为测试案例执行通过。
方法的分支覆盖率、圈覆盖率、行覆盖率、指令覆盖率等指标也是保证测试案例质量的重要数据。在此方案中执行时使用开源工具jacoco获取方法的各种覆盖率,帮助开发人员掌握测试案例覆盖情况,以便提高测试案例的质量。
本发明实施例提供的单元测试案例自动化执行方法,实现录制测试案例的重放以及自动化执行。特别是针对存量代码,在不对代码进行侵入的前提下,可通过该方式不断积累案例,提升单元测试覆盖率;同时,结合持续集成,将单元测试案例的执行和覆盖率判断作为持续集成的必要步骤,以保证交付到测试环境的代码质量。
图5为本发明实施例提供的一种单元测试案例自动化录制装置的结构示意图,如图5所示,包括获取单元51和录制单元52,其中:
获取单元51,用于获取Test方法的入参值和出参值;
录制单元52,用于将所述Test方法的入参值和出参值放入DumpInfo对象数组中进行序列化,生成测试案例并保存所述测试案例。
获取单元51在Test方法开始处添加一段代码,用于获取方法的入参类型和入参值,将数据放入DumpInfo对象数组中并进行序列化后存入文件。在Test方法结束前添加一段代码,用于获取Test方法的出参类型和出参值。
对类文件进行上述修改后,录制单元52在类文件被加载方法被执行后,会执行到添加的代码,并将获取到的数据作为一个测试案例存入文件。
本发明实施例提供的装置是用于执行上述各方法实施例的,具体的流程和详细介绍请参见上述各方法实施例,此处不再赘述。
本发明实施例提供的单元测试案例自动化录制装置,弥补了现有单元测试案例需要人工编写的不足,在不侵入应用代码的前提下,通过代码路径或实现类、实现方法的配置,实现在程序运行时动态捕捉到方法的出入参进行测试案例录制,特别是针对存量代码,在不对代码进行侵入的前提下,可通过该方式不断积累测试案例,提升单元测试覆盖率。
图6为本发明实施例提供的一种单元测试案例自动化执行装置的结构示意图,如图6所示,包括读取单元61和执行单元62,其中:
读取单元61,用于读取测试案例,反序列化DumpInfo对象数组,得到Test方法的入参值;
执行单元62,用于根据所述Test方法的入参值反射执行所述Test方法。
测试案例录制后,需要进行执行。类加载器创建后开始解析测试案例文件,上述提到录制的测试案例实际上是一个保存了DumpInfo对象数组序列化后的数据的文件,首先读取单元61读取文件,并进行反序列化得到DumpInfo对象数组,数组中包含一对Test方法的入参值和出参值。根据Test方法的DumpInfo可以获取类路径、方法名、参数类型、各个入参的值、出参类型、出参值,使用类加载器加载该类,再根据方法名和参数类型获取方法。执行单元62使用获取的入参值反射执行该方法,得到一个返回值,比对执行后的返回值和录制的出参值,如果一致则认为测试案例执行通过,否则认为测试案例执行不通过。
本发明实施例提供的装置是用于执行上述各方法实施例的,具体的流程和详细介绍请参见上述各方法实施例,此处不再赘述。
本发明实施例提供的单元测试案例自动化执行装置,实现了录制案例的重放以及自动化执行。特别是针对存量代码,在不对代码进行侵入的前提下,可通过该方式不断积累案例,提升单元测试覆盖率;同时,结合持续集成,将单元测试案例的执行和覆盖率判断作为持续集成的必要步骤,以保证交付到测试环境的代码质量。
图7为本发明实施例提供的一种电子设备的实体结构示意图,如图7所示,该电子设备可以包括:处理器(processor)710、通信接口(Communications Interface)720、存储器(memory)730和总线740,其中,处理器710,通信接口720,存储器730通过总线740完成相互间的通信。总线740可以用于电子设备与传感器之间的信息传输。处理器710可以调用存储器730中的逻辑指令,以执行如下方法:获取Test方法的入参值和出参值;将所述Test方法的入参值和出参值放入DumpInfo对象数组中进行序列化,生成测试案例并保存所述测试案例。
或,读取测试案例,反序列化DumpInfo对象数组,得到Test方法的入参值;根据所述Test方法的入参值反射执行所述Test方法。
此外,上述的存储器730中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令使计算机执行上述实施例所提供的一种单元测试案例自动化录制和执行方法,例如包括:获取Test方法的入参值和出参值;将所述Test方法的入参值和出参值放入DumpInfo对象数组中进行序列化,生成测试案例并保存所述测试案例。
或,读取测试案例,反序列化DumpInfo对象数组,得到Test方法的入参值;根据所述Test方法的入参值反射执行所述Test方法。
以上所述仅为本发明的优选实施例,并不用于限制本发明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充,但并不会偏离本发明的精神或者超越所附权利要求书定义的范围。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (8)

1.一种单元测试案例自动化录制方法,其特征在于,包括:
获取Test方法的入参值和出参值;
将所述Test方法的入参值和出参值放入DumpInfo对象数组中进行序列化,生成测试案例并保存所述测试案例;
在所述生成测试案例之后,保存所述测试案例之前,所述方法还包括:
基于MD5算法,根据所述Test方法的入参值HashCode和所述Test方法的出参值HashCode获取所述测试案例的摘要;
根据所述测试案例的摘要查找已保存的案例中,是否存在与所述测试案例的摘要一致的案例,若存在,则不进行重复保存;
若不存在与所述测试案例的摘要一致的案例,获取所述Test方法的布尔数组,所述Test方法的布尔数组用于表示所述Test方法的分支覆盖情况;
将所述Test方法的布尔数组与已保存的案例的布尔数组比对,若一致,则所述测试案例不进行保存,其中所述已保存的案例的布尔数组用于表示所述已保存的案例对应的方法的分支覆盖情况。
2.根据权利要求1所述的方法,其特征在于,若所述Test方法中调用了Mock方法,所述方法还包括:
获取所述Mock方法的入参值和出参值;
根据调用顺序将所述Mock方法的入参值和出参值放入所述DumpInfo对象数组中进行序列化,保存到所述测试案例中。
3.一种单元测试案例自动化执行方法,其特征在于,所述单元测试案例是基于权利要求1至2任一项所述的方法生成的,包括:
读取测试案例,反序列化DumpInfo对象数组,得到Test方法的入参值;
根据所述Test方法的入参值反射执行所述Test方法;
获取所述Test方法的出参值,将返回值与所述Test方法的出参值进行对比,若一致,则所述测试案例执行通过,其中,所述返回值是根据所述Test方法的入参值反射执行所述Test方法得到的;
否则,所述测试案例执行不通过。
4.根据权利要求3所述的方法,其特征在于,若所述Test方法中调用了Mock方法,所述方法还包括:
读取所述测试案例,反序列化所述DumpInfo对象数组,得到所述Mock方法的入参值和出参值。
5.一种单元测试案例自动化录制装置,其特征在于,包括:
获取单元,用于获取Test方法的入参值和出参值;
录制单元,用于将所述Test方法的入参值和出参值放入DumpInfo对象数组中进行序列化,生成测试案例并保存所述测试案例;
在所述生成测试案例之后,保存所述测试案例之前,还包括:
基于MD5算法,根据所述Test方法的入参值HashCode和所述Test方法的出参值HashCode获取所述测试案例的摘要;
根据所述测试案例的摘要查找已保存的案例中,是否存在与所述测试案例的摘要一致的案例,若存在,则不进行重复保存;
若不存在与所述测试案例的摘要一致的案例,获取所述Test方法的布尔数组,所述Test方法的布尔数组用于表示所述Test方法的分支覆盖情况;
将所述Test方法的布尔数组与已保存的案例的布尔数组比对,若一致,则所述测试案例不进行保存,其中所述已保存的案例的布尔数组用于表示所述已保存的案例对应的方法的分支覆盖情况。
6.一种单元测试案例自动化执行装置,其特征在于,所述单元测试案例是基于权利要求5所述的装置生成的,包括:
读取单元,用于读取测试案例,反序列化DumpInfo对象数组,得到Test方法的入参值;
执行单元,用于根据所述Test方法的入参值反射执行所述Test方法;
获取所述Test方法的出参值,将返回值与所述Test方法的出参值进行对比,若一致,则所述测试案例执行通过,其中,所述返回值是根据所述Test方法的入参值反射执行所述Test方法得到的;
否则,所述测试案例执行不通过。
7.一种电子设备,其特征在于,包括存储器和处理器,所述处理器和所述存储器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至4任一所述的方法。
8.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至4任一项所述的方法。
CN201811424964.3A 2018-11-27 2018-11-27 一种单元测试案例自动化录制和执行方法及装置 Active CN111221721B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811424964.3A CN111221721B (zh) 2018-11-27 2018-11-27 一种单元测试案例自动化录制和执行方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811424964.3A CN111221721B (zh) 2018-11-27 2018-11-27 一种单元测试案例自动化录制和执行方法及装置

Publications (2)

Publication Number Publication Date
CN111221721A CN111221721A (zh) 2020-06-02
CN111221721B true CN111221721B (zh) 2023-09-05

Family

ID=70831969

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811424964.3A Active CN111221721B (zh) 2018-11-27 2018-11-27 一种单元测试案例自动化录制和执行方法及装置

Country Status (1)

Country Link
CN (1) CN111221721B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111782526A (zh) * 2020-06-30 2020-10-16 北京同邦卓益科技有限公司 一种接口测试方法、装置、电子设备及存储介质
CN112749094A (zh) * 2021-01-14 2021-05-04 中国工商银行股份有限公司 测试案例生成方法及装置
CN114265776B (zh) * 2021-12-22 2023-03-14 浙江时空道宇科技有限公司 单元测试代码生成方法、装置、设备、介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2868566A1 (fr) * 2004-04-01 2005-10-07 Metapages Sarl Procede et dispositif d'enregistrement et de lecture de flots d'invocations de methodes
CN101916225A (zh) * 2010-09-02 2010-12-15 于秀山 图形用户界面软件功能覆盖测试方法
CN105279196A (zh) * 2014-07-23 2016-01-27 阿里巴巴集团控股有限公司 测试脚本的生成方法和装置
CN105335281A (zh) * 2014-07-30 2016-02-17 阿里巴巴集团控股有限公司 一种自动mock外部依赖的方法及装置
CN106294163A (zh) * 2016-08-12 2017-01-04 北京航空航天大学 一种轻量级的代码分支覆盖率检测方法
CN107122289A (zh) * 2016-02-25 2017-09-01 阿里巴巴集团控股有限公司 系统回归测试的方法、装置及系统
CN107608898A (zh) * 2017-10-10 2018-01-19 浙江网新恒天软件有限公司 一种再现测试流程以实现自动化回归测试的方法
CN107894952A (zh) * 2017-11-08 2018-04-10 中国平安人寿保险股份有限公司 接口测试用例的生成方法、装置、设备及可读存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9535823B2 (en) * 2011-02-28 2017-01-03 Typemock Ltd. Method and apparatus for detecting software bugs

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2868566A1 (fr) * 2004-04-01 2005-10-07 Metapages Sarl Procede et dispositif d'enregistrement et de lecture de flots d'invocations de methodes
CN101916225A (zh) * 2010-09-02 2010-12-15 于秀山 图形用户界面软件功能覆盖测试方法
CN105279196A (zh) * 2014-07-23 2016-01-27 阿里巴巴集团控股有限公司 测试脚本的生成方法和装置
CN105335281A (zh) * 2014-07-30 2016-02-17 阿里巴巴集团控股有限公司 一种自动mock外部依赖的方法及装置
CN107122289A (zh) * 2016-02-25 2017-09-01 阿里巴巴集团控股有限公司 系统回归测试的方法、装置及系统
CN106294163A (zh) * 2016-08-12 2017-01-04 北京航空航天大学 一种轻量级的代码分支覆盖率检测方法
CN107608898A (zh) * 2017-10-10 2018-01-19 浙江网新恒天软件有限公司 一种再现测试流程以实现自动化回归测试的方法
CN107894952A (zh) * 2017-11-08 2018-04-10 中国平安人寿保险股份有限公司 接口测试用例的生成方法、装置、设备及可读存储介质

Also Published As

Publication number Publication date
CN111221721A (zh) 2020-06-02

Similar Documents

Publication Publication Date Title
CN107273286B (zh) 针对任务应用的场景自动化测试平台及方法
US9940225B2 (en) Automated error checking system for a software application and method therefor
US9465718B2 (en) Filter generation for load testing managed environments
CN111221721B (zh) 一种单元测试案例自动化录制和执行方法及装置
CN110597730B (zh) 基于场景法的自动化测试用例生成方法及系统
CN108459850B (zh) 生成测试脚本的方法、装置及系统
CN108614702B (zh) 字节码优化方法及装置
CN111522728A (zh) 自动化测试用例的生成方法、电子设备及可读存储介质
CN107621963B (zh) 一种软件部署方法、软件部署系统及电子设备
CN110928777B (zh) 测试用例的处理方法、装置、设备及存储介质
CN110287700B (zh) 一种iOS应用安全分析方法及装置
US10592703B1 (en) Method and system for processing verification tests for testing a design under test
CN112561690A (zh) 信用卡分期业务接口的测试方法、系统、设备及存储介质
CN112445706A (zh) 程序异常代码获取方法、装置、电子设备以及存储介质
US20230101154A1 (en) Resumable instruction generation
CN107844703B (zh) 一种基于Android平台Unity3D游戏的客户端安全检测方法及装置
CN109684205A (zh) 系统测试方法、装置、电子设备及存储介质
CN115705297A (zh) 代码调用检测方法、装置、计算机设备以及存储介质
CN113031995A (zh) 一种更新规则的方法、装置、存储介质以及电子设备
CN113220586A (zh) 一种自动化的接口压力测试执行方法、装置和系统
CN111160403A (zh) 一种api接口复用发现的方法及装置
CN112015436A (zh) 短信平台部署方法及装置、计算设备、计算机存储介质
CN112000386A (zh) 一种应用的实现方法和装置
CN116594918B (zh) 一种测试用例变更影响分析方法、装置、设备及存储介质
CN109446091B (zh) 业务实体对象测试方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant