CN110309055A - 基于Java虚拟机的黑盒测试方法、装置、终端及存储介质 - Google Patents
基于Java虚拟机的黑盒测试方法、装置、终端及存储介质 Download PDFInfo
- Publication number
- CN110309055A CN110309055A CN201910432689.8A CN201910432689A CN110309055A CN 110309055 A CN110309055 A CN 110309055A CN 201910432689 A CN201910432689 A CN 201910432689A CN 110309055 A CN110309055 A CN 110309055A
- Authority
- CN
- China
- Prior art keywords
- code
- target application
- test case
- current
- current test
- 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
Links
- 238000012360 testing method Methods 0.000 title claims abstract description 332
- 235000000332 black box Nutrition 0.000 title claims abstract description 70
- 238000000034 method Methods 0.000 claims abstract description 50
- 238000004590 computer program Methods 0.000 claims description 17
- 230000004048 modification Effects 0.000 claims description 10
- 238000012986 modification Methods 0.000 claims description 10
- 230000015654 memory Effects 0.000 claims description 7
- 238000012544 monitoring process Methods 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 abstract description 2
- 230000006870 function Effects 0.000 description 12
- 230000008569 process Effects 0.000 description 9
- 239000003795 chemical substances by application Substances 0.000 description 5
- 230000007547 defect Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 238000009434 installation Methods 0.000 description 2
- 238000004904 shortening Methods 0.000 description 2
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000013522 software testing Methods 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test 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
本发明适用软件测试技术领域,提供了一种基于Java虚拟机的黑盒测试方法、装置、终端及存储介质,该方法包括:当接收到JVM用户对目标应用的测试请求时,将目标应用的当前测试用例输入到JVM,当目标应用根据当前测试用例运行时,对目标应用的代码运行轨迹进行监测,以得到目标应用的已执行代码,根据已执行代码获取当前测试用例对目标应用的当前代码覆盖率,并生成当前测试用例的代码覆盖报告,再根据当前测试用例的代码覆盖报告更新当前测试用例,以继续对目标应用进行测试,从而通过逐渐完善测试用例来提高黑盒测试的代码覆盖率,进而提高黑盒测试的测试效率。
Description
技术领域
本发明属于软件测试技术领域,尤其涉及一种基于Java虚拟机的黑盒测试方法、装置、终端及存储介质。
背景技术
计算机软件程序在人工编写阶段,无法避免出现各种各样的缺陷,因此,在软件正式使用之前,都需要对其进行大量的测试,尽量找出其中的缺陷,并解决找到的缺陷,从而使人们正常地使用软件的各个功能。
目前,黑盒测试在这样的软件测试中应用较多,黑盒测试覆盖率一般基于需求功能点来度量,且黑盒测试是站在用户的角度进行测试的,把程序看作是一个不能打开的黑盒子,在不考虑其内部程序结构和内部程序特性的情况下,对程序的输入输出进行功能性测试,从而测试出该程序在用户使用过程中可能会出现的各类问题。
现有的软件测试理论已经基本成熟,绝大多数测试方式均可以通过自动手段来实现测试过程,对于黑盒测试来说,如果能为每个测试过程选择适当的测试用例,可有效地设计出高效的自动测试过程。但是,随着待测试软件系统的日益庞大,测试的工作量呈指数级增长,给软件黑盒测试工作带来了很多新的问题。由于黑盒测试只针对需求创建测试用例做外部的覆盖测试,在需求不详细的情况下,有极大可能测试用例无法涵盖全部软件代码,极易漏检系统BUG,给产品质量带来许多不确定性的隐患。但黑盒测试不考虑程序内部情况的特性同时也带来了测试结果不完善的弊端,在测试过程中,若当前的测试用例未对某部分程序进行测试,测试人员也无法直观看出,从而降低了在黑盒测试中测试用例对软件的测试覆盖率,因此,在黑盒测试中,需要采取各种措施提高测试用例对程序代码的覆盖率,提高测试用例对程序代码的覆盖率这个问题亟待解决。
发明内容
本发明的目的在于提供一种基于Java虚拟机的黑盒测试方法、装置、终端及存储介质,旨在解决由于现有技术无法提供一种有效的黑盒测试方法,导致应用软件的测试覆盖率低以及测试效率低的问题。
一方面,本发明提供了一种基于Java虚拟机的黑盒测试方法,所述方法包括下述步骤:
当接收到JVM的用户对目标应用的测试请求时,将所述目标应用的当前测试用例输入到所述JVM,以根据所述当前测试用例对所述目标应用进行黑盒测试,所述目标应用为所述JVM上运行的应用程序;
当所述目标应用根据所述当前测试用例运行时,对所述目标应用的代码运行轨迹进行监测,以得到所述目标应用的已执行代码,根据所述已执行代码获取所述当前测试用例对所述目标应用的当前代码覆盖率;
根据所述当前代码覆盖率和所述已执行代码,生成所述当前测试用例的代码覆盖报告,所述代码覆盖报告包括所述目标应用的当前代码覆盖率和所述目标应用的已执行代码;
根据所述代码覆盖报告对所述当前测试用例进行更新,以继续对所述目标应用进行测试。
另一方面,本发明提供了一种基于Java虚拟机的黑盒测试装置,所述装置包括:
测试用例输入单元,用于当接收到JVM的用户对目标应用的测试请求时,将所述目标应用的当前测试用例输入到所述JVM,以根据所述当前测试用例对所述目标应用进行黑盒测试;
监测获取单元,用于当所述目标应用根据所述当前测试用例运行时,对所述目标应用的代码运行轨迹进行监测,以得到所述目标应用的已执行代码,根据所述已执行代码获取所述当前测试用例对所述目标应用的当前代码覆盖率;
报告导出单元,用于根据所述当前代码覆盖率和所述已执行代码,生成所述当前测试用例的代码覆盖报告;以及
测试用例更新单元,用于根据所述代码覆盖报告对所述当前测试用例进行更新,以继续对所述目标应用进行测试。
另一方面,本发明还提供了一种计算终端,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述基于Java虚拟机的黑盒测试方法的步骤。
另一方面,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上述基于Java虚拟机的黑盒测试方法的步骤。
本发明在当接收到JVM用户对目标应用的测试请求时,将目标应用的当前测试用例输入到JVM,当目标应用根据当前测试用例运行时,对目标应用的代码运行轨迹进行监测,以得到目标应用的已执行代码,根据已执行代码获取当前测试用例对目标应用的当前代码覆盖率,并生成当前测试用例的代码覆盖报告,再根据当前测试用例的代码覆盖报告更新当前测试用例,以继续对目标应用进行测试,从而通过逐渐完善测试用例来提高黑盒测试的代码覆盖率,进而提高黑盒测试的测试效率。
附图说明
图1是本发明实施例一提供的基于Java虚拟机的黑盒测试方法的实现流程图;
图2是本发明实施例二提供的基于Java虚拟机的黑盒测试方法的实现流程图;
图3是本发明实施例二提供的获取已执行代码和当前代码覆盖率的实现流程;
图4本发明实施例三提供的基于Java虚拟机的黑盒测试装置的结构示意图;
图5是本发明实施例四提供的基于Java虚拟机的黑盒测试装置的结构示意图;以及
图6是本发明实施例五提供的计算终端的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
以下结合具体实施例对本发明的具体实现进行详细描述:
实施例一:
图1示出了本发明实施例一提供的基于Java虚拟机的黑盒测试方法的实现流程,为了便于说明,仅示出了与本发明实施例相关的部分,详述如下:
在步骤S101中,当接收到JVM的用户对目标应用的测试请求时,将目标应用的当前测试用例输入到JVM,以根据当前测试用例对目标应用进行黑盒测试。
本发明实施例适用于安装了JVM(Java Virtual Machine,Java虚拟机)的计算终端,例如,台式电脑、笔记本电脑、平板电脑等,在该JVM上可通过测试用例对应用软件的代码进行黑盒测试。在本发明实施例中,目标应用为JVM上运行的将被进行黑盒测试的应用程序,预先设置一个黑盒测试用例,为了便于后续描述,将当下设置的黑盒测试用例称为目标应用的当前测试用例,当JVM接收到该JVM用户对目标应用的测试请求时,将当前测试用例输入到JVM上运行的目标应用,以便JVM根据目标应用的当前测试用例开始对目标应用开始进行黑盒测试。
在步骤S102中,当目标应用根据当前测试用例运行时,对目标应用的代码运行轨迹进行监测,以得到目标应用的已执行代码,根据已执行代码获取当前测试用例对目标应用的当前代码覆盖率。
在本发明实施例中,目标应用的已执行代码表示目标应用在根据当前测试用例进行测试时覆盖的所有代码,目标应用的代码运行轨迹表示目标应用中已执行代码的运行顺序,该代码运行轨迹可以体现目标应用中所有被执行的源代码,为了便于后续描述,将被执行的源代码称作已执行代码,目标应用的源代码被测试的比例和程度,即称作代码覆盖率,在目标应用根据当前测试用例进行黑盒测试后,对目标应用的代码的运行轨迹进行监测,从而根据该代码运行轨迹得到目标应用的所有代码中的已执行代码,即获得了被当前测试用例覆盖的所有代码,从而获取测试用例对目标应用的代码覆盖率。
在步骤S103中,根据当前代码覆盖率和已执行代码导出当前测试用例的代码覆盖报告。
在本发明实施例中,获取了当前测试用例测试目标应用的当前代码覆盖率和已执行代码之后,生成当前测试用例的代码覆盖报告,具体地,还可根据JVM用户的需求导出该代码覆盖报告,该代码覆盖报告包括了当前测试用例对目标应用的当前代码覆盖率和目标应用的已执行代码。
在步骤S104中,根据当前测试用例的代码覆盖报告对当前测试用例进行更新,以继续对目标应用进行测试。
在本发明实施例中,在生成并导出当前测试用例的代码覆盖报告之后,JVM用户或者测试用例第三方程序(用于更改测试用例的应用程序)根据代码覆盖报告中的当前代码覆盖率和已执行代码对当前测试用例进行针对性修改和调整,将修改后的当前测试用例再次输入到JVM,继续根据修改后的当前测试用例对目标应用进行测试,从而逐渐提高了黑盒测试的代码覆盖率,进而提高了黑盒测试的功效、缩短了测试时间。
优选地,根据目标应用代码运行轨迹获取当前测试用例对目标应用的当前代码覆盖率和目标应用的已执行代码之后,根据目标应用的已执行代码获取目标应用的未执行代码,在代码覆盖报告中将目标应用的未执行代码与已执行代码一起导出,从而使JVM用户对目标应用的当前测试用例的针对性修改和调整更为精准。
在本发明实施例中,当接收到JVM用户对目标应用的测试请求时,将目标应用的当前测试用例输入到JVM,当目标应用根据当前测试用例运行时,对目标应用的代码运行轨迹进行监测,以得到目标应用的已执行代码,根据已执行代码获取当前测试用例对目标应用的当前代码覆盖率,并生成当前测试用例的代码覆盖报告,再根据当前测试用例的代码覆盖报告更新当前测试用例,以继续对目标应用进行测试,从而通过逐渐完善测试用例来提高黑盒测试的代码覆盖率,进而提高黑盒测试的测试效率。
实施例二:
图2示出了本发明实施例二提供的基于Java虚拟机的黑盒测试方法的实现流程,为了便于说明,仅示出了与本发明实施例相关的部分,详述如下:
在步骤S201中,当接收到JVM的用户对目标应用的测试请求时,将目标应用的当前测试用例输入到JVM,以根据当前测试用例对目标应用进行黑盒测试。
本发明实施例适用于安装了JVM(Java Virtual Machine,Java虚拟机)的计算终端,例如,台式电脑、笔记本电脑、平板电脑等,在该JVM上可通过测试用例对应用软件的代码进行黑盒测试。在本发明实施例中,目标应用为JVM上运行的将被进行黑盒测试的应用程序,预先设置一个黑盒测试用例,即目标应用的当前测试用例,当JVM接收到该JVM用户对目标应用的测试请求时,将当前测试用例输入到JVM上运行的目标应用,以便JVM根据目标应用的当前测试用例开始对目标应用开始进行黑盒测试。
在步骤S202中,当目标应用根据当前测试用例运行时,对目标应用的代码运行轨迹进行监测,以得到目标应用的已执行代码,根据已执行代码获取当前测试用例对目标应用的当前代码覆盖率。
在本发明实施例中,目标应用的已执行代码表示了目标应用在根据当前测试用例进行测试时覆盖的所有代码,目标应用的代码运行轨迹表示目标应用中已执行代码的运行顺序,该代码运行轨迹可以体现目标应用中所有已执行代码,在目标应用根据当前测试用例进行黑盒测试后,对目标应用的代码的运行轨迹进行监测,从而根据该代码运行轨迹得到目标应用的所有代码中的已执行代码,即获得了被当前测试用例覆盖的所有代码,进而获取测试用例对目标应用的代码覆盖率。
具体地,图3示出了实施例二提供的获取已执行代码和当前代码覆盖率的实现流程,为了便于说明,仅示出了与本发明实施例相关的部分,详述如下:
在步骤S301中,在目标应用根据当前测试用例加载目标应用的代码时,确定目标应用的待加载class文件。
在本发明实施例中,目标应用在根据当前测试用例运行的过程中,先加载需要执行的部分代码,即JVM用户需要测试的目标应用功能对应的部分代码,此时,通过JavaAgent(Java代理)对目标应用所需要加载、执行的代码进行加载拦截,拦截到的代码中的class文件(Java class文件,类文件)即确定为目标应用的待加载class文件。其中,class文件全名称为Java class文件,主要在平台无关性和网络移动性方面使Java更适合网络,class文件在平台无关性方面的任务是:为Java程序提供独立于底层主机平台的二进制形式的服务,Java Agent(Java代理)是运行在main方法之前的拦截器,Java Agent内定的方法名叫premain(main方法之前的方法),因此,可以通过Java Agent在待加载class文件进行加载过程中进行拦截,便于后续JVM在加载class文件之时,对class文件进行代码注入。
在确定目标应用的待加载class文件时,优选地,先接收JVM用户选择的目标应用的测试范围,再根据测试范围确定目标应用的待加载class文件。
在本发明实施例中,JVM用户可以根据自身的测试需求对目标应用的测试范围进行设置,从而进一步提高测试的精准度和测试效率,例如,在测试保险类APP(Application,应用程序)客户端过程中,除了车险理赔部分的功能出现了故障,其它部分功能正常,此时可选择车险理赔部分相关的代码进行黑盒测试,避免重复对正常的功能进行测试。
在步骤S302中,对目标应用的待加载class文件进行字节码修改,以得到修改后的目标应用的待执行class文件。
在本发明实施例中,当Java Agent拦截到目标应用的待加载class文件时,在不改变目标应用的待加载class文件的执行目标的情况下,对目标应用的待加载class文件进行字节码修改,然后自动打包,得到目标应用的待执行class文件,而目标应用的待执行class文件相当于在目标应用代码中方法前后添加了计时器,若目标应用执行了待执行class文件,则待执行class文件会将该方法执行的耗时记录下来,表示当前测试用例覆盖了目标应用的待执行class文件对应的目标应用的待执行代码(已执行代码),若测试用例没有覆盖到方法对应的目标应用的代码(即未覆盖到该待执行class文件),则该待执行class文件将没有该耗时记录,从而使得该class文件获得监测代码是否被执行的功能。
具体地,还可以通过Javassist(Javassist类库)、ASM(VC内嵌汇编)等对目标应用的待加载class文件的字节码进行修改,譬如,Javassist一个开源的分析、编辑和创建Java字节码的类库,实现Class File Trans former(类文件转换程序)接口中的transform方法,这个接口的目的就是在class文件被加载到JVM之前将class字节码转换掉,从而实现动态地对class文件注入代码。
在步骤S303中,通过目标应用的待执行class文件获取目标应用的已执行代码。
在本发明实施例中,在JVM加载目标应用的待执行class文件之后,目标应用根据当前测试用例进行测试,执行该待执行class文件的部分代码,即为目标应用的已执行代码,若目标应用执行了待执行class文件,则表示当前测试用例覆盖了该待执行class文件对应的目标应用的待执行代码(已执行代码)。
在步骤S304中,根据目标应用的已执行代码统计当前测试用例的代码覆盖率。
在本发明实施例中,目标应用的代码被处理器执行的耗时体现了目标应用的代码运行轨迹,通过目标应用的class文件确定目标应用的已执行代码之后,即可根据获取的目标应用的已执行代码精确地统计出当前测试用例的代码覆盖率。
在步骤S203中,根据已执行代码获取当前测试用例的行覆盖率、方法覆盖率和分支覆盖率。
在本发明实施例中,在对目标应用进行黑盒测试时,JVM用户的需求不尽相同,JVM用户对代码覆盖的范围也就不同,因此,在统计目标应用的已执行代码时,可以以行、方法、分支等划分级别来统计目标应用过的已执行代码,即根据已执行代码获取当前测试用例测试目标应用代码的行覆盖率、方法覆盖率和分支覆盖率,便于后续JVM用户根据对目标应用的代码中各个行、方法、分支的需求来对当前测试用例进行修改和调整,从而通过各个层面来度量、统计当前测试用例测试目标应用的覆盖范围,进一步提高了黑盒测试的精准度,其中,行覆盖率表示目标应用在根据当前测试用例运行时,运行的代码的行数占目标应用总代码行数的比例,方法覆盖率表示目标应用在根据当前测试用例运行时,运行的代码对应的功能个数占目标应用所有代码对应的功能总数的比例,分支覆盖率表示目标应用在根据当前测试用例运行时,运行的代码对应的代码分支数占目标应用所有代码对应的总代码分支数的比例。
在步骤S204中,根据当前代码覆盖率、行覆盖率、方法覆盖率、分支覆盖率和已执行代码,生成当前测试用例的代码覆盖报告。
在本发明实施例中,获取了当前测试用例测试目标应用的当前代码覆盖率、行覆盖率、方法覆盖率、分支覆盖率和已执行代码之后,生成当前测试用例的代码覆盖报告,该代码覆盖报告包括了当前测试用例测试目标应用的当前代码覆盖率、行覆盖率、方法覆盖率、分支覆盖率和已执行代码,之后,可根据JVM用户的需要,将生成的代码覆盖报告导出,便于JVM用户查看。
在步骤S205中,根据当前测试用例的代码覆盖报告对当前测试用例进行更新,以继续对目标应用进行测试。
在本发明实施例中,在导出当前测试用例的代码覆盖报告之后,JVM用户代码覆盖报告中的当前代码覆盖率、行覆盖率、方法覆盖率、分支覆盖率和已执行代码对当前测试用例进行针对性修改和调整,将修改后的当前测试用例再次输入到JVM,继续根据修改后的当前测试用例对目标应用进行测试,从而逐渐提高了黑盒测试的代码覆盖率,进而提高了黑盒测试的功效、缩短了测试时间。
在本发明实施例中,当接收到JVM用户对目标应用的测试请求时,将目标应用的当前测试用例输入到JVM,当目标应用根据当前测试用例运行时,对目标应用的代码运行轨迹进行监测,以得到目标应用的已执行代码,根据已执行代码获取当前测试用例对目标应用的当前代码覆盖率,根据已执行代码获取当前测试用例的行覆盖率、方法覆盖率和分支覆盖率,并生成当前测试用例的代码覆盖报告,再根据当前测试用例的代码覆盖报告对当前测试用例进行更新,以继续对目标应用进行测试,从而通过逐渐完善测试用例来提高黑盒测试的代码覆盖率,进而提高黑盒测试的测试效率。
实施例三:
图4示出了本发明实施例三提供的基于Java虚拟机的黑盒测试装置的结构,为了便于说明,仅示出了与本发明实施例相关的部分,其中包括:
测试用例输入单元41,用于当接收到JVM的用户对目标应用的测试请求时,将目标应用的当前测试用例输入到JVM,以根据当前测试用例对目标应用进行黑盒测试;
监测获取单元42,用于当目标应用根据当前测试用例运行时,对目标应用的代码运行轨迹进行监测,以得到目标应用的已执行代码,根据已执行代码获取当前测试用例对目标应用的当前代码覆盖率;
报告导出单元43,用于根据当前代码覆盖率和已执行代码导出当前测试用例的代码覆盖报告;以及
测试用例更新单元44,用于根据当前测试用例的代码覆盖报告对当前测试用例进行更新,以继续对目标应用进行测试。
在本发明实施例中,当接收到JVM用户对目标应用的测试请求时,将目标应用的当前测试用例输入到JVM,当目标应用根据当前测试用例运行时,对目标应用的代码运行轨迹进行监测,以得到目标应用的已执行代码,根据已执行代码获取当前测试用例对目标应用的当前代码覆盖率,并生成当前测试用例的代码覆盖报告,再根据当前测试用例的代码覆盖报告更新当前测试用例,以继续对目标应用进行测试,从而通过逐渐完善测试用例来提高黑盒测试的代码覆盖率,进而提高黑盒测试的测试效率。
在本发明实施例中,基于Java虚拟机的黑盒测试装置的各单元可由相应的硬件或软件单元实现,各单元可以为独立的软、硬件单元,也可以集成为一个软、硬件单元,在此不用以限制本发明。各单元的具体实施方式可参考实施例一的描述,在此不再赘述。
实施例四:
图5示出了本发明实施例四提供的基于Java虚拟机的黑盒测试装置的结构,为了便于说明,仅示出了与本发明实施例相关的部分,其中包括:
测试用例输入单元51,用于当接收到JVM的用户对目标应用的测试请求时,将目标应用的当前测试用例输入到JVM,以根据当前测试用例对目标应用进行黑盒测试;
监测获取单元52,用于当目标应用根据当前测试用例运行时,对目标应用的代码运行轨迹进行监测,以得到目标应用的已执行代码,根据已执行代码获取当前测试用例对目标应用的当前代码覆盖率;
概率获取单元53,用于根据已执行代码获取当前测试用例的行覆盖率、方法覆盖率和分支覆盖率;
报告导出单元54,用于根据当前代码覆盖率、行覆盖率、方法覆盖率、分支覆盖率和已执行代码,生成当前测试用例的代码覆盖报告;以及
测试用例更新单元55,用于根据当前测试用例的代码覆盖报告对当前测试用例进行更新,以继续对目标应用进行测试。
其中,监测获取单元52,包括:
文件确定单元521,用于在目标应用根据当前测试用例加载目标应用的代码时,确定目标应用的待加载class文件;
文件修改单元522,用于对待加载class文件进行字节码修改,以得到修改后的目标应用的待执行class文件;
代码获取单元523,用于通过待执行class文件获取已执行代码;以及
覆盖率统计单元524,用于根据已执行代码统计当前测试用例的代码覆盖率。
在本发明实施例中,当接收到JVM用户对目标应用的测试请求时,将目标应用的当前测试用例输入到JVM,当目标应用根据当前测试用例运行时,对目标应用的代码运行轨迹进行监测,以得到目标应用的已执行代码,根据已执行代码获取当前测试用例对目标应用的当前代码覆盖率,根据已执行代码获取当前测试用例的行覆盖率、方法覆盖率和分支覆盖率,并生成当前测试用例的代码覆盖报告,再根据当前测试用例的代码覆盖报告对当前测试用例进行更新,以继续对目标应用进行测试,从而通过逐渐完善测试用例来提高黑盒测试的代码覆盖率,进而提高黑盒测试的测试效率。
在本发明实施例中,基于Java虚拟机的黑盒测试装置的各单元可由相应的硬件或软件单元实现,各单元可以为独立的软、硬件单元,也可以集成为一个软、硬件单元,在此不用以限制本发明。各单元的具体实施方式可参考实施例二的描述,在此不再赘述。
实施例五:
图6示出了本发明实施例五提供的计算终端的结构,为了便于说明,仅示出了与本发明实施例相关的部分。
本发明实施例的计算终端6包括处理器61、存储器62以及存储在存储器62中并可在处理器61上运行的计算机程序63。该处理器61执行计算机程序53时实现上述各个基于Java虚拟机的黑盒测试方法实施例中的步骤,例如图1所示的步骤S101至S104以及图2所示的步骤S201至S205。或者,处理器61执行计算机程序63时实现上述各个基于Java虚拟机的黑盒测试装置实施例中各单元的功能,例如图4所示单元41至44以及图5所示单元51至55的功能。
在本发明实施例中,该处理器执行计算机程序时,当接收到JVM用户对目标应用的测试请求时,将目标应用的当前测试用例输入到JVM,当目标应用根据当前测试用例运行时,对目标应用的代码运行轨迹进行监测,以得到目标应用的已执行代码,根据已执行代码获取当前测试用例对目标应用的当前代码覆盖率,并生成当前测试用例的代码覆盖报告,再根据当前测试用例的代码覆盖报告对当前测试用例进行更新,以继续对目标应用进行测试,从而通过逐渐完善测试用例来提高黑盒测试的代码覆盖率,进而提高黑盒测试的测试效率。
该处理器执行计算机程序时实现上述基于Java虚拟机的黑盒测试方法实施例中的步骤可参考实施例一和实施例二的描述,在此不再赘述。
实施例六:
在本发明实施例中,提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述各个基于Java虚拟机的黑盒测试方法实施例中的步骤,例如,图1所示的步骤S101至S104以及图2所示的步骤S201至S205。或者,该计算机程序被处理器执行时实现上述各个基于Java虚拟机的黑盒测试装置实施例中各单元的,例如图4所示单元41至44以及图5所示单元51至55的功能。
在本发明实施例中,该计算机程序被处理器执行后,当接收到JVM用户对目标应用的测试请求时,将目标应用的当前测试用例输入到JVM,当目标应用根据当前测试用例运行时,对目标应用的代码运行轨迹进行监测,以得到目标应用的已执行代码,根据已执行代码获取当前测试用例对目标应用的当前代码覆盖率,并生成当前测试用例的代码覆盖报告,再根据当前测试用例的代码覆盖报告对当前测试用例进行更新,以继续对目标应用进行测试,从而通过逐渐完善测试用例来提高黑盒测试的代码覆盖率,进而提高黑盒测试的测试效率。
该计算机程序被处理器执行时实现上述基于Java虚拟机的黑盒测试方法实施例中的步骤可参考实施例一和实施例二的描述,在此不再赘述。
本发明实施例的计算机可读存储介质可以包括能够携带计算机程序代码的任何实体或装置、记录介质,例如,ROM/RAM、磁盘、光盘、闪存等存储器。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于Java虚拟机的黑盒测试方法,其特征在于,所述方法包括下述步骤:
当接收到JVM的用户对目标应用的测试请求时,将所述目标应用的当前测试用例输入到所述JVM,以根据所述当前测试用例对所述目标应用进行黑盒测试,所述目标应用为所述JVM上运行的应用程序;
当所述目标应用根据所述当前测试用例运行时,对所述目标应用的代码运行轨迹进行监测,以得到所述目标应用的已执行代码,根据所述已执行代码获取所述当前测试用例对所述目标应用的当前代码覆盖率;
根据所述当前代码覆盖率和所述已执行代码,生成所述当前测试用例的代码覆盖报告,所述代码覆盖报告包括所述目标应用的当前代码覆盖率和所述目标应用的已执行代码;
根据所述代码覆盖报告对所述当前测试用例进行更新,以继续对所述目标应用进行测试。
2.如权利要求1所述的方法,其特征在于,对所述目标应用的代码运行轨迹进行监测,以得到所述目标应用的已执行代码,根据所述已执行代码获取所述当前测试用例对所述目标应用的当前代码覆盖率的步骤,包括:
在所述目标应用根据所述当前测试用例加载所述目标应用的代码时,确定所述目标应用的待加载class文件;
对所述待加载class文件进行字节码修改,以得到修改后的所述目标应用的待执行class文件;
通过所述待执行class文件获取所述已执行代码;
根据所述已执行代码统计所述当前测试用例的代码覆盖率。
3.如权利要求2所述的方法,其特征在于,确定所述目标应用的待加载class文件的步骤,包括:
接收所述JVM用户选择的所述目标应用的测试范围;
根据所述测试范围确定所述目标应用的待加载class文件。
4.如权利要求1所述的方法,其特征在于,根据所述已执行代码获取所述当前测试用例对所述目标应用的当前代码覆盖率的步骤之后,所述方法还包括:
根据所述已执行代码获取所述当前测试用例的行覆盖率、方法覆盖率和分支覆盖率;
根据当前代码覆盖率和已执行代码,生成当前测试用例的代码覆盖报告的步骤包括:
根据所述当前代码覆盖率、所述行覆盖率、所述方法覆盖率、所述分支覆盖率和所述已执行代码,生成所述当前测试用例的代码覆盖报告。
5.如权利要求1所述的方法,其特征在于,根据所述已执行代码获取所述当前测试用例对所述目标应用的当前代码覆盖率的步骤之后,所述方法还包括:
根据所述已执行代码获取所述目标应用的未执行代码;
根据当前代码覆盖率和已执行代码,生成当前测试用例的代码覆盖报告的步骤包括:
根据所述当前代码覆盖率、所述已执行代码和所述未执行代码,生成所述当前测试用例的代码覆盖报告。
6.一种基于Java虚拟机的黑盒测试装置,其特征在于,所述装置包括:
测试用例输入单元,用于当接收到JVM的用户对目标应用的测试请求时,将所述目标应用的当前测试用例输入到所述JVM,以根据所述当前测试用例对所述目标应用进行黑盒测试;
监测获取单元,用于当所述目标应用根据所述当前测试用例运行时,对所述目标应用的代码运行轨迹进行监测,以得到所述目标应用的已执行代码,根据所述已执行代码获取所述当前测试用例对所述目标应用的当前代码覆盖率;
报告导出单元,用于根据所述当前代码覆盖率和所述已执行代码,生成所述当前测试用例的代码覆盖报告;以及
测试用例更新单元,用于根据所述代码覆盖报告对所述当前测试用例进行更新,以继续对所述目标应用进行测试。
7.如权利要求6所述的装置,其特征在于,所述监测获取单元包括:
文件确定单元,用于在所述目标应用根据所述当前测试用例加载所述目标应用的代码时,确定所述目标应用的待加载class文件
文件修改单元,用于对所述待加载class文件进行字节码修改,以得到修改后的所述目标应用的待执行class文件;
代码获取单元,用于通过所述待执行class文件获取所述已执行代码;以及
覆盖率统计单元,用于根据所述已执行代码统计所述当前测试用例的代码覆盖率。
8.如权利要求6所述的装置,其特征在于,所述装置还包括:
概率获取单元,用于根据所述已执行代码获取所述当前测试用例的行覆盖率、方法覆盖率和分支覆盖率。
9.一种计算终端,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至5任一项所述方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至5任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910432689.8A CN110309055A (zh) | 2019-05-23 | 2019-05-23 | 基于Java虚拟机的黑盒测试方法、装置、终端及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910432689.8A CN110309055A (zh) | 2019-05-23 | 2019-05-23 | 基于Java虚拟机的黑盒测试方法、装置、终端及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110309055A true CN110309055A (zh) | 2019-10-08 |
Family
ID=68075452
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910432689.8A Pending CN110309055A (zh) | 2019-05-23 | 2019-05-23 | 基于Java虚拟机的黑盒测试方法、装置、终端及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110309055A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111309635A (zh) * | 2020-03-26 | 2020-06-19 | 北京奇艺世纪科技有限公司 | 测试用例生成方法、装置、服务器及存储介质 |
CN111639936A (zh) * | 2020-05-24 | 2020-09-08 | 中信银行股份有限公司 | 交易信息的获取方法、装置、电子设备及可读存储介质 |
CN112905443A (zh) * | 2019-12-04 | 2021-06-04 | 阿里巴巴集团控股有限公司 | 一种测试用例生成方法、设备及存储介质 |
CN112948258A (zh) * | 2021-03-26 | 2021-06-11 | 杭州万高科技股份有限公司 | 一种代码测试方法、装置、设备及计算机可读存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103699480A (zh) * | 2013-11-29 | 2014-04-02 | 杭州安恒信息技术有限公司 | 一种基于java的web动态安全漏洞检测方法 |
CN103870383A (zh) * | 2012-12-11 | 2014-06-18 | 航天信息股份有限公司 | 基于jvm的测试覆盖率统计方法及系统 |
CN106201863A (zh) * | 2016-06-22 | 2016-12-07 | 广州唯品会信息科技有限公司 | 一种获取代码覆盖率的方法和装置 |
CN106326118A (zh) * | 2016-08-19 | 2017-01-11 | 东软集团股份有限公司 | 代码测试覆盖率确定方法和装置 |
CN106547689A (zh) * | 2016-10-20 | 2017-03-29 | 金航数码科技有限责任公司 | 一种基于web的自动化测试用例开发系统及方法 |
CN107704393A (zh) * | 2017-09-29 | 2018-02-16 | 武汉斗鱼网络科技有限公司 | 数据测试方法、装置及电子设备 |
CN108255700A (zh) * | 2017-03-27 | 2018-07-06 | 平安科技(深圳)有限公司 | 测试结果生成方法和装置 |
CN109542789A (zh) * | 2018-11-26 | 2019-03-29 | 泰康保险集团股份有限公司 | 一种代码覆盖率统计方法及装置 |
CN109614341A (zh) * | 2018-12-29 | 2019-04-12 | 微梦创科网络科技(中国)有限公司 | 一种代码覆盖率的测试方法及系统 |
-
2019
- 2019-05-23 CN CN201910432689.8A patent/CN110309055A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103870383A (zh) * | 2012-12-11 | 2014-06-18 | 航天信息股份有限公司 | 基于jvm的测试覆盖率统计方法及系统 |
CN103699480A (zh) * | 2013-11-29 | 2014-04-02 | 杭州安恒信息技术有限公司 | 一种基于java的web动态安全漏洞检测方法 |
CN106201863A (zh) * | 2016-06-22 | 2016-12-07 | 广州唯品会信息科技有限公司 | 一种获取代码覆盖率的方法和装置 |
CN106326118A (zh) * | 2016-08-19 | 2017-01-11 | 东软集团股份有限公司 | 代码测试覆盖率确定方法和装置 |
CN106547689A (zh) * | 2016-10-20 | 2017-03-29 | 金航数码科技有限责任公司 | 一种基于web的自动化测试用例开发系统及方法 |
CN108255700A (zh) * | 2017-03-27 | 2018-07-06 | 平安科技(深圳)有限公司 | 测试结果生成方法和装置 |
CN107704393A (zh) * | 2017-09-29 | 2018-02-16 | 武汉斗鱼网络科技有限公司 | 数据测试方法、装置及电子设备 |
CN109542789A (zh) * | 2018-11-26 | 2019-03-29 | 泰康保险集团股份有限公司 | 一种代码覆盖率统计方法及装置 |
CN109614341A (zh) * | 2018-12-29 | 2019-04-12 | 微梦创科网络科技(中国)有限公司 | 一种代码覆盖率的测试方法及系统 |
Non-Patent Citations (1)
Title |
---|
林若钦: "《服务外包产教融合系列教材 基于Junit单元测试应用技术》", 广州:华南理工大学出版社, pages: 37 - 43 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112905443A (zh) * | 2019-12-04 | 2021-06-04 | 阿里巴巴集团控股有限公司 | 一种测试用例生成方法、设备及存储介质 |
CN111309635A (zh) * | 2020-03-26 | 2020-06-19 | 北京奇艺世纪科技有限公司 | 测试用例生成方法、装置、服务器及存储介质 |
CN111309635B (zh) * | 2020-03-26 | 2023-12-15 | 北京奇艺世纪科技有限公司 | 测试用例生成方法、装置、服务器及存储介质 |
CN111639936A (zh) * | 2020-05-24 | 2020-09-08 | 中信银行股份有限公司 | 交易信息的获取方法、装置、电子设备及可读存储介质 |
CN111639936B (zh) * | 2020-05-24 | 2023-08-25 | 中信银行股份有限公司 | 交易信息的获取方法、装置、电子设备及可读存储介质 |
CN112948258A (zh) * | 2021-03-26 | 2021-06-11 | 杭州万高科技股份有限公司 | 一种代码测试方法、装置、设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110309055A (zh) | 基于Java虚拟机的黑盒测试方法、装置、终端及存储介质 | |
US5500941A (en) | Optimum functional test method to determine the quality of a software system embedded in a large electronic system | |
EP2976716B1 (en) | Prioritization of tests of computer program code | |
Rothermel et al. | Empirical studies of test‐suite reduction | |
US20060253837A1 (en) | Using a call stack hash to record the state of a process | |
US8881107B2 (en) | Automatic memory leak detection | |
Paterson et al. | An empirical study on the use of defect prediction for test case prioritization | |
Mariani et al. | Compatibility and regression testing of COTS-component-based software | |
CN105912458A (zh) | 一种用于动态检测c/c++内存泄露的方法及系统 | |
KR20090017586A (ko) | Api의 성능을 측정하는 방법, 컴퓨터 시스템, 및 컴퓨터판독가능 매체 | |
CN103577324A (zh) | 移动应用中隐私信息泄露的静态检测方法 | |
CN111723380B (zh) | 一种检测组件漏洞的方法及装置 | |
CN109542712A (zh) | 服务器压力测试方法、装置、计算机设备和存储介质 | |
CN110083514B (zh) | 软件测试缺陷评估方法、装置、计算机设备及存储介质 | |
CN105760292A (zh) | 一种用于单元测试的断言验证方法和装置 | |
CN111897727A (zh) | 软件测试方法、装置、计算机设备及存储介质 | |
Panigrahi et al. | An approach to prioritize the regression test cases of object-oriented programs | |
CN103823665B (zh) | 一种sdk活跃度分析方法、网络服务器及系统 | |
Madeiral et al. | Towards an automated approach for bug fix pattern detection | |
Dalton et al. | Is exceptional behavior testing an exception? an empirical assessment using java automated tests | |
CN102521135B (zh) | 线性系统的测试方法和装置 | |
CN114064497A (zh) | 应用程序测试方法、装置、计算机设备及存储介质 | |
CN111400171B (zh) | 一种接口测试方法、系统、装置及可读存储介质 | |
CN116627804A (zh) | 基于人工智能的测试方法、系统、电子设备及存储介质 | |
CN114490413A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20191008 |
|
RJ01 | Rejection of invention patent application after publication |