CN111966587A - 数据采集方法、装置和设备 - Google Patents

数据采集方法、装置和设备 Download PDF

Info

Publication number
CN111966587A
CN111966587A CN202010782944.4A CN202010782944A CN111966587A CN 111966587 A CN111966587 A CN 111966587A CN 202010782944 A CN202010782944 A CN 202010782944A CN 111966587 A CN111966587 A CN 111966587A
Authority
CN
China
Prior art keywords
unit test
target system
code
file
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.)
Pending
Application number
CN202010782944.4A
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.)
CCB Finetech Co Ltd
Original Assignee
China Construction Bank Corp
CCB Finetech 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 Construction Bank Corp, CCB Finetech Co Ltd filed Critical China Construction Bank Corp
Priority to CN202010782944.4A priority Critical patent/CN111966587A/zh
Publication of CN111966587A publication Critical patent/CN111966587A/zh
Pending legal-status Critical Current

Links

Images

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/3688Test management for test execution, e.g. scheduling of test suites

Abstract

本申请提供了一种数据采集方法、装置和设备,其中,该方法包括:执行目标系统的单元测试代码;其中,所述单元测试代码中设置有监听器,所述监听器用于将监听到的单元测试案例执行数据写入预设文件中;获取所述预设文件和执行所述目标系统的单元测试代码生成的Jacoco数据文件;根据所述预设文件和所述Jacoco数据文件,确定所述目标系统的单元测试案例执行结果和代码覆盖率;将所述目标系统的单元测试案例执行结果和代码覆盖率发送给所述目标系统的处理对象。在本申请实施例中,可以准确、高效地将目标系统的单元测试案例执行结果和代码覆盖率及时发送给目标系统的处理对象。

Description

数据采集方法、装置和设备
技术领域
本申请涉及系统测试技术领域,特别涉及一种数据采集方法、装置和设备。
背景技术
在银行内有成百上千个系统,每个月都有上百个系统进行投产上线,做好各个系统的质量管控是至关重要的。其中,单元测试就是系统的质量管控的一个重要的环节。在系统投产上线前项目组在本地云桌面使用Eclipse IDE编写和执行JUnit单元测试案例,管理人员可以根据单元测试案例执行结果和代码行/分支覆盖率对系统的质量进行管控。
现有技术中,单元测试案例执行结果和代码覆盖率只有项目组的测试人员自己才可以通过代码执行完成的界面看到,而管理人员如果需要了解各个系统的单元测试案例和代码覆盖率相关的结果,只能依赖各个项目组的相关测试人员进行填表汇总,在excel表中填写单元测试案例数、通过率、代码覆盖率等数据。由于采用人工手动的方式采集各个系统的单元测试案例和代码覆盖率相关的结果主观性较大,并且管理人员无法核实数据是否准确、真实。从而使得采用现有技术中的采集方式无法准确地采集单元测试案例执行结果和代码覆盖率,以有效的对各个系统进行质量管控。
针对上述问题,目前尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种数据采集方法、装置和设备,以解决现有技术中无法准确地采集单元测试案例执行结果和代码行/分支覆盖率,以有效的对各个系统进行质量管控的问题。
本申请实施例提供了一种数据采集方法,包括:
执行目标系统的单元测试代码;其中,所述单元测试代码中设置有监听器,所述监听器用于将监听到的单元测试案例执行数据写入预设文件中;
获取所述预设文件和执行所述目标系统的单元测试代码生成的Jacoco数据文件;
根据所述预设文件和所述Jacoco数据文件,确定所述目标系统的单元测试案例执行结果和代码覆盖率;
将所述目标系统的单元测试案例执行结果和代码覆盖率发送给所述目标系统的处理对象。
本申请实施例还提供了一种数据采集装置,包括:
执行模块,用于执行目标系统的单元测试代码;其中,所述单元测试代码中设置有监听器,所述监听器用于将监听到的单元测试案例执行结果写入预设文件中;
获取模块,用于获取所述预设文件和执行所述目标系统的单元测试代码生成的Jacoco数据文件;
确定模块,用于根据所述预设文件和所述Jacoco数据文件,确定所述目标系统的单元测试案例执行结果和代码覆盖率;
发送模块,用于将所述目标系统的单元测试案例执行结果和代码覆盖率发送给所述目标系统的处理对象。
本申请实施例还提供了一种数据采集设备,包括处理器以及用于存储处理器可执行指令的存储器,所述处理器执行所述指令时实现所述数据采集方法的步骤。
本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机指令,所述指令被执行时实现所述数据采集方法的步骤。
本申请实施例提供了一种数据采集方法,可以通过执行目标系统的单元测试代码,获取预设文件和执行目标系统的单元测试代码生成的Jacoco数据文件,其中,由于单元测试代码中设置有监听器,因此,可以利用监听器将监听到的单元测试案例执行数据写入预设文件中。进一步的,可以根据预设文件和Jacoco数据文件,确定目标系统的单元测试案例执行结果和代码覆盖率,并将目标系统的单元测试案例执行结果和代码覆盖率发送给目标系统的处理对象,从而可以准确、高效地将目标系统的单元测试案例执行结果和代码覆盖率及时发送给目标系统的处理对象。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,并不构成对本申请的限定。在附图中:
图1是根据本申请实施例提供的数据采集方法的步骤示意图;
图2是根据本申请具体实施例提供的数据采集方法的示意图;
图3是根据本申请具体实施例提供的单元测试案例执行结果和代码覆盖率的展示界面的示意图;
图4是根据本申请具体实施例提供的输入代码源文件根目录和字节码文件根目录的界面的示意图;
图5是根据本申请具体实施例提供的管理人员侧的单元测试结果数据的显示界面的示意图;
图6是根据本申请实施例提供的数据采集装置的结构示意图;
图7是根据本申请实施例提供的数据采集设备的结构示意图。
具体实施方式
下面将参考若干示例性实施方式来描述本申请的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本申请,而并非以任何方式限制本申请的范围。相反,提供这些实施方式是为了使本申请公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域的技术人员知道,本申请的实施方式可以实现为一种系统、装置设备、方法或计算机程序产品。因此,本申请公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
虽然下文描述流程包括以特定顺序出现的多个操作,但是应该清楚了解,这些过程可以包括更多或更少的操作,这些操作可以顺序执行或并行执行(例如使用并行处理器或多线程环境)。
请参阅图1,本实施方式可以提供一种数据采集方法。该数据采集方法可以用于准确地采集单元测试案例执行结果和代码覆盖率。上述数据采集方法可以包括以下步骤。
S101:执行目标系统的单元测试代码;其中,单元测试代码中设置有监听器,监听器用于将监听到的单元测试案例执行数据写入预设文件中。
在本实施方式中,为了采集目标系统的单元测试案例执行结果和代码覆盖率,可以先执行目标系统的单元测试代码。其中,上述单元测试代码可以为基于目标系统的应用代码编写的单元测试代码,可以是利用Java或者C++等编程语言编写的。优选的可以采用Java语言,其中,上述单元测试代码可以为JUnit测试代码,JUnit是一个Java语言的单元测试框架。
在本实施方式中,上述单元测试(unit testing)是指对软件中的最小可测试单元进行检查和验证,单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
在本实施方式中,上述目标系统可以为待进行单元测试的系统。
在本实施方式中,上述单元测试代码中可以设置有监听器,上述监听器可以用于监听、记录执行单元测试代码产生的单元测试案例执行数据,并将监听到的单元测试案例执行数据写入到第一预设目录下的一个新建的预设文件中。其中,上述预设文件可以为txt文件,当然可以理解的是也可以为其它格式的文件,例如,Excel文件等,具体的可以根据实际情况确定,本申请对此不作限定。
在一个实施方式中,在采用Java语言编写单元测试代码的情况下,监听器可以将监听到的单元测试案例执行数据以Json格式写入到第一预设目录下的一个新建的预设文件中。其中,上述Json(JavaScript Object Notation,JavaScript对象表示法)是一种基于JavaScript语法子集的开放标准数据交换格式,作用类似于XML(可扩展标记语言),它不是一种编程语言,仅用来描述数据结构。Json是基于文本的,轻量级的,通常被认为易于读/写。采用完全独立于编程语言的文本格式来存储和表示数据,易于阅读编写和机器解析生成,并有效地提升网络传输效率。
在一个实施方式中,为了达到监听案例执行数据并写入预设文件的目的,在采用Java语言编写上述单元测试代码时可以先定义一个CCB JUnit Runner类来继承BlockJUnit4ClassRunner,并重写其中的Run方法,从而可以在Run方法中绑定监听器。其中,监听器需要继承Run Listener,并重写其中的test Run Started、test Run Finished、test Started、test Finished、test Failure、test Ignored方法,上述方法中会记录案例执行结果、案例数量、案例失败数量等单元测试案例执行数据,并在代码执行完成后将其写入到预设文件中。
其中,上述Run方法是类的一个方法。在IDE中,比如NetBeans、Eclipse andIntelliJ IDEA都内置了图形化的JUnit Runner的支持,可以直接运行。如果不使用@RunWith注解指定Runner,默认使用的是BlockJUnit4ClassRunner。
在一个实施方式中,可以在上述单元测试代码中通过注解的方式,引入监听器,例如:@RunWith(CCB JUnit Runner.class)引入监听器。当一个类或者其父类标注了@RunWith注解后,JUnit就会使用指定的Runner替换内置的默认的Runner。
在一个实施方式中,可以在Eclipse IDE中使用Eclemma插件执行上述单元测试代码,上述Eclipse是一个开放源代码的、基于Java的可扩展开发平台,一个框架和一组服务,用于通过插件组件构建开发环境。上述IDE(集成开发环境,Integrated DevelopmentEnvironment)是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。上述Eclemma是一个免费的用来测试Java代码覆盖率的Eclipse插件,可以用Eclemma直接在Eclipse工作区中测试Java程序分析代码覆盖率,并且在Java编辑器中高亮显示源文件的代码覆盖情况。
S102:获取预设文件和执行目标系统的单元测试代码生成的Jacoco数据文件。
在本实施方式中,可以获取执行上述目标系统的单元测试代码所产生的预设文件以及生成的Jacoco数据文件。其中,Jacoco数据文件可以记录有与覆盖率相关的数据,上述Jacoco是目前使用最广泛的开源代码覆盖率工具,它最大的特性是支持在线对字节码进行插桩,也支持通过离线的方式进行插桩,Jacoco使用插桩的方式来记录覆盖率数据。
在本实施方式中,可以在执行目标系统的单元测试代码过程中获取预设文件和Jacoco数据文件,也可以在目标系统的单元测试代码执行完成后再获取预设文件和Jacoco数据文件,具体的可以根据实际情况确定本申请对此不作限定。
在本实施方式中,上述目标系统的单元测试代码可以设置有存储预设文件的目录和存储Jacoco数据文件的目录,可以根据存储预设文件的目录和存储Jacoco数据文件的目录获取得到预设文件和Jacoco数据文件。
在本实施方式中,上述Jacoco数据文件的后缀名可以为“.exec”,当然可以理解的是,在一些实施例中还可以为其它后缀名,具体的可以根据实际情况确定,本申请对此不作限定。
在一些实施例中,获取预设文件和Jacoco数据文件的方式还可以包括:根据用户输入的单元测试代码的源文件根目录和字节码文件根目录解析单元测试代码从而获取预设文件和Jacoco数据文件,或者,可以按照预设的查询条件进行查找得到,具体的可以根据实际情况确定本申请对此不作限定。
S103:根据预设文件和Jacoco数据文件,确定目标系统的单元测试案例执行结果和代码覆盖率。
在本实施方式中,可以从上述预设文件和Jacoco数据文件中解析出目标系统的单元测试案例执行结果和代码覆盖率。在一个实施例中,上述单元测试案例执行结果可以包括:案例总数、案例成功数、案例失败数、无效案例数等。
在本实施方式中,上述代码覆盖率是单元测试的重要衡量指标,是一种度量方式,反映了单元测试中测试用例对被测代码的覆盖程度,是衡量代码的测试质量的重要指标。其中,上述代码覆盖率的度量方式有很多种,可以包括:行覆盖(Line Coverage)、段覆盖(Segment Coverage)、基本块覆盖(BasicBlock Coverage)、分支覆盖(Branch Coverage)、所有边界覆盖(All-Edges Coverage)、基本路径覆盖(BasicPathCoverage)、判定路径覆盖(Decision-Decision-Path Coverage)、条件覆盖(ConditionCoverage)、断言覆盖(Predicate Coverage)等。
在本实施方式中,由于预设文件中存储有与单元测试案例执行结果相关的数据,Jacoco数据文件中存储有与代码覆盖率相关的数据,因此,可以根据上述预设文件和Jacoco数据文件确定目标系统的单元测试案例执行结果和代码覆盖率。在一些实施例中,由于预设文件和Jacoco数据文件中存储的数据格式不便于直观展示,并且存储的是与单元测试案例执行结果相关以及与代码覆盖率相关的中间数据,需要进行运算才能得到单元测试案例执行结果和代码覆盖率。因此,可以对预设文件和Jacoco数据文件进行解析从而得到目标系统的单元测试案例执行结果和代码覆盖率。
S104:将目标系统的单元测试案例执行结果和代码覆盖率发送给目标系统的处理对象。
在本实施方式中,可以将上述目标系统的单元测试案例执行结果和代码覆盖率发送给目标系统的处理对象。其中,上述目标系统的处理对象可以为对目标系统进行质量管控的相关处理人员,在一些实施例中,目标系统的处理对象可以为管理人员或者计算机程序,具体的可以根据实际情况确定,本申请对此不作限定。
在本实施方式中,上述目标系统的单元测试案例执行结果和代码覆盖率可以以图形、表格等形式发送给目标系统的处理对象。当然可以理解的是,在一些实施例中还可以采用其它形式,具体的可以根据实际情况确定,本申请对此不作限定。
在本实施方式中,目标系统与处理对象之间可以预先建立关联关系,从而在确定目标系统的单元测试案例执行结果和代码覆盖率之后,根据目标系统的相关信息获取目标系统的处理对象,以便处理对象可以及时看到目标系统的单元测试案例执行结果和代码覆盖率并进行处理。
在本实施方式中,将目标系统的单元测试案例执行结果和代码覆盖率发送给目标系统的处理对象,可以为将目标系统的单元测试案例执行结果和代码覆盖率上传至处理对象的客户端所属的服务器中并在处理对象的客户端中展示,或者将目标系统的单元测试案例执行结果和代码覆盖率上传至处理对象可查询的数据库中,具体的可以根据实际情况确定,本申请对此不作限定。
在一个实施方式中,上述代码覆盖率可以包括:行覆盖率、分支覆盖率、方法覆盖率、类覆盖率。当然可以理解的是上述单元测试案例执行结果和代码覆盖率还可以包括其它数据,例如,条件覆盖率等,具体的可以根据实际情况确定,本申请对此不作限定。
从以上的描述中,可以看出,本申请实施例实现了如下技术效果:可以通过执行目标系统的单元测试代码,获取预设文件和执行目标系统的单元测试代码生成的Jacoco数据文件,其中,由于单元测试代码中设置有监听器,因此,可以利用监听器将监听到的单元测试案例执行数据写入预设文件中。进一步的,可以根据预设文件和Jacoco数据文件,确定目标系统的单元测试案例执行结果和代码覆盖率,并将目标系统的单元测试案例执行结果和代码覆盖率发送给目标系统的处理对象,从而可以准确、高效地将目标系统的单元测试案例执行结果和代码覆盖率及时发送给目标系统的处理对象。
在一个实施方式中,在执行目标系统的单元测试代码之后,可以利用监听器将监听到的单元测试案例执行数据写入在第一预设目录下的预设文件中,进一步的,在确定目标系统的单元测试代码执行完成的情况下,可以将执行目标系统的单元测试代码生成的Jacoco数据写入在第二预设目录下的Jacoco数据文件中。
在本实施方式中,上述第一预设目录和第二预设目录可以为单元测试代码中预先设定的,目录是指将文件存储在计算机中的一定位置,以便快速定位文件所在的位置。上述目录的格式可以为:D:\目标系统\单元测试,或者,C:\Windows\Resources\Maps等,具体的可以根据实际情况确定,本申请对此不作限定。
在一个实施方式中,获取预设文件和执行目标系统的单元测试代码生成的Jacoco数据文件,可以包括:通过程序自动获取Eclipse工作空间根目录和Eclemma插件默认的存放数据目录:.metadata/plugins/org.eclipse.eclemma.core/.execdata,根据Eclipse工作空间根目录和Eclemma插件默认的存放数据目录可以获取Jacoco数据文件。进一步的,可以获取存储预设文件的第一预设目录,并根据第一预设目录获取预设文件。
在本实施方式中,上述源文件是相对目标文件和可执行文件而言的,源文件就是用汇编语言或高级语言写出来的代码保存为文件后的结果,目标文件是指源文件经过编译程序产生的能被CPU(中央处理器)直接识别二进制文件,可执行文件就是将目标文件连接后形成的可执行文件。字节码(Byte-code)是一种包含执行程序、由一序列op(operationcode,操作码)代码/数据对组成的二进制文件,是一种中间码,字节码文件可以称为目标文件。其中,java源文件通过javac编译生成的.class文件便是字节码文件,上述javac是java语言编程编译器。
在本实施方式中,上述根目录是指逻辑驱动器的最上一级目录,它是相对子目录来说的。根目录在文件系统建立时即已被创建,其目的就是存储子目录(也称为文件夹)或文件的目录项。
在本实施方式中,单元测试代码的源文件根目录和字节码文件根目录的获取方式可以包括:接收项目组测试人员输入的单元测试代码的源文件根目录和字节码文件根目录。在一些实施例中,也可以是根据一定的查询条件从数据库或者网页中搜索得到的,具体的可以根据实际情况确定,本申请对此不作限定。
在一个实施方式中,根据预设文件和Jacoco数据文件,确定目标系统的单元测试案例执行结果,可以包括:读取预设文件中的字符串,将预设文件中的字符串转换成Json对象数组。进一步的,可以遍历Json对象数组中的每个Json对象,计算得到目标系统的单元测试案例执行结果。
在本实施方式中,监听器可以将监听到的单元测试案例执行数据以Json格式写入预设文件中,其中,Json是一种基于JavaScript语法子集的开放标准数据交换格式。因此,可以将预设文件中的字符串转换成Json对象数组。上述Json对象数组是一组有序的键值对的数据组成的数据类型,键值对中,值可以是简单值,也可以是对象和数组,数组用“[]”创建,对象用“{}”创建。
在本实施方式中可以针对每个Json对象,计算得到目标系统的单元测试案例执行结果。遍历Json对象数组中的每个Json对象可以获取其属性名和属性值,从而可以解析Json中的数据来计算得到目标系统的单元测试案例执行结果。在一些实施例中,上述目标系统的单元测试案例执行结果可以包括:案例总数、案例成功数、案例失败数、无效案例数。
在一个实施方式中,根据预设文件和Jacoco数据文件,确定目标系统的代码覆盖率,可以包括:对Jacoco数据文件中的数据结构进行分析,生成HTML格式的覆盖率报告,进一步的,可以对覆盖率报告进行解析,得到包括行覆盖率、分支覆盖率、方法覆盖率、类覆盖率的代码覆盖率数据。
在本实施方式中,可以根据被测的代码的源文件和编译后的字节码文件加载得到Jacoco数据文件中的数据,并且可以通过Jacoco的Jenkins插件对Jacoco数据文件中的数据结构进行分析,生成HTML(超文本标记语言)格式的覆盖率报告。其中,上述覆盖率报告可以以图表化的格式展示。
在本实施方式中,超文本标记语言(Hyper Text Markup Language,HTML)为标准通用标记语言下的一个应用,HTML不是一种编程语言,而是一种标记语言,是网页制作所必备的工具,“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。
在本实施方式中,如果class文件使用调试信息编译的话,产生的覆盖率可以映射到源码行并且高亮提示,例如:没有覆盖,在这一行中没有分支被执行(红色方块)、部分覆盖,这一行的分支中只有一部分被执行(黄色方块)、完全覆盖,这一行的所有分支都被执行(绿色方块)。
在本实施方式中,一行源代码是否被执行,要看这一行中是否至少有一个指令被执行;一个方法是否执行取决于方法中是否有至少一个指令被执行、一个方法是否执行取决于类中是否有至少一个方法被执行
在本实施方式中,可以根据覆盖率报告统计行覆盖率、分支覆盖率、方法覆盖率、类覆盖率,从而得到代码覆盖率数据。
在一个实施方式中,将目标系统的单元测试案例执行结果和代码覆盖率发送给目标系统的处理对象,可以包括:获取目标系统的属性信息,根据目标系统的属性信息,可以将目标系统的单元测试案例执行结果和代码覆盖率展示在处理对象的客户端的预设界面上。
在本实施方式中,上述目标系统的属性信息可以用于表征目标系统,在一些实施例中,可以包括但不限于一下至少之一:目标系统所属的事业群、目标系统的英文名称、目标系统的中文名称、目标系统的投产日期。当然可以理解的是,在一些实施例中还可以包括其它数据,例如:目标系统所属的工程名称等,具体的可以根据实际情况确定,本申请对此不作限定。
在本实施方式中,目标系统的属性信息的获取方式可以包括:接收项目组测试人员输入的目标系统的属性信息。在一些实施例中,也可以是根据一定的查询条件从数据库或者网页中搜索得到的,具体的可以根据实际情况确定,本申请对此不作限定。
在本实施方式中,可以将目标系统的单元测试案例执行结果和代码覆盖率展示在处理对象的客户端的预设界面上,其中,上述预设界面可以为客户端中单元测试结果的查询界面,该预设界面可以为网页,也可以为应用程序中的一个展示界面,具体的可以根据实际情况确定,本申请对此不作限定。
在一个实施方式中,根据目标系统的属性信息,将目标系统的单元测试案例执行结果和代码覆盖率展示在处理对象的客户端的预设界面上,可以包括:根据目标系统的属性信息,确定处理对象对应的目标数据库,并将目标系统的单元测试案例执行结果和代码覆盖率上传至目标数据库中。
进一步的,可以接收处理对象发送的查询请求,其中,查询请求中包含目标系统的属性信息。可以根据查询请求,从目标数据库中获取目标系统的单元测试案例执行结果和代码覆盖率,并将目标系统的单元测试案例执行结果和代码覆盖率展示在处理对象的客户端的预设界面上。
在本实施方式中,上述目标数据库可以为上述处理对象的客户端的服务器中的数据库,上述目标数据库可为处理对象有权限查询的数据库。由于根据目标系统的属性信息可以确定管控目标系统的质量的处理对象,因此,可以将目标系统的单元测试案例执行结果和代码覆盖率上传至目标数据库中。
在本实施方式中,处理对象可以通过点击客户端中某一个按键触发查询请求,上述查询请求中可以携带有处理对象的标识信息,服务器可以通过处理对象的标识信息确定处理对象所管控的所有系统的属性信息,从而可以根据查询请求获取处理对象所管控的所有系统的单元测试案例执行结果和代码覆盖率。
在本实施方式中,处理对象也可以针对目标系统发起查询请求,查询请求中可以包含目标系统的属性信息。从而可以根据查询请求,从目标数据库中获取目标系统的单元测试案例执行结果和代码覆盖率。
在一个实施方式中,在执行目标系统的单元测试代码之前,还可以包括:基于目标系统编写初始单元测试代码,在初始单元测试代码通过注解的方式引入监听器,得到目标系统的单元测试代码。
在本实施方式中,为了达到监听案例执行数据并写入预设文件的目的,在采用Java语言编写上述单元测试代码时可以先定义一个CCB JUnit Runner类来继承BlockJUnit4ClassRunner,并重写其中的Run方法,从而可以在Run方法中绑定监听器。其中,监听器需要继承Run Listener,并重写其中的test Run Started、test Run Finished、test Started、test Finished、test Failure、test Ignored方法,上述方法中会记录案例执行结果、案例数量、案例失败数量等单元测试案例执行数据,并在代码执行完成后将其写入到预设文件中。
其中,上述Run方法是类的一个方法。在IDE中,比如NetBeans、Eclipse andIntelliJ IDEA都内置了图形化的JUnit Runner的支持,可以直接运行。如果不使用@RunWith注解指定Runner,默认使用的是BlockJUnit4ClassRunner。
在一个实施方式中,可以在上述单元测试代码中通过注解的方式,引入监听器,例如:@RunWith(CCB JUnit Runner.class)引入监听器。当一个类或者其父类标注了@RunWith注解后,JUnit就会使用指定的Runner替换内置的默认的Runner。
在一个实施方式中,执行目标系统的单元测试代码,可以包括:在Eclipse IDE中使用Eclemma插件执行目标系统的单元测试代码,监听器在单元测试代码的执行过程中监听单元测试案例执行数据。
在本实施方式中,可以在Eclipse IDE中使用Eclemma插件执行上述单元测试代码,上述Eclipse是一个开放源代码的、基于Java的可扩展开发平台,一个框架和一组服务,用于通过插件组件构建开发环境。上述IDE(集成开发环境,Integrated DevelopmentEnvironment)是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。上述Eclemma是一个免费的用来测试Java代码覆盖率的Eclipse插件,可以用Eclemma直接在Eclipse工作区中测试Java程序分析代码覆盖率,并且在Java编辑器中高亮显示源文件的代码覆盖情况
在一个实施方式中,目标系统的处理对象在得到目标系统的单元测试案例执行结果和代码覆盖率之后,可以对目标系统的单元测试案例执行结果和代码覆盖率进行分析,确定是否存在由于测试案例设计遗漏导致的代码没有覆盖,或者是开发的无效代码导致该代码无法被覆盖,如果单元测试案例设计有所遗漏,可以对照的增加相应的案例,对于无效代码可以删除,从而有效的对各个系统进行质量管控。
下面结合一个具体实施例对上述方法进行说明,然而,值得注意的是,该具体实施例仅是为了更好地说明本申请,并不构成对本申请的不当限定。
本发明实施提供了一种数据采集方法,如图2中所示,可以包括:
步骤1:编写单元测试代码。
在本实施方式中,可以在Eclipse中编写Junit单元测试案例,并在单元测试代码中引入监听器jar包(JUnitExecutionListener.jar),可以在单元测试代码中以注解的方式引入@RunWith(CCBJunitRunner.class),监听器可以监听、记录单元测试案例执行结果,并以Json格式写入到第一预设目录的一个新建的txt文件中。
步骤2:使用Eclipse中Eclemma插件执行单元测试代码。
单元测试代码执行完成后,会生成中间结果文件,其中,上述中间结果文件中包括:以.exec为后缀名的Jacoco数据文件和和监听器监听到的以.txt为后缀名的案例执行结果文件。
步骤3:启动Eclipse插件。
Eclipse插件可以用于解析监听器生成的案例执行结果文件和Eclipse Eclemma插件生成的Jacoco数据文件,以获取包含案例总数、案例成功数、失败案例数、无效案例数的单元测试案例执行结果,以及包含行覆盖率、分支覆盖率、方法覆盖率、类覆盖率的代码覆盖率,并在界面进行展示,单元测试案例执行结果和代码覆盖率的展示界面可以如图3中所示。
启动Eclipse插件后可以输入代码源文件根目录和字节码文件根目录,具体的输入界面可以如图4中所示。Eclipse插件可以根据输入的代码源文件根目录和字节码文件根目录自动解析案例执行结果文件和Jacoco数据文件,从而可以获取单元测试案例执行结果和代码覆盖率。
步骤4:选择事业群、系统中文名、系统英文名、投产日信息。
项目组人员点击图4中的确认按钮后弹出图3中所示对话框,其中工程名、执行人、单元测试结果数据信息栏内容都是自动生成的,项目组可以在图3所示的界面中选择事业群、系统中文名、系统英文名、投产日信息,然后点击上传按钮即可将结果上传到目标数据库。
管理人员可通过前端页面,对单元测试结果数据进行查看,管理人员侧的单元测试结果数据的显示界面可以如图5中所示。其中,管理人员点击界面左侧的单元测试模块就可以出现“单元测试”的展示界面,界面中可以包含有的管理人员管控的所有系统的单元测试结果。
在本实施方式中,管理人员也可以在“单元测试”的展示界面中的查询输入框中输入希望查询的系统名称或者投产点,从而进行精确查询。
基于同一发明构思,本申请实施例中还提供了一种数据采集装置,如下面的实施例。由于数据采集装置解决问题的原理与数据采集方法相似,因此数据采集装置的实施可以参见数据采集方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。图6是本申请实施例的数据采集装置的一种结构框图,如图6所示,可以包括:执行模块601、获取模块602、确定模块603和发送模块604,下面对该结构进行说明。
执行模块601,可以用于执行目标系统的单元测试代码;其中,单元测试代码中设置有监听器,监听器用于将监听到的单元测试案例执行结果写入预设文件中;
获取模块601,可以用于获取预设文件和执行目标系统的单元测试代码生成的Jacoco数据文件;
确定模块601,可以用于根据预设文件和Jacoco数据文件,确定目标系统的单元测试案例执行结果和代码覆盖率;
发送模块601,可以用于将目标系统的单元测试案例执行结果和代码覆盖率发送给目标系统的处理对象。
本申请实施方式还提供了一种电子设备,具体可以参阅图7所示的基于本申请实施例提供的数据采集方法的电子设备组成结构示意图,电子设备具体可以包括输入设备71、处理器72、存储器73。其中,输入设备71具体可以用于输入目标系统的单元测试代码。处理器72具体可以用于执行目标系统的单元测试代码;其中,单元测试代码中设置有监听器,监听器用于将监听到的单元测试案例执行数据写入预设文件中;获取预设文件和执行目标系统的单元测试代码生成的Jacoco数据文件;根据预设文件和Jacoco数据文件,确定目标系统的单元测试案例执行结果和代码覆盖率;将目标系统的单元测试案例执行结果和代码覆盖率发送给目标系统的处理对象。存储器73具体可以用于存储目标系统的单元测试案例执行结果和代码覆盖率等参数。
在本实施方式中,输入设备具体可以是用户和计算机系统之间进行信息交换的主要装置之一。输入设备可以包括键盘、鼠标、摄像头、扫描仪、光笔、手写输入板、语音输入装置等;输入设备用于把原始数据和处理这些数的程序输入到计算机中。输入设备还可以获取接收其他模块、单元、设备传输过来的数据。处理器可以按任何适当的方式实现。例如,处理器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(ApplicationSpecific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式等等。存储器具体可以是现代信息技术中用于保存信息的记忆设备。存储器可以包括多个层次,在数字系统中,只要能保存二进制数据的都可以是存储器;在集成电路中,一个没有实物形式的具有存储功能的电路也叫存储器,如RAM、FIFO等;在系统中,具有实物形式的存储设备也叫存储器,如内存条、TF卡等。
在本实施方式中,该电子设备具体实现的功能和效果,可以与其它实施方式对照解释,在此不再赘述。
本申请实施方式中还提供了一种基于数据采集方法的计算机存储介质,计算机存储介质存储有计算机程序指令,在计算机程序指令被执行时可以实现:执行目标系统的单元测试代码;其中,单元测试代码中设置有监听器,监听器用于将监听到的单元测试案例执行数据写入预设文件中;获取预设文件和执行目标系统的单元测试代码生成的Jacoco数据文件;根据预设文件和Jacoco数据文件,确定目标系统的单元测试案例执行结果和代码覆盖率;将目标系统的单元测试案例执行结果和代码覆盖率发送给目标系统的处理对象。
在本实施方式中,上述存储介质包括但不限于随机存取存储器(Random AccessMemory,RAM)、只读存储器(Read-Only Memory,ROM)、缓存(Cache)、硬盘(Hard DiskDrive,HDD)或者存储卡(Memory Card)。存储器可以用于存储计算机程序指令。网络通信单元可以是依照通信协议规定的标准设置的,用于进行网络连接通信的接口。
在本实施方式中,该计算机存储介质存储的程序指令具体实现的功能和效果,可以与其它实施方式对照解释,在此不再赘述。
显然,本领域的技术人员应该明白,上述的本申请实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请实施例不限制于任何特定的硬件和软件结合。
虽然本申请提供了如上述实施例或流程图的方法操作步骤,但基于常规或者无需创造性的劳动在方法中可以包括更多或者更少的操作步骤。在逻辑性上不存在必要因果关系的步骤中,这些步骤的执行顺序不限于本申请实施例提供的执行顺序。的方法的在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
应该理解,以上描述是为了进行图示说明而不是为了进行限制。通过阅读上述描述,在所提供的示例之外的许多实施方式和许多应用对本领域技术人员来说都将是显而易见的。因此,本申请的范围不应该参照上述描述来确定,而是应该参照前述权利要求以及这些权利要求所拥有的等价物的全部范围来确定。
以上仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请实施例可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (15)

1.一种数据采集方法,其特征在于,包括:
执行目标系统的单元测试代码;其中,所述单元测试代码中设置有监听器,所述监听器用于将监听到的单元测试案例执行数据写入预设文件中;
获取所述预设文件和执行所述目标系统的单元测试代码生成的Jacoco数据文件;
根据所述预设文件和所述Jacoco数据文件,确定所述目标系统的单元测试案例执行结果和代码覆盖率;
将所述目标系统的单元测试案例执行结果和代码覆盖率发送给所述目标系统的处理对象。
2.根据权利要求1所述的方法,其特征在于,在执行目标系统的单元测试代码之后,还包括:
利用所述监听器将监听到的单元测试案例执行数据写入在第一预设目录下的所述预设文件中;
在确定所述目标系统的单元测试代码执行完成的情况下,将所述执行所述目标系统的单元测试代码生成的Jacoco数据写入在第二预设目录下的所述Jacoco数据文件中。
3.根据权利要求1所述的方法,其特征在于,获取所述预设文件和执行所述目标系统的单元测试代码生成的Jacoco数据文件,包括:
获取所述单元测试代码的源文件根目录和字节码文件根目录;
根据所述单元测试代码的源文件根目录和字节码文件根目录,解析所述Jacoco数据文件;
获取存储所述预设文件的第一预设目录;
根据所述第一预设目录获取所述预设文件。
4.根据权利要求1所述的方法,其特征在于,根据所述预设文件确定所述目标系统的单元测试案例执行结果,包括:
读取所述预设文件中的字符串;
将所述预设文件中的字符串转换成Json对象数组;
遍历所述Json对象数组中的每个Json对象,计算得到所述目标系统的单元测试案例执行结果。
5.根据权利要求1所述的方法,其特征在于,根据所述Jacoco数据文件,确定所述目标系统的代码覆盖率,包括:
对所述Jacoco数据文件中的数据结构进行分析,生成HTML格式的覆盖率报告;
对所述覆盖率报告进行解析,得到包括行覆盖率、分支覆盖率、方法覆盖率、类覆盖率的代码覆盖率数据。
6.根据权利要求1所述的方法,其特征在于,将所述目标系统的单元测试案例执行结果和代码覆盖率发送给所述目标系统的处理对象,包括:
获取所述目标系统的属性信息;
根据所述目标系统的属性信息,将所述目标系统的单元测试案例执行结果和代码覆盖率展示在所述处理对象的客户端的预设界面上。
7.根据权利要求6所述的方法,其特征在于,根据所述目标系统的属性信息,将所述目标系统的单元测试案例执行结果和代码覆盖率展示在所述处理对象的客户端的预设界面上,包括:
根据所述目标系统的属性信息,确定所述处理对象对应的目标数据库;
将所述目标系统的单元测试案例执行结果和代码覆盖率上传至所述目标数据库中;
接收所述处理对象发送的查询请求;其中,所述查询请求中包含所述目标系统的属性信息;
根据所述查询请求,从所述目标数据库中获取所述目标系统的单元测试案例执行结果和代码覆盖率;
将所述目标系统的单元测试案例执行结果和代码覆盖率展示在所述处理对象的客户端的预设界面上。
8.根据权利要求6所述的方法,其特征在于,所述目标系统的属性信息包括:所述目标系统所属的事业群、所述目标系统的英文名称、所述目标系统的中文名称、所述目标系统的投产日期。
9.根据权利要求1所述的方法,其特征在于,在执行目标系统的单元测试代码之前,还包括:
基于所述目标系统编写初始单元测试代码;
在所述初始单元测试代码通过注解的方式引入监听器,得到所述目标系统的单元测试代码。
10.根据权利要求1所述的方法,其特征在于,执行目标系统的单元测试代码,包括:
在Eclipse IDE中使用Eclemma插件执行所述目标系统的单元测试代码;
所述监听器在所述单元测试代码的执行过程中监听单元测试案例执行数据。
11.根据权利要求1所述的方法,其特征在于,所述单元测试案例执行结果包括:案例总数、案例成功数、案例失败数、无效案例数。
12.根据权利要求1所述的方法,其特征在于,所述代码覆盖率包括:行覆盖率、分支覆盖率、方法覆盖率、类覆盖率。
13.一种数据采集装置,其特征在于,包括:
执行模块,用于执行目标系统的单元测试代码;其中,所述单元测试代码中设置有监听器,所述监听器用于将监听到的单元测试案例执行结果写入预设文件中;
获取模块,用于获取所述预设文件和执行所述目标系统的单元测试代码生成的Jacoco数据文件;
确定模块,用于根据所述预设文件和所述Jacoco数据文件,确定所述目标系统的单元测试案例执行结果和代码覆盖率;
发送模块,用于将所述目标系统的单元测试案例执行结果和代码覆盖率发送给所述目标系统的处理对象。
14.一种数据采集设备,其特征在于,包括处理器以及用于存储处理器可执行指令的存储器,所述处理器执行所述指令时实现权利要求1至12中任一项所述方法的步骤。
15.一种计算机可读存储介质,其特征在于,其上存储有计算机指令,所述指令被执行时实现权利要求1至12中任一项所述方法的步骤。
CN202010782944.4A 2020-08-06 2020-08-06 数据采集方法、装置和设备 Pending CN111966587A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010782944.4A CN111966587A (zh) 2020-08-06 2020-08-06 数据采集方法、装置和设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010782944.4A CN111966587A (zh) 2020-08-06 2020-08-06 数据采集方法、装置和设备

Publications (1)

Publication Number Publication Date
CN111966587A true CN111966587A (zh) 2020-11-20

Family

ID=73364946

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010782944.4A Pending CN111966587A (zh) 2020-08-06 2020-08-06 数据采集方法、装置和设备

Country Status (1)

Country Link
CN (1) CN111966587A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112988593A (zh) * 2021-04-13 2021-06-18 苏州沁游网络科技有限公司 代码分析方法、装置、计算机设备及存储介质
CN113094267A (zh) * 2021-04-07 2021-07-09 中国工商银行股份有限公司 一种测试结果收集方法及装置
CN113434534A (zh) * 2021-08-25 2021-09-24 中博信息技术研究院有限公司 数据权限拦截方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106681912A (zh) * 2016-12-08 2017-05-17 武汉斗鱼网络科技有限公司 用于Android系统的代码覆盖率的自动化测试方法及装置
CN110618935A (zh) * 2019-08-27 2019-12-27 绿漫科技有限公司 一种针对手工测试的代码变更覆盖率统计实现方法
CN111190825A (zh) * 2019-12-28 2020-05-22 深圳市优必选科技股份有限公司 自动测试方法、系统及机器人
US10713150B1 (en) * 2019-04-04 2020-07-14 Sap Se Accurate test coverage of generated code

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106681912A (zh) * 2016-12-08 2017-05-17 武汉斗鱼网络科技有限公司 用于Android系统的代码覆盖率的自动化测试方法及装置
US10713150B1 (en) * 2019-04-04 2020-07-14 Sap Se Accurate test coverage of generated code
CN110618935A (zh) * 2019-08-27 2019-12-27 绿漫科技有限公司 一种针对手工测试的代码变更覆盖率统计实现方法
CN111190825A (zh) * 2019-12-28 2020-05-22 深圳市优必选科技股份有限公司 自动测试方法、系统及机器人

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
COOLSTREAM: "JUnit源码分析 - 扩展 - 自定义RunListener", 《HTTPS://WWW.CNBLOGS.COM/COOLSTREAM/P/9756336.HTML》 *
NEVEN7: "JUnit4---实践二:拓展之运行指定类的某些测试方法-自动生成该文件", 《HTTPS://BLOG.CSDN.NET/NEVEN7/ARTICLE/DETAILS/43413237》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113094267A (zh) * 2021-04-07 2021-07-09 中国工商银行股份有限公司 一种测试结果收集方法及装置
CN113094267B (zh) * 2021-04-07 2024-01-30 中国工商银行股份有限公司 一种测试结果收集方法及装置
CN112988593A (zh) * 2021-04-13 2021-06-18 苏州沁游网络科技有限公司 代码分析方法、装置、计算机设备及存储介质
CN112988593B (zh) * 2021-04-13 2024-02-06 苏州沁游网络科技有限公司 代码分析方法、装置、计算机设备及存储介质
CN113434534A (zh) * 2021-08-25 2021-09-24 中博信息技术研究院有限公司 数据权限拦截方法

Similar Documents

Publication Publication Date Title
CN110764753B (zh) 一种业务逻辑代码生成方法、装置、设备及存储介质
Liu et al. Statistical debugging: A hypothesis testing-based approach
US8539282B1 (en) Managing quality testing
Halili Apache JMeter
US8132156B2 (en) Methods and systems for testing tool with comparative testing
WO2021088724A1 (zh) 一种测试方法及装置
CN110442511B (zh) 可视化埋点测试方法及装置
US6792393B1 (en) System and method for diagnosing computer system operational behavior
US8473915B2 (en) Coverage analysis tool for testing database-aware software applications
EP2572294B1 (en) System and method for sql performance assurance services
CN111966587A (zh) 数据采集方法、装置和设备
US20140331203A1 (en) Analysis of source code changes
US20130132933A1 (en) Automated compliance testing during application development
US20030177417A1 (en) System and method for remote performance analysis and optimization of computer systems
Jayathilake Towards structured log analysis
CN108628748B (zh) 自动化测试管理方法和自动化测试管理系统
CN111290956B (zh) 基于脑图的测试方法、装置、电子设备及存储介质
Leon et al. Multivariate visualization in observation-based testing
US8769516B2 (en) Systems and methods for automated support for repairing input model errors
CN112597018A (zh) 接口测试用例生成方法、装置、设备及存储介质
Amalfitano et al. The DynaRIA tool for the comprehension of Ajax web applications by dynamic analysis
Namin et al. MuRanker: a mutant ranking tool
CN114185791A (zh) 一种数据映射文件的测试方法、装置、设备及存储介质
Mani et al. Automated support for repairing input-model faults
CN112685316A (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
TA01 Transfer of patent application right

Effective date of registration: 20220927

Address after: 12 / F, 15 / F, 99 Yincheng Road, Pudong New Area pilot Free Trade Zone, Shanghai, 200120

Applicant after: Jianxin Financial Science and Technology Co.,Ltd.

Address before: 25 Financial Street, Xicheng District, Beijing 100033

Applicant before: CHINA CONSTRUCTION BANK Corp.

Applicant before: Jianxin Financial Science and Technology Co.,Ltd.

TA01 Transfer of patent application right
RJ01 Rejection of invention patent application after publication

Application publication date: 20201120

RJ01 Rejection of invention patent application after publication