CN110750457B - 一种基于内存数据库的自动化单元测试方法及装置 - Google Patents

一种基于内存数据库的自动化单元测试方法及装置 Download PDF

Info

Publication number
CN110750457B
CN110750457B CN201911001733.6A CN201911001733A CN110750457B CN 110750457 B CN110750457 B CN 110750457B CN 201911001733 A CN201911001733 A CN 201911001733A CN 110750457 B CN110750457 B CN 110750457B
Authority
CN
China
Prior art keywords
test
tested
target
unit
identifier
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
CN201911001733.6A
Other languages
English (en)
Other versions
CN110750457A (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 Travelsky Technology Co Ltd
Original Assignee
China Travelsky Technology 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 Travelsky Technology Co Ltd filed Critical China Travelsky Technology Co Ltd
Priority to CN201911001733.6A priority Critical patent/CN110750457B/zh
Publication of CN110750457A publication Critical patent/CN110750457A/zh
Application granted granted Critical
Publication of CN110750457B publication Critical patent/CN110750457B/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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Tests Of Electronic Circuits (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于内存数据库的自动化单元测试方法及装置,该方法包括:在对目标系统进行测试时,将测试基础数据加载至目标内存数据库中;确定所述目标系统中包含的待测试方法;获取与所述待测试方法对应的目标测试用例;依据所述目标测试用例和所述测试基础数据,对所述待测试方法进行测试,得到目标断言结果。上述的测试方法中,在所述目标系统中确定所述待测试方法,在对所述待测试方法进行测试时,只需要准备与所述待测试方法匹配的测试用例,依据所述测试用例对所述测试方法进行测试,不需要每一个待测试方法单独编写测试代码,提高了测试效率。

Description

一种基于内存数据库的自动化单元测试方法及装置
技术领域
本发明涉及自动化测试技术领域,尤其涉及一种基于内存数据库的自动化单元测试方法及装置。
背景技术
随着互联网行业的不断发展,敏捷软件开发,极限编程逐步在软件开发过程中被普及。测试驱动开发的工作模式也逐渐被软件开发者认同和赞美。而单元测试是测试驱动开发的主体测试构成,旨在从代码粒度上实现对应用质量的把握,是可维护性代码的核心。其具体粒度大小取决于在代码出现问题后,能在多大程度上准确定位问题。
目前,最常用的单元测试框架为Junit,Junit可以满足在测试单元较少时的执行要求,但是,当业务复杂时,每一个业务包含多个测试单元时,需要为每个测试单元准备基础测试数据、同时需要编写大量的测试代码来实现用例数据封装、断言,编码工作量大、效率低
发明内容
有鉴于此,本发明提供了一种基于内存数据库的自动化单元测试方法及装置,用以解决现有技术中当业务复杂时,每一个业务包含多个测试单元时,需要每一个测试单元准备基础测试数据和测试代码,而Junit对于每个测试单元的基础测试数据都需要初始化,自动化测试过程繁琐,测试效率低的问题。具体方案如下:
一种基于内存数据库的自动化单元测试方法,包括:
在对目标系统进行测试时,将测试基础数据加载至目标内存数据库中;
确定所述目标系统中包含的待测试方法;
获取与所述待测试方法对应的目标测试用例;
依据所述目标测试用例和所述测试基础数据,对所述待测试方法进行测试,得到目标断言结果。
上述的方法,可选的,还包括:
测试完成时,将当前目标测试用例对应的测试基础数据进行回滚。
上述的方法,可选的,确定所述目标系统中包含的待测试方法包括:
获取所述目标系统中包含的各个测试类的第一标识;
将所述第一标识与第一待测试标识相同的对象作为待测试类;
获取所述待测试类中包含的各个方法的第二标识;
将所述第二标识与第二待测试标识相同的方法作为待测试方法。
上述的方法,可选的,获取与所述待测试方法对应的目标测试用例包括:
获取所述待测试方法的关键词;
遍历各个测试用例,查找与所述关键词匹配的目标测试用例。
上述的方法,可选的,依据所述目标测试用例和所述测试基础数据,对所述待测试方法进行测试,得到目标断言结果包括:
对与所述待测试方法对应的数据库进行初始化;
当接收到初始化完成指令时,在所述目标内存数据库中获取与所述待测试方法匹配的目标测试基础数据;
将所述目标测试基础数据和所述目标测试用例传递给所述待测试方法进行测试;
获取所述待测试方法对应的目标断言结果的断言类型;
依据所述断言类型输出所述目标断言结果。
一种基于内存数据库的自动化单元测试装置,包括:
加载模块,用于在对目标系统进行测试时,将测试基础数据加载至目标内存数据库中;
确定模块,用于确定所述目标系统中包含的待测试方法;
获取模块,用于获取与所述待测试方法对应的目标测试用例;
测试模块,用于依据所述目标测试用例和所述测试基础数据,对所述待测试方法进行测试,得到目标断言结果。
上述的装置,可选的,还包括:
回滚模块,用于测试完成时,将当前目标测试用例对应的测试基础数据进行回滚。
上述的装置,可选的,所述确定模块包括:
第一获取单元,用于获取所述目标系统中包含的各个测试类的第一标识;
第一确定单元,用于将所述第一标识与第一待测试标识相同的对象作为待测试类;
第二获取单元,用于获取所述待测试类中包含的各个方法的第二标识;
第二确定单元,用于将所述第二标识与第二待测试标识相同的方法作为待测试方法。
上述的装置,可选的,所述获取模块包括:
关键词获取单元,用于获取所述待测试方法的关键词;
查找单元,用于遍历各个测试用例,查找与所述关键词匹配的目标测试用例。
上述的装置,可选的,所述测试模块包括:
初始化单元,用于对与所述待测试方法对应的数据库进行初始化;
基础数据获取单元,用于当接收到初始化完成指令时,在所述目标内存数据库中获取与所述待测试方法匹配的目标测试基础数据;
测试单元,用于将所述目标测试基础数据和所述目标测试用例传递给所述待测试方法进行测试;
断言类型获取单元,用于获取所述待测试方法对应的目标断言结果的断言类型;
输出单元,用于依据所述断言类型输出所述目标断言结果。
与现有技术相比,本发明包括以下优点:
本发明公开了一种基于内存数据库的自动化单元测试方法及装置,该方法包括:在对目标系统进行测试时,将测试基础数据加载至目标内存数据库中;确定所述目标系统中包含的待测试方法;获取与所述待测试方法对应的目标测试用例;依据所述目标测试用例和所述测试基础数据,对所述待测试方法进行测试,得到目标断言结果。上述的测试方法中,在所述目标系统中确定所述待测试方法,在对所述待测试方法进行测试时,只需要找到与所述待测试方法匹配的测试用例,依据所述测试用例对所述测试方法进行测试,不需要每一个待测试方法单独编写测试代码,提高了测试效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例公开的一种基于内存数据库的自动化单元测试方法流程图;
图2为本发明实施例公开的一种基于内存数据库的自动化单元测试方法又一流程图;
图3为本发明实施例公开的一种基于内存数据库的自动化单元测试方法又一流程图;
图4为本发明提供的一种基于内存数据库的自动化单元测试装置结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供了一种基于内存数据库的自动化单元测试方法及装置,用于对目标系统的自动化测试过程中,基于spring-boot-starter-test实现单元测试框架,用excel进行测试用例的管理,每个方法对应一个单元测试Excel,让测试用例一目了然,由于需要达到单元测试和spring-boot-starter-test测试框架无缝衔接,封装了junit框架,定义了抽象类BaseTest为测试基础类,需要自动化的测试都要继承至该类,所述测试方法的执行流程如图1所示,包括步骤:
S101、在对目标系统进行测试时,将测试基础数据加载至目标内存数据库中;
本发明实施例中,所述目标系统为当前需要进行自动化测试的系统,获取与所述目标系统对应的测试基础数据,其中,所述测试基础数据可以为Excel 形式存在的数据,所述测试基础数据中存储有初始数据。将所述测试基础数据加载至所述目标内存数据库的过程如下:加载测试基础数据并解析数据到所述目标内存数据库中。程序默认加载application-test.properties中配置的 test.database.basescript数据库文件,加载完成,需要解析到所述目标内存数据库中,其中,一个execl中,一个文件sheet表示一张表的数据,当所述目标系统中的待测试方法全部测试完成时,才对所述目标内存数据库中的所述测试基础数据进行释放。
进一步的,所述测试基础数据加载完成后,程序加载测试类当前目录下和测试类名相同的数据文件,依据测试类名和当前目录的文件名来关联测试用例和断言结果。
S102、确定所述目标系统中包含的待测试方法;
本发明实施例中,所述目标系统中包含多个方法,只有包含对应标识的方法才是所述待测试方法,因此,需要遍历所述目标系统,依据对应的标识查找所述待测试方法。
S103、获取与所述待测试方法对应的目标测试用例;
本发明实施例中,获取所述待测试方法中的关键词,例如:所述关键词为所述待测试方法的名称、所属测试类的名称和所属测试类中的属性名,遍历各个测试用例,查找与所述关键词匹配的目标测试用例,其中,所述目标测试用例中包含多个测试用例,其中存储有每一个测试用例的测试数据。若基于Excel的测试用例的命名规则如下:
在test.resource测试类相同包路径下创excel测试用例、命名规则为“测试类.测试类中的属性名.测试方法.TUR.xls”,如FareTypeTest为对应测试类名称、typeSvc对应测试类中的需要测试属性名、one|two|three对应需要测试的方法。
基于上述的命名方法,查找与所述关键词匹配的目标测试用例,就是在各个测试用例中将包含所述关键词的测试用例作为所述目标测试用例,若所述待测试方法中包含多个测试用例,与其对应的所述目标测试用例中包含的测试用例的数量与所述待测试方法中相同。
S104、依据所述目标测试用例和所述测试基础数据,对所述待测试方法进行测试,得到目标断言结果。
本发明实施例中,将所述目标测试用例和所述测试基础数据传递给所述待测试方法,所述待测试方法依据所述目标测试用例中每一个测试用例和其对应的基础测试数据,进行测试,依据对应的断言类型输出所述目标断言结果。
本发明公开了一种基于内存数据库的自动化单元测试方法,包括:在对目标系统进行测试时,将测试基础数据加载至目标内存数据库中;确定所述目标系统中包含的待测试方法;获取与所述待测试方法对应的目标测试用例;依据所述目标测试用例和所述测试基础数据,对所述待测试方法进行测试,得到目标断言结果。上述的测试方法中,在所述目标系统中确定所述待测试方法,在对所述待测试方法进行测试时,只需要找到与所述待测试方法匹配的测试用例,依据所述测试用例对所述测试方法进行测试,不需要每一个待测试方法单独编写测试代码,提高了测试效率。
本发明实施例中,在进行自动化测试之前,还需要对redis库进行分配,为测试过程分配对应的存储空间,在测试完成后,将该存储空间进行释放。在对存储空间分配完成后,还需要对在配置文件中加入key值为‘test.database.basescript’,value为对应的excel表名称,多个excel表以逗号‘,’隔开。用于读取单元测试初始化数据,用于单元测试的准备。
当程序继承BaseTest时会首先执行初始化方法,在初始化前会清除内 redis中的方法数据。并读取测试基础数据,并通过XlsDataSetReader技术解析execl,然后通过内存数据库自动数据转换方法,将数据初始化在内存数据库中。
本发明实施例中,由于单元测试的启动并没有重写runner、而是通过一个普通的单元测试进入,对于runner来说一个自动化单元测试类(可以包含多个测试类型和测试方法)仅有一个单元测试,所以使用Spring提供的默认回滚机制实现隔离每个测试用例之间的数据。为了达到自动回滚的效果,重写了Spring提供的JpaTransactionManager类,对齐做如下修改:
在开启事务时记录事物对象
@Override
protected void doBegin(Object transaction,TransactionDefinitiondefinition) {
JpaTransactionObject txObject=(JpaTransactionObject)transaction;
//Bind the entity manager holder to the thread.
if(txObject.isNewEntityManagerHolder()){
TransactionSynchronizationManager.bindResource(
getEntityManagerFactory(),txObject.getEntityManagerHolder());
}
txObject.getEntityManagerHolder().setSynchronizedWithTransaction(true);
//设置断言的数据库访问连接对象
DatAssertQdao.setTransConn(txObject.getConnectionHolder().getConnection ());
}
catch(TransactionException ex){
closeEntityManagerAfterFailedBegin(txObject);
throw ex;
}
catch(Throwable ex){
closeEntityManagerAfterFailedBegin(txObject);
throw new CannotCreateTransactionException("Could not open JPAEntityManager for transaction",ex);
}
将原有的提交操作取消
@Override
protected void doCommit(DefaultTransactionStatus status){
JpaTransactionObject txObject=(JpaTransactionObject)status.getTransaction();
if(status.isDebug()){
logger.debug("Committing JPA transaction on EntityManager["+
txObject.getEntityManagerHolder().getEntityManager()+"]");
}
在每个测试用例完成之后手动回滚事物
*执行某一测试用例
******************************************
*@author
*@version 1.0
******************************************
*@param m方法
*@param caeName测试用例名,自动编号
*@param params参数集合
*/
private void testMethodUseCase(DatMethod m,String caseName, List<DatParam>params){
//创建新事务
DefaultTransactionDefinition dtd=
new DefaultTransactionDefinition(
TransactionDefinition.PROPAGATION_REQUIRES_NEW);
DefaultTransactionStatus trans= (DefaultTransactionStatus)transManager.getTransaction(dtd);
try{
//清空redis缓存
super.clearRedisDB();
m.addRuns();
//方法参数处理
List<Object>mparams=new ArrayList<>();
Map<String,Object>paramsMap=new HashMap<String,Object>();
for(DatParam dp:params){
mparams.add(dp.getValue());
paramsMap.put(dp.getName(),dp.getValue());
}
//回滚事务
try{
transManager.rollback(trans);
}
catch(Exception e){
Log.DT.error("===事务关闭异常:"+e.getMessage());
}
DatAssertQdao.setTransConn(null);
}
本发明实施例中,确定所述目标系统中包含的待测试方法的执行流程如图2所示,包括步骤:
S201、获取所述目标系统中包含的各个测试类的第一标识;
本发明实施例中,所述测试用例的处理流程是通过普通单元测试类基础DitAutoTest自动测试基础类,需要测试单元测试类型的类继承DitAutoTest,当触发测试用例执行时,DitAutoTest中的startDitAutoTest会执行,并首先执行BaseTest中的数据初始化方法,数据初始完成后,通过扫描带有第一标识的测试类,并实例化该测试类,其中,所述第一标识用于对测试类进行区分,所述第一标识的选取可以依据具体情况进行设定,本发明实施例中对所述第一标识的形式不进行限定。例如所述第一标识可以是@DatTag。
其中,所述第一待测试标识的创建过程如下:在对应的测试目录创建好需要测试的类,则在测试目录下创建对应的测试类,用于执行单元测试的入口。如有业务类FareTypeService需要进行测试,则创建对应的FareTypeTest,
测试类必须继承至DitAutoTest,注入需要启动单元测试的对象,并在需要在注入测试对象前添加@DatTag注解,表示需要对该对象中的方法进行单元测试。@DatTag可以通过@DatTag(methods={"",""})指定需要测试的具体方法,如果未指定测试方法,则表示开启对象中所有方法的单元测试。本测试类中除了注入需要进行单元测试的对象之外,无需编写其他的测试代码。
S202、将所述第一标识与第一待测试标识相同的对象作为待测试类;
本发明实施例中,若所述第一待测试标识为@DatTag,则将各个第一标识中为@DatTag标识对应的测试类作为待测试类。
S203、获取所述待测试类中包含的各个方法的第二标识;
本发明实施例中,解析所述待测试类中的包含的各个方法,获取所述各个方法的第二标识,其中,所述述第二标识用于对方法进行区分,所述第二标识的选取可以依据具体情况进行设定,本发明实施例中对所述第二标识的形式不进行限定。
其中,所述第二待测试标识的创建过程如下:在所述待测试类的方法前添加@DatTest注解,并可以指定配置方式、断言方式等,也可以使用默认配置。
配置参数如下:
type为配置格式
当值为type=ConfigType.EXCEL,表示开启自动单元测试,使用excel 格式配置
当值为type=ConfigType.JSON,表示开启自动单元测试,使用Json格式配置
当没有配置type时默认为ConfigType.EXCEL
assertType为断言格式
当值为assertType=NORMAL,表示普通的断言方式,根据ASSERT工作表配置的res及其子属性对目标进行断言
当值为assertType=JSON,表示JSON断言方式,根据ASSERT工作表配置的res中的JSON字符串中的各个key为依据进行断言,运行结果的数据要大于等于预期结果
当值为assertType=SQL,表示SQL断言方式,根据ASSERT工作表中配置的SQL语句和res进行断言,执行sql语句返回JSON字符串,使用res 中的JSON对其进行判断
单行单列的直接写值
一行直接写JSON对象
多行写JSON数组
d.当没有配置assertType没有配置时默认为assertType=NORMAL
S204、将所述第二标识与第二待测试标识相同的方法作为待测试方法。
本发明实施例中,若所述第二待测试标识为@DatTest,则将各个第二标识中为@DatTest标识对应的方法作为待测试方法。标记有@DatTest注解的待测试方法。
获取完成后并反射所述待测试方法,并以顺序方式执行所述待测试方法。
本发明实施例中,依据所述目标测试用例和所述测试基础数据,对所述待测试方法进行测试,得到目标断言结果的方法流程如图3所示,包括步骤:
S301、对与所述待测试方法对应的数据库进行初始化;
本发明实施例中,在测试过程中,每次执行完一个测试用例或者开始测试之前,对需要对于所述待测试方法对应的数据库进行初始化。
S302、当接收到初始化完成指令时,在所述目标内存数据库中获取与所述待测试方法匹配的目标测试基础数据;
本发明实施例中,当接收到初始化完成指令时,获取所述待测试方法中包含的关键词,依据所述关键词在所述目标内存数据库中获取与所述待测试方法匹配的目标测试基础数据。
S303、将所述目标测试基础数据和所述目标测试用例传递给所述待测试方法进行测试;
本发明实施例中,将所述目标测试基础数据和多数目标测试用例的各个测试用例传递给所述待测试方法进行测试。
S304、获取所述待测试方法对应的目标断言结果的断言类型;
本发明实施例中,获取所述待测试方法对应的目标断言结果的断言类型,如FareTypeTest为对应测试类名称、typeSvc对应测试类中的需要测试属性名、 one|two|three对应需要测试的方法。
在excel下创建两个sheet分别为用例:USE_CASE、断言:ASSERT。测试用例USE_CASE页的表头必须与测试类的参数属性名相对应。断言结果 ASSERT页的表头分别为res、EXP_TYPE、EXP_MSG。其中res的为返回的结果。异常断言时,如果某个测试用例预期结果为异常信息,则在ASSERT 工作表的对应用例的res设置为EXP_ASSERT,同时可以设置异常的断言类型(EXP_TYPE)和信息(EXP_MSG)
断言方式:
当res为EXP_ASSERT时,运行结果必须抛出异常
当EXP_TYPE不为空时,异常类型和预期类型必须一致
当EXP_MSG不为空时,异常getMessage()结果和配置msg一致
S305、依据所述断言类型输出所述目标断言结果。
本发明实施例中,每一个测试用例必须对应一个断言结果。在测试类FareTypeTest对应的测试资源目录下创建测试用例文件,文件名如下:
FareTypeTest.typeSvc.four.TUR.xls
FareTypeTest.typeSvc.one.TUR.xls
FareTypeTest.typeSvc.search.TUR.xls
FareTypeTest.typeSvc.six.TUR.xls
FareTypeTest.typeSvc.three.TUR.xls
FareTypeTest.typeSvc.two.TUR.xls
单元测试的运行接口为FareTypeTest,运行对应的FareTypeTest类,在 eclipse的JUnit界面如果为绿色为单元跑的测试用例全部通过,当为红色时,为存在失败的单元测试。可在控制台查看测试用例的具体运行情况。
本发明实施例中,上述的自动化测试方法中测试数据组织与管理非常便利,提供了用excel进行基础数据的管理,减少了初始化的工作,达到了一次准备多次使用的效果,同时提供了用excel进行测试用例的管理,让测试用例一目了然,便于后期的维护。进一步的,断言也使用execl方式管理,可以轻松的把测试用例和单元测试结果管理,测试比较的手段非常丰富。该技术方案支持清晰的预期结果和实际结果的比较。轻量级配置容易扩展,技术方案配置简单,操作易学,支持个性化扩展,减少单元测试对软件开发效率的影响。单元测试用例的编写不直接和代码关联,编写单元测试用例可以不需要编写代码,降低了单元测试的编写难度。
基于上述的基于内存数据库的自动化测试方法,本发明实施例中还提供了一种基于内存数据库的自动化单元测试装置,所述装置的结构框图如图4所示,包括:
加载模块401、确定模块402、获取模块403和测试模块404。
其中,
所述加载模块401,用于在对目标系统进行测试时,将测试基础数据加载至目标内存数据库中;
所述确定模块402,用于确定所述目标系统中包含的待测试方法;
所述获取模块403,用于获取与所述待测试方法对应的目标测试用例;
所述测试模块404,用于依据所述目标测试用例和所述测试基础数据,对所述待测试方法进行测试,得到目标断言结果。
本发明公开了一种基于内存数据库的自动化单元测试装置,包括:在对目标系统进行测试时,将测试基础数据加载至目标内存数据库中;确定所述目标系统中包含的待测试方法;获取与所述待测试方法对应的目标测试用例;依据所述目标测试用例和所述测试基础数据,对所述待测试方法进行测试,得到目标断言结果。上述的测试装置中,在所述目标系统中确定所述待测试方法,在对所述待测试方法进行测试时,只需要找到与所述待测试方法匹配的测试用例,依据所述测试用例对所述测试方法进行测试,不需要每一个待测试方法单独编写测试代码,提高了测试效率。
本发明实施例中,所述测试装置还包括:回滚模块405。
其中,
所述回滚模块405,用于测试完成时,将当前目标测试用例对应的测试基础数据进行回滚。
本发明实施例中,所述确定模块402包括:
第一获取单元406、第一确定单元407、第二获取单元408和第二确定单元409。
其中,
所述第一获取单元406,用于获取所述目标系统中包含的各个测试类的第一标识;
所述第一确定单元407,用于将所述第一标识与第一待测试标识相同的对象作为待测试类;
所述第二获取单元408,用于获取所述待测试类中包含的各个方法的第二标识;
所述第二确定单元409,用于将所述第二标识与第二待测试标识相同的方法作为待测试方法。
本发明实施例中,所述获取模块403包括:
关键词获取单元410和查找单元411。
其中,
所述关键词获取单元410,用于获取所述待测试方法的关键词;
所述查找单元411,用于遍历各个测试用例,查找与所述关键词匹配的目标测试用例。
本发明实施例中,所述测试模块404包括:
初始化单元412、基础数据获取单元413、测试单元414,断言类型获取单元415和输出单元416。
其中,
所述初始化单元412,用于对与所述待测试方法对应的数据库进行初始化;
所述基础数据获取单元413,用于当接收到初始化完成指令时,在所述目标内存数据库中获取与所述待测试方法匹配的目标测试基础数据;
所述测试单元414,用于将所述目标测试基础数据和所述目标测试用例传递给所述待测试方法进行测试;
所述断言类型获取单元415,用于获取所述待测试方法对应的目标断言结果的断言类型;
所述输出单元416,用于依据所述断言类型输出所述目标断言结果。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本发明所提供的一种基于内存数据库的自动化单元测试方法及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (8)

1.一种基于内存数据库的自动化单元测试方法,其特征在于,包括:
在对目标系统进行测试时,将测试基础数据加载至目标内存数据库中;
确定所述目标系统中包含的待测试方法;
获取与所述待测试方法对应的目标测试用例,所述目标测试用例与所述测试基础数据相关联;
依据所述目标测试用例和所述测试基础数据,对所述待测试方法进行测试,得到目标断言结果,实现仅基于所述目标测试用例对所述待测试方法的测试;
确定所述目标系统中包含的待测试方法包括:
获取所述目标系统中包含的各个测试类的第一标识;
将所述第一标识与第一待测试标识相同的对象作为待测试类;
获取所述待测试类中包含的各个方法的第二标识;
将所述第二标识与第二待测试标识相同的方法作为待测试方法;
所述第一待测试标识的创建过程包括:
在测试目录下创建对应的测试类,用于执行单元测试的入口;所述测试类继承自普通单元测试类基础,注入需要启动单元测试的对象,并在注入测试对象前添加第一标识,以表示需要对该对象中的方法进行单元测试;其中,所述测试类中除了注入需要进行单元测试的对象外,无需编写其他的测试代码;
所述第二待测试标识的创建过程包括:在所述待测试类的方法前添加第二标识注解。
2.根据权利要求1所述的方法,其特征在于,还包括:
测试完成时,将当前目标测试用例对应的测试基础数据进行回滚。
3.根据权利要求1所述的方法,其特征在于,获取与所述待测试方法对应的目标测试用例包括:
获取所述待测试方法的关键词;
遍历各个测试用例,查找与所述关键词匹配的目标测试用例。
4.根据权利要求1所述的方法,其特征在于,依据所述目标测试用例和所述测试基础数据,对所述待测试方法进行测试,得到目标断言结果包括:
对与所述待测试方法对应的数据库进行初始化;
当接收到初始化完成指令时,在所述目标内存数据库中获取与所述待测试方法匹配的目标测试基础数据;
将所述目标测试基础数据和所述目标测试用例传递给所述待测试方法进行测试;
获取所述待测试方法对应的目标断言结果的断言类型;
依据所述断言类型输出所述目标断言结果。
5.一种基于内存数据库的自动化单元测试装置,其特征在于,包括:
加载模块,用于在对目标系统进行测试时,将测试基础数据加载至目标内存数据库中;
确定模块,用于确定所述目标系统中包含的待测试方法;
获取模块,用于获取与所述待测试方法对应的目标测试用例,所述目标测试用例与所述测试基础数据相关联;
测试模块,用于依据所述目标测试用例和所述测试基础数据,对所述待测试方法进行测试,得到目标断言结果,实现仅基于所述目标测试用例对所述待测试方法的测试;
所述确定模块包括:
第一获取单元,用于获取所述目标系统中包含的各个测试类的第一标识;
第一确定单元,用于将所述第一标识与第一待测试标识相同的对象作为待测试类;
第二获取单元,用于获取所述待测试类中包含的各个方法的第二标识;
第二确定单元,用于将所述第二标识与第二待测试标识相同的方法作为待测试方法;
所述第一待测试标识的创建过程包括:
在测试目录下创建对应的测试类,用于执行单元测试的入口;所述测试类继承自普通单元测试类基础,注入需要启动单元测试的对象,并在注入测试对象前添加第一标识,以表示需要对该对象中的方法进行单元测试;
所述第二待测试标识的创建过程包括:在所述待测试类的方法前添加第二标识注解。
6.根据权利要求5所述的装置,其特征在于,还包括:
回滚模块,用于测试完成时,将当前目标测试用例对应的测试基础数据进行回滚。
7.根据权利要求5所述的装置,其特征在于,所述获取模块包括:
关键词获取单元,用于获取所述待测试方法的关键词;
查找单元,用于遍历各个测试用例,查找与所述关键词匹配的目标测试用例。
8.根据权利要求5所述的装置,其特征在于,所述测试模块包括:
初始化单元,用于对与所述待测试方法对应的数据库进行初始化;
基础数据获取单元,用于当接收到初始化完成指令时,在所述目标内存数据库中获取与所述待测试方法匹配的目标测试基础数据;
测试单元,用于将所述目标测试基础数据和所述目标测试用例传递给所述待测试方法进行测试;
断言类型获取单元,用于获取所述待测试方法对应的目标断言结果的断言类型;
输出单元,用于依据所述断言类型输出所述目标断言结果。
CN201911001733.6A 2019-10-21 2019-10-21 一种基于内存数据库的自动化单元测试方法及装置 Active CN110750457B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911001733.6A CN110750457B (zh) 2019-10-21 2019-10-21 一种基于内存数据库的自动化单元测试方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911001733.6A CN110750457B (zh) 2019-10-21 2019-10-21 一种基于内存数据库的自动化单元测试方法及装置

Publications (2)

Publication Number Publication Date
CN110750457A CN110750457A (zh) 2020-02-04
CN110750457B true CN110750457B (zh) 2023-11-10

Family

ID=69279124

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911001733.6A Active CN110750457B (zh) 2019-10-21 2019-10-21 一种基于内存数据库的自动化单元测试方法及装置

Country Status (1)

Country Link
CN (1) CN110750457B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112965905A (zh) * 2021-03-11 2021-06-15 京东数科海益信息科技有限公司 数据测试方法、装置、设备及存储介质
CN113407449A (zh) * 2021-03-29 2021-09-17 广州海量数据库技术有限公司 一种接口测试方法以及装置
CN114528214A (zh) * 2022-02-18 2022-05-24 马上消费金融股份有限公司 单元测试方法和装置

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103942138A (zh) * 2013-01-23 2014-07-23 纽海信息技术(上海)有限公司 测试方法及装置
CN104375933A (zh) * 2014-09-18 2015-02-25 广州华多网络科技有限公司 一种单元测试方法和装置
CN106326122A (zh) * 2016-08-23 2017-01-11 北京精密机电控制设备研究所 一种软件单元测试用例管理系统
US9710367B1 (en) * 2015-10-30 2017-07-18 EMC IP Holding Company LLC Method and system for dynamic test case creation and documentation to the test repository through automation
CN107423224A (zh) * 2017-08-10 2017-12-01 中国民航信息网络股份有限公司 测试方法及装置
WO2018026974A1 (en) * 2016-08-02 2018-02-08 Motometrix Inc. System and method for identification of brain injury
CN108491331A (zh) * 2018-04-13 2018-09-04 平安普惠企业管理有限公司 软件测试方法、装置、设备和计算机存储介质
CN108595342A (zh) * 2018-05-14 2018-09-28 杭州有赞科技有限公司 单元测试方法和装置
US10146676B1 (en) * 2015-06-26 2018-12-04 Twitter, Inc. Multi-version regression tester for source code
WO2019196213A1 (zh) * 2018-04-12 2019-10-17 平安科技(深圳)有限公司 接口测试方法、装置、设备及计算机可读存储介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7587636B2 (en) * 2005-08-04 2009-09-08 Microsoft Corporation Unit test generalization
US20190004932A1 (en) * 2017-06-30 2019-01-03 Infinera Corporation Unit test and automation framework (utaf) system and method
US10528457B2 (en) * 2018-01-30 2020-01-07 Compuware Corporation Automated unit testing in a mainframe environment

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103942138A (zh) * 2013-01-23 2014-07-23 纽海信息技术(上海)有限公司 测试方法及装置
CN104375933A (zh) * 2014-09-18 2015-02-25 广州华多网络科技有限公司 一种单元测试方法和装置
US10146676B1 (en) * 2015-06-26 2018-12-04 Twitter, Inc. Multi-version regression tester for source code
US9710367B1 (en) * 2015-10-30 2017-07-18 EMC IP Holding Company LLC Method and system for dynamic test case creation and documentation to the test repository through automation
WO2018026974A1 (en) * 2016-08-02 2018-02-08 Motometrix Inc. System and method for identification of brain injury
CN106326122A (zh) * 2016-08-23 2017-01-11 北京精密机电控制设备研究所 一种软件单元测试用例管理系统
CN107423224A (zh) * 2017-08-10 2017-12-01 中国民航信息网络股份有限公司 测试方法及装置
WO2019196213A1 (zh) * 2018-04-12 2019-10-17 平安科技(深圳)有限公司 接口测试方法、装置、设备及计算机可读存储介质
CN108491331A (zh) * 2018-04-13 2018-09-04 平安普惠企业管理有限公司 软件测试方法、装置、设备和计算机存储介质
CN108595342A (zh) * 2018-05-14 2018-09-28 杭州有赞科技有限公司 单元测试方法和装置

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Tao Xie等. Automatic identification of common and special object-oriented unit tests.《OOPSLA '04: Companion to the 19th annual ACM SIGPLAN conference on Object-oriented programming systems》.2004,第324–325页. *
基于MySql的单元测试数据自动生成方法及应用;周建辉;;南通纺织职业技术学院学报(第03期);第11-14页 *
自动化测试框架的研究与实现;曾北溟;《中国优秀博硕士学位论文全文数据库 (硕士) 信息科技辑》(第5期);I138-107 *

Also Published As

Publication number Publication date
CN110750457A (zh) 2020-02-04

Similar Documents

Publication Publication Date Title
US8561036B1 (en) Software test case management
CN110750457B (zh) 一种基于内存数据库的自动化单元测试方法及装置
US9201646B2 (en) Automatic code review and code reviewer recommendation
US8732669B2 (en) Efficient model checking technique for finding software defects
US6941546B2 (en) Method and apparatus for testing a software component using an abstraction matrix
US6536036B1 (en) Method and apparatus for managing code test coverage data
Vechev et al. Deriving linearizable fine-grained concurrent objects
US5898872A (en) Software reconfiguration engine
US8645919B2 (en) Generic validation test framework for graphical user interfaces
US8473915B2 (en) Coverage analysis tool for testing database-aware software applications
US20070011671A1 (en) Method for the static analysis of concurrent multi-threaded software
US20060248515A1 (en) Sound transaction-based reduction without cycle detection
US7685471B2 (en) System and method for detecting software defects
CN108319711A (zh) 数据库的事务一致性测试方法、装置、存储介质及设备
US8510714B2 (en) Implementing integrated documentation and application testing
CN103164335B (zh) 检查单元测试质量的方法和系统
CN102981946A (zh) Etl冒烟测试方法
US20100161676A1 (en) Lifecycle management and consistency checking of object models using application platform tools
US20050262399A1 (en) Aggregating and prioritizing failure signatures by a parsing program
Khurshid Generating structurally complex tests from declarative constraints
Xiang et al. Checking the inconsistent data in concurrent systems by petri nets with data operations
CN109491904B (zh) 一种SparkSQL应用程序的自动化测试方法和装置
Gobert et al. Best practices of testing database manipulation code
CN111506513B (zh) 一种基于层次化模型的文件系统测试方法
US11853196B1 (en) Artificial intelligence driven testing

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