CN107357734A - 一种单元测试方法和装置 - Google Patents

一种单元测试方法和装置 Download PDF

Info

Publication number
CN107357734A
CN107357734A CN201710590804.5A CN201710590804A CN107357734A CN 107357734 A CN107357734 A CN 107357734A CN 201710590804 A CN201710590804 A CN 201710590804A CN 107357734 A CN107357734 A CN 107357734A
Authority
CN
China
Prior art keywords
test
code
data
point
observation
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.)
Pending
Application number
CN201710590804.5A
Other languages
English (en)
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.)
Bank of China Ltd
Original Assignee
Bank of China 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 Bank of China Ltd filed Critical Bank of China Ltd
Priority to CN201710590804.5A priority Critical patent/CN107357734A/zh
Publication of CN107357734A publication Critical patent/CN107357734A/zh
Pending legal-status Critical Current

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/3676Test management for coverage analysis
    • 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

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)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种单元测试方法和装置,方法包括:运行目标代码过程中,监测目标语句是否设置有注释标识;当确定所述目标语句未设置有所述注释标识时,利用所述目标语句加载所述目标代码的测试代码;运行加载有所述测试代码的目标代码;当确定所述目标语句设置有所述注释标识时,直接运行所述目标代码;由此可见,通过在目标语句设置或不设置注释标识的方式来实现测试代码自动加载或删除,这种方式保证了目标代码本身不会受到测试代码的影响。

Description

一种单元测试方法和装置
技术领域
本发明涉及自动测试技术领域,更具体的说是涉及一种单元测试方法和装置。
背景技术
自动化测试是根据测试用例来编写测试代码来实现的,测试用例是为特定目标而开发的一组测试输入、执行条件和预期结果,以便测试某个程序路径或核实是否满足某个特定需求。在进行测试时,通常需要程序员根据测试用例来编写测试代码。
目前,针对每个项目而言,可以采用单元测试的方式对目标代码进行测试,单元测试具体为对目标代码的每个程序单元进行测试的方式。
而现有的单元测试方法均是直接在目标代码中手动插入测试代码,这种方式导致在后续使用目标代码时需要手动删除测试代码,而手动插入和手动手工删除的方式不能保证准确性,从而对目标代码本身产生影响。
发明内容
有鉴于此,本发明提供一种单元测试方法和装置,以解决现有技术中手动插入和手动删除测试代码的方式会对目标代码本身产生影响的技术问题。
为实现上述目的,本发明提供如下技术方案:
一种单元测试方法,包括:
运行目标代码过程中,监测目标语句是否设置有注释标识;
当确定所述目标语句未设置有所述注释标识时,利用所述目标语句加载所述目标代码的测试代码;
运行加载有所述测试代码的目标代码;
当确定所述目标语句设置有所述注释标识时,直接运行所述目标代码。
优选的,所述测试代码为自动生成的代码,具体的,所述运行目标代码之前,还包括:
获取测试用例的设置点的测试数据以及观测点的观测数据;
基于所述测试数据和所述观测数据生成第一测试代码;其中,所述第一测试代码为所述目标代码中的第一程序模块的测试代码;
相应的,所述利用所述目标语句加载所述目标代码的测试代码,包括:
利用所述目标语句将所述第一测试代码加载到所述目标代码中。
优选的,所述运行加载有所述测试代码的目标代码,包括:
将所述第一测试代码中的测试数据加载至所述目标代码的第一程序模块的设置点,并在所述目标代码的第一程序模块的观测点获取测试结果数据;
所述运行加载有所述测试代码的目标代码之后,还包括:
将所述测试结果数据与所述观测数据进行比较,生成测试报告。
优选的,所述获取测试用例的设置点的测试数据以及观测点的观测数据,包括:
接收用户上传的测试用例的测试文档,基于所述测试文档获取所述测试用例的设置点的测试数据以及观测点的观测数据;
和/或,接收用户在线输入的测试用例的设置点的测试数据以及观测点的观测数据。
优选的,所述基于所述测试数据和所述观测数据生成第一测试代码,包括:
获取测试用例所描述的第一程序模块的属性信息;
基于所述属性信息确定测试代码模板;
将所述测试数据和所述观测数据添加到所述测试代码模板中,生成第一测试代码。
优选的,所述设置点和所述观测点分别具有对其对应的断言标签,所述断言标签用于确定所述设置点的位置以及所述观测点的位置。
优选的,在运行加载有所述测试代码的目标代码的过程中,该方法还包括:
运行所述目标代码中的所述第一程序模块时,检测从所述第一程序模块的设置点到观测点的运行时间;
当所述运行时间超过预设运行时间时,生成报警信息。
一种单元测试装置,包括:
监测标识单元,用于在运行目标代码过程中,监测目标语句是否设置有注释标识;
加载代码单元,用于当确定所述目标语句未设置有所述注释标识时,利用所述目标语句加载所述目标代码的测试代码;
第一运行单元,用于运行加载有所述测试代码的目标代码;
第二运行单元,用于当确定所述目标语句设置有所述注释标识时,直接运行所述目标代码。
优选的,所述测试代码为自动生成的代码,该装置还包括:
获取数据单元,用于获取测试用例的设置点的测试数据以及观测点的观测数据;
生成代码单元,用于基于所述测试数据和所述观测数据生成第一测试代码;其中,所述第一测试代码为所述目标代码中的第一程序模块的测试代码;
相应的,所述加载代码单元具体用于当确定所述目标语句未设置有所述注释标识时,利用所述目标语句将所述第一测试代码加载到所述目标代码中。
优选的,所述第一运行单元,包括:
加载数据模块,用于将所述第一测试代码中的测试数据加载至所述目标代码的第一程序模块的设置点;
获取数据模块,用于在所述目标代码的第一程序模块的观测点获取测试结果数据;
该装置还包括:生成报告单元,用于将所述测试结果数据与所述观测数据进行比较,生成测试报告。
优选的,所述获取数据单元,包括:
第一接收模块,用于接收用户上传的测试用例的测试文档,基于所述测试文档获取所述测试用例的设置点的测试数据以及观测点的观测数据;
和/或,
第二接收模块,用于接收用户在线输入的测试用例的设置点的测试数据以及观测点的观测数据。
优选的,所述生成代码单元,包括:
获取信息模块,用于获取测试用例所描述的第一程序模块的属性信息;
确定模板模块,用于基于所述属性信息确定测试代码模板;
生成代码模块,用于将所述测试数据和所述观测数据添加到所述测试代码模板中,生成第一测试代码。
优选的,所述设置点和所述观测点分别具有对其对应的断言标签,所述断言标签用于确定所述设置点的位置以及所述观测点的位置。
优选的,该装置还包括:
检测时间单元,用于在运行所述目标代码中的所述第一程序模块时,检测从所述第一程序模块的设置点到观测点的运行时间;
第一报警单元,用于当所述运行时间超过预设运行时间时,生成报警信息。
经由上述的技术方案可知,与现有技术相比,本发明公开提供了一种单元测试方法,具体的,在运行目标代码过程中,通过监测目标语句是否设置有注释标识,当确定目标语句未设置有注释标识时,利用目标语句加载目标代码的测试代码,从而运行加载有测试代码的目标代码,当目标语句设置有注释标识时,直接运行目标代码。由此可见,通过在目标语句设置或不设置注释标识的方式来实现测试代码的插入与删除,这种方式保证了目标代码本身不会受到测试代码的影响。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明一个实施例公开的一种单元测试方法的流程示意图;
图2为本发明另一实施例公开的一种单元测试方法的部分流程示意图;
图3为本发明又一实施例公开的一种单元测试方法的流程示意图;
图4为本发明一个实施例公开的一种单元测试装置的结构示意图;
图5为本发明另一实施例公开的一种单元测试装置的结构示意图;
图6为本发明又一实施例公开的一种单元测试装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供了一种单元测试方法和单元测试装置,应用于单元测试系统中,主要用于TDD(Test Drive Development,测试驱动开发)中。需说明的是,本发明提供的单元测试方法和装置是COBOL语言的,能够将测试代码和目标代码自动分离,也能够自动将测试代码加载到目标代码中。具体的,通过以下实施例进行详细描述。
本发明一个实施例公开了一种单元测试方法,如图1所示,该方法包括:
步骤101:运行目标代码过程中,监测目标语句是否设置有注释标识;
目标代码为产品的源代码,该注释标识为在编译目标代码过程中用户可以设置在目标语句中的标识,通过该注释标识来决定在运行目标代码过程中是否加载测试代码。
其中,该目标语句可以为COBOL语言中的COPY语句,利用COPY语句实现测试代码与目标代码的分离,具体的,在编译目标代码时,用户可以在COPY语句中添加测试代码的标识,若需要对目标代码进行测试,则不在COPY语句前设置注释标识,若不需要对目标代码进行测试而是直接使用目标代码,则在COPY语句前设置注释标识,如设置“*”。
例如,COPY语句添加测试代码的一个实例如下:
*COPY DWBR0000IN LIBRYBOR
COPY DWBR01JW IN LIBRYBOR
其中,“DWBR0000”和“DWBR01JW”为测试代码的标识,“*COPY DWBR0000INLIBRYBOR”为设置有注释标识的目标语句,“COPY DWBR01JW IN LIBRYBOR”为未设置有注释标识的目标语句。
需说明的是,注释标识的实现方式有多种,本发明并不对此进行限定,本实施例仅是以“*”举例说明。
步骤102:当确定所述目标语句未设置有所述注释标识时,利用所述目标语句加载所述目标代码的测试代码;
当确定目标语句未设置有注释标识时,则确定需要对目标代码进行测试,则利用目标语句加载目标代码的测试代码,即利用目标语句中的测试代码标识在与所述目标代码处于同一环境的不同存储目录中查找与测试代码标识对应的测试代码,并加载到目标代码中。
该目标语句可以设置在目标代码的目标位置处,作为一种实现方式,该目标位置可以为目标代码的最后位置。
步骤103:运行加载有所述测试代码的目标代码;
通过运行加载有测试代码的目标代码,实现对目标代码的测试。
步骤104:当确定所述目标语句设置有所述注释标识时,直接运行所述目标代码。
即直接运行没有测试代码的目标代码。
由此可见,在运行目标代码过程中,通过监测目标语句是否设置有注释标识,当确定目标语句未设置有注释标识时,利用目标语句加载目标代码的测试代码,从而运行加载有测试代码的目标代码,当目标语句设置有注释标识时,直接运行目标代码,本发明通过在目标语句设置或不设置注释标识的方式来实现测试代码自动加载或删除,这种方式保证了目标代码本身不会受到测试代码的影响。
现有的单元测试方法中,测试代码是由程序员手工编写的,由于有些测试代码的代码量非常大,甚至会超过目标代码量,因此,这种手动编写的方式非常耗时。而本发明可以实现测试代码的自动生成,具体的,本发明另一实施例公开了一种单元测试方法,如图2所示,该方法包括以下步骤:
步骤201:获取测试用例的设置点的测试数据以及观测点的观测数据;
其中,测试用例的设置点作为测试用例的输入赋值点,测试用例的观测点为测试用例的输出验证点。具体的“获取测试用例的设置点的测试数据以及观测点的观测数据”可以包括以下两种方式:
一种为:获取用户上传的测试用例的测试文档,基于所述测试文档获取所述测试用例的设置点的测试数据以及观测点的观测数据。
在这种方式下,自动测试系统可以提供用于上传测试文档的外部接口,用户通过该接口上传测试文档,该测试文档是符合测试用例要求的文档,其中包括设置点的测试数据以及观测点的观测数据。其中,在本发明中,设置点和观测点分别以断言标签来表征,设置点的属性为输入,观测点的属性为输出。
其中,该测试文档可以为excel文档。
另一种为:接收用户在线输入的测试用例的设置点的测试数据以及观测点的观测数据。
在这种方式下,自动测试系统可以提供用于在线输入的外部接口,用户通过接口在线输出测试用例的设置点的测试数据以及观测点的观测数据,其中,设置点和观测点分别以断言标签表征,设置点的属性为输入,观测点的属性为输出。即作为一种应用实例,即用户通过自动测试系统提供的外部接口进入输入界面,在输入界面上输入测试用例的断言标签、属性以及相关数据,当属性为输入时,则确定输入的数据为测试用例的设置点的测试数据,当属性为输出时,则确定输入的数据为测试用例的观测点的观测数据。
需说明的是,上述两种方式可以并列实施,也可以单独实施,也就是说可以为“和”的关系,也可以为“或”的关系。
步骤202:基于所述测试数据和所述观测数据生成第一测试代码;
其中,第一测试代码为所述目标代码中的第一程序模块的测试代码。
目标代码为产品的源代码,在编码过程中,可以按照产品功能将目标代码进行程序模块的划分,分别设置程序模块编号。本发明是按照程序模块对目标代码进行测试,每一程序模块对应一测试代码。需说明的是,当程序段过大时,还可以将程序段切片,由于程序切片可以看作是相对较小的程序模块,因此无论是程序模块还是程序切片,本发明均以程序模块进行描述。在本发明中,自动测试系统还可以提供查找测试用例的外部接口,用户可以通过该接口输入程序模块编号,从而使得自动测试系统以程序模块编号为索引查找测试用例。这种方式的当目标代码发生改变时,能够迅速的确定发生改变的测试用例。
具体的,基于所述测试数据和所述观测数据生成第一测试代码,包括以下过程:
(1)获取测试用例所描述的第一程序模块的属性信息;
测试用例所描述的第一程序模块的属性信息包括批次信息、程序源信息、程序渠道信息;其中,批次信息用于表征测试用例所描述的第一程序模块的所属的批次号;程序源信息用于表征测试用例所描述的第一程序模块所属的程序;程序渠道信息用于表征测试用例所描述的第一程序模块所属的渠道。
该属性信息可以由用户在上传测试文档或在线输入设置点的测试数据以及观测点的观测数据时一并输入。即自动测试系统可以提供输入属性信息的外部接口,用户在上传测试文档或在线输入设置点的测试数据时为本次测试用例选择相应的属性信息。
(2)基于所述属性信息确定测试代码模板;
不同的属性信息对应不同的测试代码模板,基于所获取的属性信息能够确定出测试代码模板。
(3)将所述测试数据和所述观测数据添加到所述测试代码模板中,生成第一测试代码。
需说明的是,当用户输入针对一个测试用例的数据信息后,可以触发系统自动生成测试代码。当然用户也可以输入针对其他测试用例的数据信息,从而当输入完针对多个测试用例的数据信息后,再触发系统自动生成测试代码。
其中,生成的第一测试代码可以保存在测试数据库中与目标代码处于同一环境的不同存储目录里。
步骤203:运行目标代码过程中,监测目标语句是否设置有注释标识;
步骤204:当确定所述目标语句未设置有所述注释标识时,利用所述目标语句将所述第一测试代码加载到所述目标代码中;
即目标语句中设置有第一测试代码的标识,即利用目标语句中的第一测试代码标识在存储目录中查找与第一测试代码标识对应的测试代码,并加载到目标代码中。
步骤205:运行加载有第一测试代码的目标代码;
具体的,运行加载有所述测试代码的目标代码,包括:将所述第一测试代码中的测试数据加载至所述目标代码的第一程序模块的设置点,并在所述目标代码的第一程序模块的观测点获取测试结果数据。
目标代码由多个程序模块组成,针对第一程序模块而言,在该第一程序模块的开始处设置有设置点,在第一程序模块的结束处设置观测点,当然还可以在第一程序模块的其他位置设置所述设置点以及所述观测点,对此本发明没有具体限定。
具体的,设置点和观测点分别采用断言标签进行表征,以与用户输入的设置点和观测点保持一致。在运行目标代码过程中,当运行到目标代码的第一程序模块的用于表征设置点的断言标签处,则将第一测试代码中的测试数据加载到设置点,当运行到目标代码的第一程序模块的用于表征观测点的断言标签处,则获取测试结果数据。
也就是说,第一程序模块的设置点和观测点分别具有对其对应的断言标签,断言标签用于确定设置点的位置以及观测点的位置。
在本发明另一实施例中,运行加载有测试代码的目标代码之后,还包括:将测试结果数据与观测数据进行比较,生成测试报告。
在本发明中,可以生成包括测试结果的测试报告,当测试结果数据与观测数据一致时,则表明该第一程序模块测试通过;当测试结果数据与观测数据不一致时,则表明该第一程序模块测试未通过。可以对测试报告进行划分,将所有测试结果归为测试案例单,将测试通过归为测试记录单,将测试未通过的归为测试问题单。即,测试报告包括测试案例单、测试记录单元以及测试问题单。
在本发明中,测试报告可以包括程序源标识(用于表征目标代码)、案例号(用于表征测试用例)、测试点(用于表征测试位置)、测试结果数据、观测数据;当然还可以包括执行日期,测试员标识等等。具体的,可以根据实际要求进行预先设定。
本发明的另一实施例中,当生成测试报告后,还可以包括:将测试报告上传到测试数据库,以便用户查看。
步骤206:当确定所述目标语句设置有所述注释标识时,直接运行所述目标代码。
由此可见,本发明通过在目标语句设置或不设置注释标识的方式来实现测试代码自动加载或删除,这种方式保证了目标代码本身不会受到测试代码的影响;
进一步的,通过调整设置点的测试数据以及观测点的观测数据就可自动生成测试代码,无需程序员手动编写,节省了工作量,并方便对被测的目标代码进行集成,保证按目标代码的顺序执行测试用例的设值和断言;
进一步的,能够将第一测试代码的测试数据自动加载到目标代码的第一程序模块的设置点,并在目标代码的第一程序模块的观测点获取测试结果数据,将所述测试结果数据与观测数据进行比较,生成测试报告,使得能够根据测试用例的设置点的测试数据和观测点的观测数据自动实现了目标代码的测试。
本发明又一实施例公开了一种单元测试方法,如图3所示,该方法包括以下步骤:
步骤301:获取测试用例的设置点的测试数据以及观测点的观测数据;
步骤302:基于所述测试数据和所述观测数据生成第一测试代码;
其中,所述第一测试代码为所述目标代码中的第一程序模块的测试代码。
步骤303:运行目标代码过程中,监测目标语句是否设置有注释标识;
步骤304:当确定所述目标语句未设置有所述注释标识时,利用所述目标语句将所述第一测试代码加载到所述目标代码中;
步骤305:运行加载有所述第一测试代码的目标代码,当运行到所述目标代码中的所述第一程序模块时,检测从所述第一程序模块的设置点到观测点的运行时间;
具体的,运行到设置点时,在设置点设置第一时间戳,在运行到观测点时,在观测点设置第二时间戳,通过第一时间戳和第二时间戳来计算从设置点到观测点的运行时间。
步骤306:当所述运行时间超过预设运行时间时,生成报警信息;
将该运行时间与预设运行时间进行比较,当运行时间超过预设运行时间时,生成报警信息。
基于上述实施例,当单元测试方法包括将测试结果数据与观测数据进行比较,生成测试报告时,该测试报告还可以包括:运行时间、报警原因、报警位置中的一种或多种。
步骤307:当确定所述目标语句设置有所述注释标识时,直接运行所述目标代码。
由此可见,在本实施例中,能够监控每个设置点到观测点之间的运行时间,从而在运行时间超过预设运行时间时生成报警信息,从而使得开发人员能够重点分析报出报警的程序代码。
需说明的是,上述单元测试方法应用于自动测试系统中,对于自动测试系统除了以上实施例提及的各种接口外,还可以包括实现其他多种功能的接口,具体的,可以包括以下接口中的一个或多个:
柜员管理接口,用于供授权的柜员管理相关的测试用例。具体的,自动测试系统的管理员可对每个柜员对某个程序某个批次的测试用例进行授权,有权限的柜员可以维护相关的测试用例。
测试用例管理接口,用于对测试用例进行管理,提供手工录入、修改删除测试用例的功能,同时也提供文档导入导出功能。
测试代码管理接口,用于供用户将测试代码下载到本地PC或上传到单元测试环境(开发库)中。
测试报告管理接口,用于供用户下载或上传测试报告。
综上,本发明的以上各实施例相对于现有技术而言,具有以下有益效果:
1、现有的测试方法由开发人员手动插入测试代码和手动删除测试代码,容易对产品代码本身产生影响。
本发明中开发人员可以在编译目标代码过程中,通过在目标语句设置或不设置注释标识的方式来决定是否插入测试代码,以实现测试代码自动加载或删除,这种方式使得目标代码本身不会受到测试代码的影响。
2、现有的测试方法依靠手工预埋数据和视觉观察执行结果,耗费人力,无法准确判定执行结果。
本发明提供的单元测试方法和装置,能够自动判断执行结果的正确性,自动化测试比手工判断更加高效。
3、现有的测试方法需要依靠在产品编码后进行详细的测试分析,将设计和编码的成果转化为测试用例,而在此分析过程中极易造成错漏,使测试难以覆盖设计开发的变更范围。
而本发明以修改程序模块为索引的测试用例,能做到设计逻辑的全覆盖。
4、现有的测试方法需要手工编写相应测试代码将代码中的运行结果显性展示出来(如DISPLAY语句等)。
本发明能够自动生成测试代码并进行测试执行结果的正确性。
5、现有的测试所组织的测试数据在测试完成后就被丢弃,所分析出的各种业务场景没有积累,在二次开发和回归测试中极易遗漏重要业务场景和观测结果。
本发明可以以程序模块和修改批次为维度管理测试用例和对应生成的测试代码,并且能够将测试需要的数据同环境进行隔离,使测试需要准备的数据不受环境的影响,在程序模块的二次开发和回归测试时被复用。
与上述单元测试方法对应的,本发明还公开了一种单元测试装置,通过以下各实施例进行描述:
本发明一个实施例公开了一种单元测试装置,应用于自动测试系统中,如图4所示,该装置包括:监测标识单元401、加载代码单元402、第一运行单元403以及第二运行单元404;其中:
监测标识单元401,用于在运行目标代码过程中,监测目标语句是否设置有注释标识;
目标代码为产品的源代码,该注释标识为在编译目标代码过程中用户可以设置在目标语句中的标识,通过该注释标识来决定在运行目标代码过程中是否加载测试代码。
其中,该目标语句可以为COBOL语言中的COPY语句,利用COPY语句实现测试代码与目标代码的分离,具体的,在编译目标代码时,用户可以在COPY语句中添加测试代码的标识,若需要对目标代码进行测试,则不在COPY语句前设置注释标识,若不需要对目标代码进行测试而是直接使用目标代码,则在COPY语句前设置注释标识,如设置“*”。
例如,COPY语句添加测试代码的一个实例如下:
*COPY DWBR0000IN LIBRYBOR
COPY DWBR01JW IN LIBRYBOR
其中,“DWBR0000”和“DWBR01JW”为测试代码的标识,“*COPY DWBR0000INLIBRYBOR”为设置有注释标识的目标语句,“COPY DWBR01JW IN LIBRYBOR”为未设置有注释标识的目标语句。
需说明的是,注释标识的实现方式有多种,本发明并不对此进行限定,本实施例仅是以“*”举例说明。
加载代码单元402,用于当确定所述目标语句未设置有所述注释标识时,利用所述目标语句加载所述目标代码的测试代码;
当确定目标语句未设置有注释标识时,则确定需要对目标代码进行测试,则利用目标语句加载目标代码的测试代码,即加载代码单元利用目标语句中的测试代码标识在与所述目标代码处于同一环境的不同存储目录中查找与测试代码标识对应的测试代码,并加载到目标代码中。
该目标语句可以设置在目标代码的目标位置处,作为一种实现方式,该目标位置可以为目标代码的最后位置。
第一运行单元403,用于运行加载有所述测试代码的目标代码;
通过运行加载有测试代码的目标代码,实现对目标代码的测试。
第二运行单元404,用于当确定所述目标语句设置有所述注释标识时,直接运行所述目标代码。
即第二运行单元当确定所述目标语句设置有所述注释标识时,直接运行没有测试代码的目标代码。
由此可见,在运行目标代码过程中,通过监测目标语句是否设置有注释标识,当确定目标语句未设置有注释标识时,利用目标语句加载目标代码的测试代码,从而运行加载有测试代码的目标代码,当目标语句设置有注释标识时,直接运行目标代码,本发明通过在目标语句设置或不设置注释标识的方式来实现测试代码自动加载或删除,这种方式保证了目标代码本身不会受到测试代码的影响。
现有的单元测试方法中,测试代码是由程序员手工编写的,由于有些测试代码的代码量非常大,甚至会超过目标代码量,因此,这种手动编写的方式非常耗时。而本发明可以实现测试代码的自动生成,具体的,本发明另一实施例公开了一种单元测试装置,如图5所示,该装置包括:获取数据单元501、生成代码单元502、监测标识单元503、加载代码单元504、第一运行单元505以及第二运行单元506;其中:
获取数据单元501,用于获取测试用例的设置点的测试数据以及观测点的观测数据;
其中,测试用例的设置点作为测试用例的输入赋值点,测试用例的观测点为测试用例的输出验证点。具体的,获取数据单元501包括:第一接收模块,和/或,第二接收模块。
第一接收模块,用于接收用户上传的测试用例的测试文档,基于所述测试文档获取所述测试用例的设置点的测试数据以及观测点的观测数据。
在这种方式下,自动测试系统可以提供用于上传测试文档的外部接口,用户通过该接口上传测试文档,该测试文档是符合测试用例要求的文档,其中包括设置点的测试数据以及观测点的观测数据。其中,在本发明中,设置点和观测点分别以断言标签来表征,设置点的属性为输入,观测点的属性为输出。
其中,该测试文档可以为excel文档。
第二接收模块,用于接收用户在线输入的测试用例的设置点的测试数据以及观测点的观测数据。
在这种方式下,自动测试系统可以提供用于在线输入的外部接口,用户通过接口在线输出测试用例的设置点的测试数据以及观测点的观测数据,其中,设置点和观测点分别以断言标签表征,设置点的属性为输入,观测点的属性为输出。即作为一种应用实例,即用户通过自动测试系统提供的外部接口进入输入界面,在输入界面上输入测试用例的断言标签、属性以及相关数据,当属性为输入时,则确定输入的数据为测试用例的设置点的测试数据,当属性为输出时,则确定输入的数据为测试用例的观测点的观测数据。
生成代码单元502,用于基于所述测试数据和所述观测数据生成第一测试代码;
其中,所述第一测试代码为目标代码中的第一程序模块的测试代码。
目标代码为产品的源代码,在编码过程中,可以按照产品功能将目标代码进行程序模块的划分,分别设置程序模块编号。本发明是按照程序模块对目标代码进行测试,每一程序模块对应一测试代码。需说明的是,当程序段过大时,还可以将程序段切片,由于程序切片可以看作是相对较小的程序模块,因此无论是程序模块还是程序切片,本发明均以程序模块进行描述。在本发明中,自动测试系统还可以提供查找测试用例的外部接口,用户可以通过该接口输入程序模块编号,从而使得自动测试系统以程序模块编号为索引查找测试用例。这种方式的当目标代码发生改变时,能够迅速的确定发生改变的测试用例。
具体的,生成代码单元包括:获取信息模块、确定模板模块以及生成代码模块;其中:
获取信息模块,用于获取测试用例所描述的第一程序模块的属性信息;
测试用例所描述的第一程序模块的属性信息包括批次信息、程序源信息、程序渠道信息;其中,批次信息用于表征测试用例所描述的第一程序模块的所属的批次号;程序源信息用于表征测试用例所描述的第一程序模块所属的程序;程序渠道信息用于表征测试用例所描述的第一程序模块所属的渠道。
该属性信息可以由用户在上传测试文档或在线输入设置点的测试数据以及观测点的观测数据时一并输入。即自动测试系统可以提供输入属性信息的外部接口,用户在上传测试文档或在线输入设置点的测试数据时为本次测试用例选择相应的属性信息。
确定模板模块,用于基于所述属性信息确定测试代码模板;
不同的属性信息对应不同的测试代码模板,基于所获取的属性信息能够确定出测试代码模板。
生成代码模块,用于将所述测试数据和所述观测数据添加到所述测试代码模板中,生成第一测试代码。
需说明的是,当用户输入针对一个测试用例的数据信息后,可以触发系统自动生成测试代码。当然用户也可以输入针对其他测试用例的数据信息,从而当输入完针对多个测试用例的数据信息后,再触发系统自动生成测试代码。
在本发明的另一实施例中,该装置还包括:第一保存单元,用于将第一测试代码保存至测试数据库中与目标代码处于同一环境的不同存储目录里。
监测标识单元503,用于在运行目标代码过程中,监测目标语句是否设置有注释标识;
加载代码单元504,用于当确定所述目标语句未设置有所述注释标识时,利用所述目标语句将所述第一测试代码加载到所述目标代码中;
第一运行单元505,用于运行加载有所述测试代码的目标代码;
在一个实施例中,第一运行单元,包括:加载数据模块以及获取数据模块;其中:
加载数据模块,用于将所述第一测试代码中的测试数据加载至所述目标代码的第一程序模块的设置点;
获取数据模块,用于在所述目标代码的第一程序模块的观测点获取测试结果数据。
目标代码由多个程序模块组成,针对第一程序模块而言,在该第一程序模块的开始处设置有设置点,在第一程序模块的结束处设置观测点,当然还可以在第一程序模块的其他位置设置所述设置点以及所述观测点,对此本发明没有具体限定。
具体的,设置点和观测点分别采用断言标签进行表征,以与用户输入的设置点和观测点保持一致。在运行目标代码过程中,当运行到目标代码的第一程序模块的用于表征设置点的断言标签处,则将第一测试代码中的测试数据加载到设置点,当运行到目标代码的第一程序模块的用于表征观测点的断言标签处,则获取测试结果数据。
也就是说,第一程序模块的设置点和观测点分别具有对其对应的断言标签,断言标签用于确定设置点的位置以及观测点的位置。
在本发明另一实施例中,该装置还包括:生成报告单元,用于将所述测试结果数据与所述观测数据进行比较,生成测试报告。
在本发明中,可以生成包括测试结果的测试报告,当测试结果数据与观测数据一致时,则表明该第一程序模块测试通过;当测试结果数据与观测数据不一致时,则表明该第一程序模块测试未通过。可以对测试报告进行划分,将所有测试结果归为测试案例单,将测试通过归为测试记录单,将测试未通过的归为测试问题单。即,测试报告包括测试案例单、测试记录单元以及测试问题单。
在本发明中,测试报告可以包括程序源标识(用于表征目标代码)、案例号(用于表征测试用例)、测试点(用于表征测试位置)、测试结果数据、观测数据;当然还可以包括执行日期,测试员标识等等。具体的,可以根据实际要求进行预先设定。
在本发明的另一实施例中,该装置还可以包括:第一上传单元,用于将测试报告上传到测试数据库,以便用户查看。
第二运行单元506,当确定所述目标语句设置有所述注释标识时,直接运行所述目标代码。
由此可见,本发明通过在目标语句设置或不设置注释标识的方式来实现测试代码自动加载或删除,这种方式保证了目标代码本身不会受到测试代码的影响;
进一步的,通过调整设置点的测试数据以及观测点的观测数据就可自动生成测试代码,无需程序员手动编写,节省了工作量,并方便对被测的目标代码进行集成,保证按目标代码的顺序执行测试用例的设值和断言;
进一步的,能够将第一测试代码的测试数据自动加载到目标代码的第一程序模块的设置点,并在目标代码的第一程序模块的观测点获取测试结果数据,将所述测试结果数据与观测数据进行比较,生成测试报告,使得能够根据测试用例的设置点的测试数据和观测点的观测数据自动实现了目标代码的测试。
本发明又一实施例公开了一种单元测试装置,如图6所示,该装置包括:获取数据单元601、生成代码单元602、监测标识单元603、加载代码单元604、第一运行单元605、检测时间单元606、第一报警单元607以及第二运行单元608;其中:
获取数据单元601,用于获取测试用例的设置点的测试数据以及观测点的观测数据;
生成代码单元602,用于基于所述测试数据和所述观测数据生成第一测试代码;
其中,所述第一测试代码为目标代码中的第一程序模块的测试代码。
监测标识单元603,用于在运行目标代码过程中,监测目标语句是否设置有注释标识;
加载代码单元604,用于当确定所述目标语句未设置有所述注释标识时,利用所述目标语句将所述第一测试代码加载到所述目标代码中;
第一运行单元605,用于运行加载有所述测试代码的目标代码;
检测时间单元606,用于在运行所述目标代码中的所述第一程序模块时,检测从所述第一程序模块的设置点到观测点的运行时间;
具体的,第一检测单元用于在运行到设置点时,在设置点设置第一时间戳,在运行到观测点时,在观测点设置第二时间戳,通过第一时间戳和第二时间戳来计算从设置点到观测点的运行时间。
第一报警单元607,用于当所述运行时间超过预设运行时间时,生成报警信息。
具体的,第一报警单元用于将该运行时间与预设运行时间进行比较,当运行时间超过预设运行时间时,生成报警信息。
基于前文所描述的实施例,当单元测试装置包括生成报告单元时,该测试报告还可以包括:运行时间、报警原因、报警位置中的一种或多种。
第二运行单元608,当确定所述目标语句设置有所述注释标识时,直接运行所述目标代码。
由此可见,在本实施例中,能够监控每个设置点到观测点之间的运行时间,从而在运行时间超过预设运行时间时生成报警信息,从而使得开发人员能够重点分析报出报警的程序代码。
需说明的是,上述单元测试装置应用于自动测试系统中,对于自动测试系统除了以上实施例提及的各种接口外,还可以包括实现其他多种功能的接口,具体的,可以包括以下接口中的一个或多个:
柜员管理接口,用于供授权的柜员管理相关的测试用例。具体的,自动测试系统的管理员可对每个柜员对某个程序某个批次的测试用例进行授权,有权限的柜员可以维护相关的测试用例。
测试用例管理接口,用于对测试用例进行管理,提供手工录入、修改删除测试用例的功能,同时也提供文档导入导出功能。
测试代码管理接口,用于供用户将测试代码下载到本地PC或上传到单元测试环境(开发库)中。
测试报告管理接口,用于供用户下载或上传测试报告。
综上,本发明的以上各实施例相对于现有技术而言,具有以下有益效果:
1、现有的测试方法由开发人员手动插入测试代码和手动删除测试代码,容易对产品代码本身产生影响。
本发明中开发人员可以在编译目标代码过程中,通过在目标语句设置或不设置注释标识的方式来决定是否插入测试代码,以实现测试代码自动加载或删除,这种方式使得目标代码本身不会受到测试代码的影响。
2、现有的测试方法依靠手工预埋数据和视觉观察执行结果,耗费人力,无法准确判定执行结果。
本发明提供的单元测试方法和装置,能够自动判断执行结果的正确性,自动化测试比手工判断更加高效。
3、现有的测试方法需要依靠在产品编码后进行详细的测试分析,将设计和编码的成果转化为测试用例,而在此分析过程中极易造成错漏,使测试难以覆盖设计开发的变更范围。
而本发明以修改程序模块为索引的测试用例,能做到设计逻辑的全覆盖。
4、现有的测试方法需要手工编写相应测试代码将代码中的运行结果显性展示出来(如DISPLAY语句等)。
本发明能够自动生成测试代码并进行测试执行结果的正确性。
5、现有的测试所组织的测试数据在测试完成后就被丢弃,所分析出的各种业务场景没有积累,在二次开发和回归测试中极易遗漏重要业务场景和观测结果。
本发明可以以程序模块和修改批次为维度管理测试用例和对应生成的测试代码,并且能够将测试需要的数据同环境进行隔离,使测试需要准备的数据不受环境的影响,在程序模块的二次开发和回归测试时被复用。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (14)

1.一种单元测试方法,其特征在于,包括:
运行目标代码过程中,监测目标语句是否设置有注释标识;
当确定所述目标语句未设置有所述注释标识时,利用所述目标语句加载所述目标代码的测试代码;
运行加载有所述测试代码的目标代码;
当确定所述目标语句设置有所述注释标识时,直接运行所述目标代码。
2.根据权利要求1所述的方法,其特征在于,所述测试代码为自动生成的代码,具体的,所述运行目标代码之前,还包括:
获取测试用例的设置点的测试数据以及观测点的观测数据;
基于所述测试数据和所述观测数据生成第一测试代码;其中,所述第一测试代码为所述目标代码中的第一程序模块的测试代码;
相应的,所述利用所述目标语句加载所述目标代码的测试代码,包括:
利用所述目标语句将所述第一测试代码加载到所述目标代码中。
3.根据权利要求2所述的方法,其特征在于,所述运行加载有所述测试代码的目标代码,包括:
将所述第一测试代码中的测试数据加载至所述目标代码的第一程序模块的设置点,并在所述目标代码的第一程序模块的观测点获取测试结果数据;
所述运行加载有所述测试代码的目标代码之后,还包括:
将所述测试结果数据与所述观测数据进行比较,生成测试报告。
4.根据权利要求2所述的方法,其特征在于,所述获取测试用例的设置点的测试数据以及观测点的观测数据,包括:
接收用户上传的测试用例的测试文档,基于所述测试文档获取所述测试用例的设置点的测试数据以及观测点的观测数据;
和/或,接收用户在线输入的测试用例的设置点的测试数据以及观测点的观测数据。
5.根据权利要求2所述的方法,其特征在于,所述基于所述测试数据和所述观测数据生成第一测试代码,包括:
获取测试用例所描述的第一程序模块的属性信息;
基于所述属性信息确定测试代码模板;
将所述测试数据和所述观测数据添加到所述测试代码模板中,生成第一测试代码。
6.根据权利要求3所述的方法,其特征在于,所述设置点和所述观测点分别具有对其对应的断言标签,所述断言标签用于确定所述设置点的位置以及所述观测点的位置。
7.根据权利要求2所述的方法,其特征在于,在运行加载有所述测试代码的目标代码的过程中,该方法还包括:
运行所述目标代码中的所述第一程序模块时,检测从所述第一程序模块的设置点到观测点的运行时间;
当所述运行时间超过预设运行时间时,生成报警信息。
8.一种单元测试装置,包括:
监测标识单元,用于在运行目标代码过程中,监测目标语句是否设置有注释标识;
加载代码单元,用于当确定所述目标语句未设置有所述注释标识时,利用所述目标语句加载所述目标代码的测试代码;
第一运行单元,用于运行加载有所述测试代码的目标代码;
第二运行单元,用于当确定所述目标语句设置有所述注释标识时,直接运行所述目标代码。
9.根据权利要求8所述的装置,其特征在于,所述测试代码为自动生成的代码,该装置还包括:
获取数据单元,用于获取测试用例的设置点的测试数据以及观测点的观测数据;
生成代码单元,用于基于所述测试数据和所述观测数据生成第一测试代码;其中,所述第一测试代码为所述目标代码中的第一程序模块的测试代码;
相应的,所述加载代码单元具体用于当确定所述目标语句未设置有所述注释标识时,利用所述目标语句将所述第一测试代码加载到所述目标代码中。
10.根据权利要求9所述的装置,其特征在于,所述第一运行单元,包括:
加载数据模块,用于将所述第一测试代码中的测试数据加载至所述目标代码的第一程序模块的设置点;
获取数据模块,用于在所述目标代码的第一程序模块的观测点获取测试结果数据;
该装置还包括:生成报告单元,用于将所述测试结果数据与所述观测数据进行比较,生成测试报告。
11.根据权利要求9所述的装置,其特征在于,所述获取数据单元,包括:
第一接收模块,用于接收用户上传的测试用例的测试文档,基于所述测试文档获取所述测试用例的设置点的测试数据以及观测点的观测数据;
和/或,
第二接收模块,用于接收用户在线输入的测试用例的设置点的测试数据以及观测点的观测数据。
12.根据权利要求9所述的装置,其特征在于,所述生成代码单元,包括:
获取信息模块,用于获取测试用例所描述的第一程序模块的属性信息;
确定模板模块,用于基于所述属性信息确定测试代码模板;
生成代码模块,用于将所述测试数据和所述观测数据添加到所述测试代码模板中,生成第一测试代码。
13.根据权利要求10所述的装置,其特征在于,所述设置点和所述观测点分别具有对其对应的断言标签,所述断言标签用于确定所述设置点的位置以及所述观测点的位置。
14.根据权利要求9所述的装置,其特征在于,该装置还包括:
检测时间单元,用于在运行所述目标代码中的所述第一程序模块时,检测从所述第一程序模块的设置点到观测点的运行时间;
第一报警单元,用于当所述运行时间超过预设运行时间时,生成报警信息。
CN201710590804.5A 2017-07-19 2017-07-19 一种单元测试方法和装置 Pending CN107357734A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710590804.5A CN107357734A (zh) 2017-07-19 2017-07-19 一种单元测试方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710590804.5A CN107357734A (zh) 2017-07-19 2017-07-19 一种单元测试方法和装置

Publications (1)

Publication Number Publication Date
CN107357734A true CN107357734A (zh) 2017-11-17

Family

ID=60284745

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710590804.5A Pending CN107357734A (zh) 2017-07-19 2017-07-19 一种单元测试方法和装置

Country Status (1)

Country Link
CN (1) CN107357734A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111143229A (zh) * 2019-12-31 2020-05-12 中国银行股份有限公司 软件测试方法及装置、计算机设备及计算机可读存储介质
CN111459818A (zh) * 2020-03-31 2020-07-28 中国银行股份有限公司 可视化测试方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080235661A1 (en) * 2007-03-21 2008-09-25 Computer Associates Think, Inc. System and method for using annotations to automatically generate a framework for a custom javaserver faces (jsf) component
CN101661580A (zh) * 2009-07-22 2010-03-03 中国农业银行股份有限公司 一种软件测试的方法及系统
CN101976220A (zh) * 2010-09-27 2011-02-16 北京神州泰岳软件股份有限公司 单元测试系统
CN104834590A (zh) * 2014-02-11 2015-08-12 腾讯科技(深圳)有限公司 软件测试方法和系统
CN105138464A (zh) * 2015-09-30 2015-12-09 沈文策 一种程序代码处理方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080235661A1 (en) * 2007-03-21 2008-09-25 Computer Associates Think, Inc. System and method for using annotations to automatically generate a framework for a custom javaserver faces (jsf) component
CN101661580A (zh) * 2009-07-22 2010-03-03 中国农业银行股份有限公司 一种软件测试的方法及系统
CN101976220A (zh) * 2010-09-27 2011-02-16 北京神州泰岳软件股份有限公司 单元测试系统
CN104834590A (zh) * 2014-02-11 2015-08-12 腾讯科技(深圳)有限公司 软件测试方法和系统
CN105138464A (zh) * 2015-09-30 2015-12-09 沈文策 一种程序代码处理方法和装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111143229A (zh) * 2019-12-31 2020-05-12 中国银行股份有限公司 软件测试方法及装置、计算机设备及计算机可读存储介质
CN111459818A (zh) * 2020-03-31 2020-07-28 中国银行股份有限公司 可视化测试方法及装置
CN111459818B (zh) * 2020-03-31 2023-11-21 中国银行股份有限公司 可视化测试方法及装置

Similar Documents

Publication Publication Date Title
US8799869B2 (en) System for ensuring comprehensiveness of requirements testing of software applications
Hata et al. Bug prediction based on fine-grained module histories
Deissenboeck et al. Software quality models: Purposes, usage scenarios and requirements
CN109784758B (zh) 基于bim模型的工程质量监管预警系统和方法
US9292410B2 (en) Using traceability links strength for software development integrity monitoring
Illes-Seifert et al. Exploring the relationship of a file’s history and its fault-proneness: An empirical method and its application to open source programs
US8269606B2 (en) Methods and systems for RFID tag read verification
CN103294594A (zh) 一种基于测试的静态分析误报消除方法
CN106529050A (zh) 一种产品三维模型数据检测方法、装置及系统
CN109189674A (zh) 一种软件缺陷自动上报的方法及系统
Yang et al. Vuldigger: A just-in-time and cost-aware tool for digging vulnerability-contributing changes
CN111752833B (zh) 一种软件质量体系准出方法、装置、服务器及存储介质
CN107357734A (zh) 一种单元测试方法和装置
CN111966587A (zh) 数据采集方法、装置和设备
García-Valls et al. An extensible collaborative framework for monitoring software quality in critical systems
CN105653445B (zh) 一种满足do‑178c测试结果的实现方法
Fernández-Sánchez et al. An open tool for assisting in technical debt management
Agrawal et al. Ruffle: Extracting co-change information from software project repositories
US8239362B1 (en) Using metadata fragments as authoritative manufacturing work instructions
CN113590825A (zh) 文本质检方法、装置及相关设备
CN111679983B (zh) Java接口静态测试方法及装置
KR102106696B1 (ko) 소프트웨어 검사 장치 및 방법
Snipes et al. Code hot spot: A tool for extraction and analysis of code change history
Smith et al. Measuring reuse in hazard analysis
Petnga Graph‐based Assessment and Analysis of System Architecture Models

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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20171117