CN114546816A - 一种测试方法、平台、装置、电子设备及存储介质 - Google Patents

一种测试方法、平台、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN114546816A
CN114546816A CN202011336083.3A CN202011336083A CN114546816A CN 114546816 A CN114546816 A CN 114546816A CN 202011336083 A CN202011336083 A CN 202011336083A CN 114546816 A CN114546816 A CN 114546816A
Authority
CN
China
Prior art keywords
test
file
unit
tested
source file
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.)
Granted
Application number
CN202011336083.3A
Other languages
English (en)
Other versions
CN114546816B (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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202011336083.3A priority Critical patent/CN114546816B/zh
Publication of CN114546816A publication Critical patent/CN114546816A/zh
Application granted granted Critical
Publication of CN114546816B publication Critical patent/CN114546816B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/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为本申请实施例提供的执行第三单元测试的步骤流程图;
图7为本申请实施例提供的执行第二变异测试的步骤流程图;
图8为本申请实施例提供的测试平台的结构示意图;
图9为基于测试平台执行测试方法的步骤流程图;
图10为本申请实施例提供的测试装置的结构示意图;
图11为本申请实施例提供的电子设备的结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
为便于对本申请实施例的理解,下面先对本申请涉及的相关概念进行简单介绍:
单元测试,也称为模块测试,用于检验被测代码的某个功能是否正确。一个单元测试是用于判断某个特定条件或者场景下某个特定函数的行为。单元测试是保证代码质量的重要环节之一。单元测试能够对软件中的最小可测试单元进行检查和验证。最小可测试单元可以是一个函数、一个类、一个对象,也可以是一个组件或者插件。例如,测试人员可能把一个很大的值放入一个有序数组中去,然后确认该值出现在数组的尾部。或者,测试人员可能会从字符串中删除匹配某种模式的字符,然后确认字符串确实不再包含这些字符了。
代码覆盖是软件测试中的一种度量,用于描述程序中源代码被测试的比例和程度,其中,源代码被测试的比例称为代码覆盖率。测试覆盖率表达本次测试有多少比例的语句,函数分支没有被测到。
变异测试,又称为变异分析,用于衡量测试用例集的揭错能力,也可以通过植入错误来模拟被测软件的各种真实缺陷,对已有测试用例集进行辅助评估。变异测试的基本思想是:测试人员根据待测程序的特征向待测程序代码中植入各种类型的故障,从而产生大量的错误程序,用来模仿某种故障的操作,进而评估测试用例集的质量。变异测试中常用的变异方法可以是:条件边界变异、反向条件变异、数学运算变异、增量运算变异、负值翻转变异等。
相关技术中,测试人员仅对待测代码进行单元测试得到的代码覆盖率,无法评估测试用例的有效性。若要进行变异测试,则需要将待测代码在单元测试平台和变异测试平台上来回切换,在一定程度上影响了工作效率,消耗大量时间。
并且,相关技术在变异测试平台上执行变异测试时,在不改变预设的变异内容的情况下,所有待测代码均需要执行相同的预设好的变异内容,这对于更新迭代很快的软件产品的代码而言,则无法适用。因为每次进行更新迭代的新版本软件代码,其内容相较于上一版本的软件代码或许只有少量更新,在上一版本的软件代码完整执行完预设的变异内容后,新版本软件代码仍需完整执行预设的变异内容,这显然存在大量重复累赘的测试内容,导致测试效率低。
因此,本申请实施例提供了一体化集成单元测试和变异测试功能的测试平台,将单元测试功能和变异测试功能集成到一体化平台上,可以在对待测代码进行变异测试的时候,先行主动执行单元测试,进而既能获取代码覆盖率又能评估测试用例的有效性,及时发现无效测试用例,有助于节省时间成本和人力成本,使得用户能更高效地执行单元测试以及进行单元测试有效性检查,协助用户对测试用例进行进一步修正,帮助用户编写出更好更有效的测试用例。
并且,本申请实施例能够通过一体化测试平台对待测源文件的变更文件进行针对性测试,具体是在对变更文件的单元测试通过之后,对变更文件进行变异测试,因此,本申请实施例无需对所有预执行内容进行全面测试,针对变更文件中变更内容进行测试,能够减少测试的数据量,降低测试内容的重复率,进而提高测试效率。
参考图1,其示出了本申请实施例提供的一种测试方法的应用场景示意图。在该应用场景中,包括至少一位测试人员101以及至少一台终端设备102。其中,终端设备可以是任何一种可通过键盘、触摸板、触摸屏、遥控器、语音交互或手写设备等一种或多种方式进行人机交互的电子产品,该电子产品具有搭载本申请实施例提供的测试平台并且运行测试平台的功能,例如个人计算机(Personal Computer,PC)、手机、智能手机、个人数字助手(Personal Digital Assistant,PDA)、可穿戴设备、掌上电脑PPC(Pocket PC)、平板电脑等。可以理解的是,终端设备除了可以是上述能够进行人际交互的电子产品之外,还可以是搭载在云上的服务器端,服务端可以是一台服务器,或者由若干台服务器组成的服务器集群,或者是一个云计算服务中心,服务器端可以用于获取互联网上的数据信息,例如待测源文件,以及对应待测源文件的测试指令等。服务器端还可以接收测试人员101发送的远程指令,该远程指令用来执行本申请实施例的测试方法。
如图1所示,在测试人员101对待测内容进行测试的时候,向终端设备102发出测试指令,需要说明的是,测试指令可以是第一测试指令、第二测试指令或者第三测试指令,终端设备102响应于接收到的第一测试指令,对待测源文件进行第一单元测试;终端设备102响应于接收到的第二测试指令,对待测源文件进行第一一体化测试;第一一体化测试包括:对待测源文件进行第二单元测试,若第二单元测试通过,则对待测源文件进行第一变异测试;终端设备102响应于接收到的第三测试指令,确定待测源文件的变更文件,对变更文件进行第二一体化测试,第二一体化测试包括:对变更文件进行第三单元测试,若第三单元测试通过,则对变更文件进行第二变异测试。最后,由图1所示的终端设备102显示测试结果,该测试结果包括以下至少之一:第一单元测试的测试结果、第二单元测试的测试结果、第三单元测试的测试结果、第一变异测试的测试结果以及第二变异测试的测试结果。示例地,终端设备102显示的测试结果103可以如图1所示,向测试人员提供“单元测试结果为***,变异测试结果为***”等相关信息。
可以理解的是,本申请实施例通过图1示例性说明了其中一种应用场景,即测试人员101主动向终端设备102输入待测源文件以及对应的测试指令,进而通过搭载了本申请实施例提供的测试平台的终端设备进行相应测试。在另一些应用场景中,终端设备102可以主动从网络终端等数据提供方获取待测源文件以及对应的测试指令,无需测试人员主动输入相关内容。本申请实施例不对具体应用场景进行限定,上述图1的应用场景仅作为示例性说明。
如图2所示,本申请实施例提供了一种测试方法,该方法可以应用于上述图1中的终端设备102来实现。参考图2,该测试方法可以由终端设备执行,也可以在任意具有数据处理能力的装置上执行测试方法,例如可以在个人计算机上执行,该方法具体包括但不限于步骤S100-S400:
S100、对获取的测试指令进行类型解析,确定测试指令为第一测试指令、第二测试指令或者第三测试指令;
具体地,本申请实施例的测试方法只需要接收测试人员输入的测试指令,通过解析测试指令得到第一测试指令、第二测试指令或者第三测试指令,就能自主选择执行单元测试或一体化测试,当执行单元测试的时候,能得到代码覆盖率,进而保证测试内容的代码质量;当执行一体化测试的时候,既能得到代码覆盖率,又能得到测试用例有效性,进而确保测试内容的代码质量以及测试用例质量。因此,本申请实施例在提高测试效率和提升研发效率的同时,为用户提供了优化的测试体验。
S200、响应于接收到的第一测试指令,对待测源文件进行第一单元测试;
具体地,第一测试指令是指终端设备接收到的执行第一单元测试的指令,当终端设备为智能手机时,该第一测试指令可以例如是点击指令、长按指令或者语音指令;当终端设备为个人计算机时,该第一测试指令可以例如是由控制台输入的命令代码。
其中,待测源文件是指需要进行测试的内容集合,待测源文件可以是一件软件产品的代码集合。
在本申请实施例中,第一测试指令要求对待测源文件执行单元测试,并获取单元测试的结果。
S300、响应于第二测试指令,对待测源文件进行第一一体化测试;第一一体化测试包括:对待测源文件进行第二单元测试,若第二单元测试通过,则对待测源文件进行第一变异测试,生成第一一体化测试结果;第一一体化测试结果用于表征待测源文件的代码覆盖率和测试用例有效性;
具体地,第二测试指令是指终端设备接收到的对待测源文件执行一体化测试的指令,本申请实施例将根据第二测试指令对待测源文件执行一体化测试的过程称为第一一体化测试,该一体化测试包括了单元测试和变异测试,当终端设备为智能手机时,该第二测试指令可以例如是点击指令、长按指令或者语音指令;当终端设备为个人计算机时,该第二测试指令可以例如是由控制台输入的命令代码。
在本申请实施例中,一体化测试的指令包括了单元测试和变异测试,即对待测源文件执行单元测试后,再执行变异测试,因此,本申请实施例通过执行第二测试指令,得到的测试结果包括代码覆盖率和测试用例的有效性,能够在待测源文件发布前确保源文件质量和测试用例质量,提高测试效率并提升研发效率。
S400、响应于第三测试指令,确定待测源文件的变更文件,对变更文件进行第二一体化测试,第二一体化测试包括:对变更文件进行第三单元测试,若第三单元测试通过,则对变更文件进行第二变异测试,生成第二一体化测试结果;第二一体化测试结果用于表征所述变更文件的代码覆盖率和测试用例有效性;
具体地,第三测试指令是指终端设备接收到的对待测源文件的变更文件执行一体化测试的指令,本申请实施例将根据第三测试指令对变更文件执行一体化测试的过程称为第二一体化测试,该一体化测试包括了单元测试和变异测试,当终端设备为智能手机时,该第三测试指令可以例如是点击指令、长按指令或者语音指令;当终端设备为个人计算机时,该第三测试指令可以例如是由控制台输入的命令代码。
其中,变更文件是指对待测源文件进行修改后的内容集合,可以理解的是,待测源文件的修改可以是对待测源文件的增删改等操作,例如,对于一个版本的软件产品,在增加了新功能之后,在源文件的基础上增加了新功能对应的代码,因此新增加了代码后的文件则为变更文件;又如对于一个版本的软件产品,在减少了旧功能之后,在源文件的基础上删除了旧功能对应的代码,因此删除了代码后的文件则为变更文件。
可以理解的是,在上述步骤S400中,本申请实施例能够根据第三测试指令对变更文件进行针对性的第二一体化测试,该第二一体化测试针对变更文件中的变更内容进行测试,无需对原始源文件执行过的全部预执行内容进行全面测试,因此,本申请实施例通过对变更文件中发生修改的内容进行针对性测试,能够减少测试的数据量,降低测试内容的重复率,进而提高测试效率。
本申请实施例的测试方法只需要接收测试人员输入的测试指令,通过解析测试指令得到第一测试指令、第二测试指令或者第三测试指令,就能自主选择执行单元测试或一体化测试,当执行单元测试的时候,能得到代码覆盖率,进而确保测试内容的代码质量;当执行一体化测试的时候,既能得到代码覆盖率,又能得到测试用例有效性,进而确保测试内容的代码质量以及测试用例质量。因此,本申请实施例在提高测试效率和提升研发效率的同时,为用户提供了优化的测试体验。
图3为本申请实施例提供的响应于第一测试指令的流程图,在一些实施例中,上述步骤S200中响应于第一测试指令,对待测源文件进行第一单元测试,生成第一单元测试结果这一步骤,如图3所示,包括以下步骤S210-S230:
S210、响应于接收到的第一测试指令;
具体地,本申请实施例在接收到测试指令后,对测试指令进行解析,确定当前测试指令为第一测试指令,则进入对待测源文件的单元测试阶段。
S220、若第一测试指令中包含第一单元测试配置文件的路径,则根据第一单元测试配置文件的路径获取第一单元测试配置文件,对待测源文件进行第一单元测试,生成第一单元测试结果;
S230、若第一测试指令中不包含第一单元测试配置文件的路径,则通过默认单元测试配置文件对待测源文件进行第一单元测试,生成第一单元测试结果。
具体地,对于接收到的第一测试指令,会首先判断第一测试指令中是否包含指定的配置文件路径,若有,则本申请实施例可以根据指定的配置文件路径获取对应的配置文件,即上述第一单元测试配置文件,并根据第一单元测试配置文件对待测源文件进行单元测试;若无,则本申请实施例可以获取测试平台预先设置好的默认单元测试配置文件,并根据默认单元测试配置文件对待测源文件进行单元测试。
其中,本申请实施例可以通过Jest单元测试框架来实现上述单元测试的功能,Jest单元测试框架除了基本的断言和mock测试功能外,还有快照测试、实时监控模式、覆盖度报告等实用功能。
除了通过Jest单元测试框架实现单元测试功能之外,本申请实施例还可以通过mocha单元测试框架来实现,mocha是一个功能丰富的JavaScript单元测试框架,它既可以运行在服务器环境中,也可以运行在客户端环境中。一般来说,为了支撑一个完整网页的运行,需要客户端和服务端两个部分,客户端一般指的是浏览器,页面内容的呈现和与用户之间的交互主要发生在客户端,而服务器端主要负责页面的生成以及请求的处理等。
另外,本申请实施例也可以同时集成Jest单元测试框架和mocha单元测试框架,将两种单元测试框架的优点进行结合,进一步提升单元测试的性能。
以Jest单元测试框架作为本申请实施例的单元测试功能的实现框架为例,在Jest单元测试框架中,默认单元测试配置文件为“jest.config.js”文件,当第一测试指令中包含指定的配置文件路径时,则获取指定的第一单元测试配置文件。在本申请实施例的Jest单元测试框架中,指定的配置文件为“dwt.config.js”,该第一单元测试配置文件可以兼容原有配置文件“jest.config.js”的所有属性,而且还能添加指定的额外属性。
示例性的,第一单元测试配置文件可以包含defaultTestBaseInfo属性,该属性用于配置默认用例负责人的相关信息,例如测试用例编写人员信息、测试用例优先级信息以及测试用例类型信息等。当第一单元测试配置文件中配置了defaultTestBaseInfo属性之后,Jest单元测试框架可以根据该属性直接向单元测试文件中添加用例负责人信息,无需手动执行信息添加的相关操作,有助于提高单元测试的执行效率,减少用户的操作复杂度。
又如,第一单元测试配置文件中还可以包含browserGlobal属性,该属性用于配置环境变量,例如单元测试的测试环境等,进一步提高单元测试的执行效率,减少用户的操作复杂度。
可以理解的是,对于不需要配置上述额外属性的场景,本申请实施例可以通过默认单元测试配置文件对待测源文件进行第一单元测试。
图4为本申请实施例提供的响应于第二测试指令的流程图,在一些实施例中,如图4所示,上述步骤S300包括步骤S310-S330:
S310、响应于接收到的第二测试指令,生成第二单元测试配置文件;
具体地,本申请实施例在接收到测试指令后,对测试指令进行解析,确定当前测试指令为第二测试指令,则进入对待测源文件的第二单元测试阶段。
需要说明的是,在第二单元测试阶段中,本申请实施例临时生成第二单元测试配置文件,在执行第二单元测试时,相较于现有技术通过预设的单元测试配置文件来执行单元测试,本申请实施例通过该临时生成的第二单元测试配置文件来执行单元测试。由于第二测试指令要求对待测源文件进行单元测试和变异测试的一体化测试,因此在通过单元测试后将通过变异测试驱动器对待测源文件执行变异测试。可以理解的是,变异测试驱动器在对待测源文件执行变异测试的时候,需要加载单元测试的默认配置文件,如果在执行变异测试的过程中,对单元测试的默认配置文件进行频繁修改,这个修改的过程可能导致默认配置文件内容出错,如果第二单元测试仍采用该默认配置文件执行单元测试的话,那么单元测试的出错率就会上升,进而导致变异测试的出错率也上升,降低了变异测试的效率。因此,为了避免因变异测试驱动器对配置文件的频繁修改而导致单元测试出错,本申请实施例用临时生成的第二单元测试配置文件来执行第二单元测试,变异测试驱动器在执行变异测试的时候,只对该临时生成的第二单元测试配置文件进行修改,不会修改单元测试的默认配置文件,能够确保后续再次执行第二单元测试时的正常执行,由于变异测试需要在单元测试成功执行,因此第二单元测试的正常执行能够提高后续再次执行第一变异测试的成功率,进而提高后续变异测试的成功率。
S320、根据第二单元测试配置文件对待测源文件进行第二单元测试;
S330、若第二单元测试通过,生成第一变异测试配置文件,对待测源文件进行第一变异测试,生成第一一体化测试结果。
具体地,本申请实施例在通过步骤S310完成对待测源文件的单元测试之后,再对待测源文件进行变异测试。可以理解的是,单元测试如果不通过,则变异测试也无法通过,因此本申请实施例对通过了单元测试的待测源文件进行变异测试,能够提高变异测试的通过率,进而减少无效的变异测试,能够降低时间成本,帮助用户快速定位待测源文件存在问题的地方,提高了一体化测试的效率。
需要说明的是,本申请实施例可以采用Stryker变异测试框架来实现对待测源文件的变异测试功能,Stryker是一种开源变异测试框架,相似的变异测试框架可以例如是grunt-mutation-testing变异测试框架、mutandis变异测试框架、mutode变异测试框架以及js-mutation-testing变异测试框架等。在Stryker变异测试框架中执行本申请的测试方法时,只有在第二单元测试通过时,才执行第一变异测试,若第二单元测试没有通过,则直接退出测试流程,能够降低时间成本,帮助用户快速定位问题,进而提高测试效率。
参考图4,在一些实施例中,上述步骤S330包括步骤S331-S333:
S331、若根据第二单元测试配置文件或者根据第二测试指令获取到待测源文件的路径;
具体地,本申请实施例可以通过上述第二单元测试配置文件查找对应的单元测试文件,该单元测试文件用于对相应的待测源文件进行单元测试,因此,通过第二单元测试配置文件,找到单元测试文件后,则能获取待测源文件的路径。另外,本申请实施例还可以通过第二测试指令声明单元测试文件的路径,进而通过该路径找到对应的待测源文件的路径,再有,本申请实施例还可以重新获取指令,该指令用于显式地声明源文件路径,基于该指令可以直接获取源文件路径,无需通过第二单元测试配置文件来查找单元测试文件对应的待测源文件路径。
需要说明的是,本申请实施例获取了待测源文件的路径之后,能够用于生成第一变异测试配置文件。
S332、根据待测源文件的路径生成第一变异测试配置文件;
具体地,第一变异测试配置文件中配置了待测源文件对应将要执行的预变异源文件。其中,预变异源文件是指预先编辑好的对待测源文件进行变异测试时将要进行变异修改的内容。需要说明的是,变异测试是指向待测程序代码中植入各种类型的故障,从而产生大量的错误程序,用来模仿某种故障的操作,进而评估测试用例集的质量。因此,在对待测源文件进行变异测试的时候,需要预先编辑好需要进行变异修改的预变异源文件,在确认了待测源文件之后,通过上述预变异源文件,就能对待测源文件中相应的代码内容进行变异修改。
例如,对于一段待测源文件{a,b,c,d},预设的预变异源文件为{c’,d’},这里的c’是指对待测源文件中代码c进行变异修改后的内容,d’是指对待测源文件中代码d进行变异修改后的内容。
S333、通过第一变异测试配置文件对待测源文件进行第一变异测试,生成第一一体化测试结果。
根据上述步骤S332生成的第一变异测试配置文件,获取对应的预变异源文件,并通过预变异源文件对待测源文件进行第一变异测试。
在一些实施例中,在上述生成第二单元测试配置文件之前,还包括步骤S340:
S340、删除第一备份文件。
需要说明的是,第一备份文件是指待测源文件中历史遗留下的临时备份文件。可以理解的是,当变异测试驱动器对任一项目内容进行变异测试的时候,会在该项目的根目录下的临时文件夹内生成整个项目的完整拷贝内容,即为第一备份文件。在本申请实施例执行第二测试指令的时候,会首先执行单元测试,然后执行变异测试。如果不在单元测试步骤之前先删除上述第一备份文件,则每次执行完变异测试之后存留的临时备份文件会不断积累,而单元测试是对整个项目完整内容的全面测试,因此这些临时生成的备份文件也会成为单元测试的测试对象,这会导致单元测试的测试数据量大,降低了单元测试的效率;另外,由于临时生成的备份文件可能无法通过单元测试,因此不断积累的临时备份文件可能造成单元测试的失败率提高,进而导致无法执行变异测试或者只能执行失败的变异测试。因此,本申请实施例在执行第一单元测试之前,先将待测源文件的临时文件夹内的第一备份文件删除,能够减少单元测试的测试数据量,提高单元测试的通过率,进而提高后续变异测试的通过率。
在一些实施例中,在上述对待测源文件进行第一变异测试之后,还包括步骤S350:
S350、删除第二备份文件。
其中,第二备份文件是指经过第一变异测试时,在待测源文件的临时文件夹内生成的对于待测源文件的完整拷贝内容,根据上述步骤S340的描述,如果在变异测试之后存留第二备份文件,则当待测源文件下次执行单元测试的时候,会对整个待测源文件进行测试,这里的待测源文件包含了第二备份文件,因此会造成后续单元测试的数据量变大,可能导致单元测试的失败率提高,进而导致变异测试的失败率提高。
因此,本申请实施例在执行完第一变异测试之后,删除第二备份文件,有助于降低再次利用待测源文件进行单元测试时的失败率,进而降低变异测试的失败率。
图5为本申请实施例提供的响应于第三测试指令的执行流程图,在一些实施例中,上述步骤S400中:确定待测源文件的变更文件,对变更文件进行第三单元测试这一步骤,包括步骤S410-S430:
S410、若待测源文件发生变更,确定待测源文件的变更文件;
具体地,本申请实施例首先通过步骤S410对待测源文件进行校验,判断待测源文件是否发生了变更处理,其中,变更处理可以是对待测源文件的代码修改、代码增加、代码删除等处理。经过上述变更处理后的文件,则确定为变更文件。
可以理解的是,对于例如软件产品更新的应用场景,每个新版本的软件包通常只是对上一版本的软件包进行少量变更处理后得到的,如果仅仅对软件包进行了少量变更处理,却要对预执行单元测试文件和预变异源文件的所有内容进行测试,而预执行单元测试文件以及预变异源文件中的内容已经在上一版本的软件包中进行过了测试,如果再用预执行单元测试文件以及预变异源文件对变更文件进行测试,这个测试过程会存在大量重复测试的内容,造成测试效率低。
示例性的,假设上一版本的软件包的代码文件为{a,b,c,d,e},新版本的软件包的代码文件为{a,b,c,d,f},预变异源文件为{c’,d’,e’,f’,g’},也就是说,该实施例中的待测源文件为{a,b,c,d,e},变更文件为{a,b,c,d,f},对应的变更处理则是将“e”修改为“f”,而预设的预变异源文件中,c’是指对待测源文件中代码c进行变异修改后的内容,d’是指对待测源文件中代码d进行变异修改后的内容,e’是指对待测源文件中代码e进行变异修改后的内容,f’是指对待测源文件中代码f进行变异修改后的内容,g’是指对待测源文件中代码g进行变异修改后的内容。通过预变异源文件对上一版本的待测源文件进行变异测试时,测试内容为{a,b,c,d,e}与{c’,d’,e’,f’,g’}之间的交集{c’,d’,e’},在通过预变异源文件对变更文件进行变异测试时,由于{c’,d’}已经被执行过,因此只需要执行{f’},无需再次执行{c’,d’}的变异测试,能够提高测试流程的效率。
S420、生成变更文件的第三单元测试配置文件;
具体地,本申请实施例在步骤S410确定了变更文件之后,临时生成变更文件对应的第三单元测试配置文件,参考上述步骤S310的描述,本申请在第三单元测试阶段中,通过临时生成的第三单元测试配置文件来执行单元测试。变异测试驱动器在执行变异测试的时候,只对该临时生成的第三单元测试配置文件进行修改,不会修改单元测试的默认配置文件,因此,基于稳定的默认配置文件,能够确保后续再次执行第三单元测试时的正常执行,由于变异测试需要在单元测试成功后才能正常执行,因此第三单元测试的正常执行能够提高后续再次执行第二变异测试的成功率,进而提高后续变异测试的成功率。
S430、根据第三单元测试配置文件,将获取的预执行单元测试文件替换为目标单元测试文件,对变更文件进行第三单元测试。
其中,预执行单元测试文件是指预先编辑好的对待测内容进行单元测试时使用的测试文件。可以理解的是,单元测试的测试文件可以包括编写好的测试用例等内容,通过编写好的测试用例,能够对待测内容进行单元测试,从而获取测试用例的代码覆盖率。因此,在相关技术中,对于任一待测内容,均需通过预执行单元测试文件来对待测内容进行单元测试。本申请实施例针对待测源文件的变更内容,将预执行单元测试文件替换为目标单元测试文件,进而实现对变更文件的针对性单元测试。
目标单元测试文件是指:对变更文件与待测源文件之间存在区别的目标内容进行单元测试的测试文件。例如,上述待测源文件{a,b,c,d,e}与变更文件{a,b,c,d,f}之间存在区别的目标内容为{f},因此该目标内容对应的测试文件为{f}对应的测试文件。
通过本申请实施例的方法,能够进针对目标内容进行针对性的单元测试,无需将原本待测源文件执行过的单元测试内容重新执行一遍,降低了单元测试的重复率,有助于提高单元检测的效率。
参照图6,在一些实施例中,上述步骤S430包括S431-S433:
S431、获取预执行单元测试文件;
其中,预执行单元测试文件是指预先编辑好的对待测内容进行单元测试时使用的测试文件。在单元测试阶段,测试人员通常会提前准备好测试文件,该测试文件中明确了需要进行单元测试的内容,由此可以针对任意待测源文件进行相同的单元测试,进而找出测试人员想要检测的问题。
S432、若预执行单元测试文件与第三单元测试配置文件之间存在第一交集,将第一交集确定为目标单元测试文件;
具体地,本申请实施例通过步骤S420生成变更文件的第三单元测试配置文件,其中,该第三单元测试配置文件中配置了变更文件的第三单元测试文件,该第三单元测试文件是由第三单元测试配置文件预先配置好的,用于对变更文件的所有内容进行单元测试的测试文件。通过计算预执行单元测试文件与第三单元测试配置文件之间的第一交集,就是计算上述第三单元测试配置文件中配置好的第三单元测试文件与预执行单元测试文件之间的第一交集,该第一交集的内容代表其既是预执行单元测试文件中的内容,又是第三单元测试文件中的内容,因此将该第一交集确定为目标单元测试文件。
示例性的,假设预执行单元测试文件的内容为{a’,b’,c’},第三单元测试配置文件中预先配置的第三单元测试文件的内容为{b’,c’,d’,e’},则上述预执行单元测试文件与第三单元测试文件之间的第一交集为{b’,c’},将该第一交集确定为目标单元测试文件,因此,通过该目标单元测试文件,就能够对变更文件中的{b’,c’}内容进行单元测试。通过本申请实施例的方法,既无需对预执行单元测试{a’,b’,c’}中的所有内容进行测试,也无需对第三单元测试文件{b’,c’,d’,e’}中的所有内容进行测试,大大减少了单元测试的测试内容,有助于提高单元测试的测试效率。
S433、将预执行单元测试文件替换为目标单元测试文件,对变更文件进行第三单元测试。
具体地,本申请实施例根据上述步骤S432中确定的目标单元测试文件,将原本默认在单元测试中执行的预执行单元测试文件替换为目标单元测试文件,进而针对性地对变更文件中发生变更的内容进行第三单元测试,提高单元测试的效率。
参照图5,在一些实施例中,上述步骤S400中对变更文件进行第二变异测试这一步骤,包括S440-S460:
S440、根据变更文件,确定目标变异源文件;
其中,目标变异源文件是指对变更文件中发生变更的内容进行变异测试的文件。示例性的,对于待测源文件{a,b,c,d,e}以及变更文件{b,c,d,e,f},预变异源文件为{d’,e’,f’}变更文件中发生变更的内容为{f},因此,针对该变更文件,对应的目标变异源文件应该是{f’},通过该目标变异源文件,可以针对变更文件中的变更内容进行变异测试,无需对预变异源文件中所有预变异内容{d’,e’,f’}进行变异测试,有助于减少变异测试的数据量,提高变异测试的效率。
S450、生成变更文件的第二变异测试配置文件,其中,第二变异测试配置文件中配置有预变异源文件;
具体地,第二变异测试配置文件中预先配置了预变异源文件,通常情况下,对任意待测源文件进行变异测试时,需要通过预先配置的预变异源文件来对待测源文件中的相关内容进行变异测试。预变异源文件中配置的内容是测试人员想要测试的内容,具体可根据实际需求动态调整。示例性的,例如对于待测源文件为{a,b,c,d},预先配置的预变异源文件可以是{a’,c’},通过该预变异源文件,期望对待测源文件中的{a,c}内容进行变异测试;预变异源文件还可以是{c’,d’},通过该预变异源文件,期望对待测源文件中的{c,d}进行变异测试。
S460、将预变异源文件替换为目标变异源文件,对变更文件进行第二变异测试。
具体地,本申请实施例用上述步骤S440中确定的目标变异源文件替换掉上述步骤S450中第二变异测试配置文件中配置的预变异源文件,进而使得第二变异测试中使用的变异测试文件为上述目标变异源文件,能够减少变异测试的数据量,提高变异测试的效率。
参考图7,在一些实施例中,上述步骤S440包括步骤S441-S442:
S441、获取预变异源文件;
S442、若预变异源文件与变更文件之间存在第二交集,将第二交集确定为目标变异源文件。
具体地,本申请实施例获取确定变更文件与预变异源文件之间的交集,该交集既属于变更文件中的内容,又属于预变异源文件中的内容,因此,第二交集能够用来对变更文件中出现的、且测试人员想要测试的内容进行变异测试。
示例性的,对于变更文件为{b,c,d,f},预变异源文件为{c’,d’,e’},此时,变更文件与预变异源文件之间的第二交集为{c,d},对应的变异源文件为{c’,d’},也就是说,将第二交集{c’,d’}确定为目标变异源文件之后,在执行步骤S460的第二变异测试时,对上述第二交集中的{c,d}进行变异测试,无需全部执行预变异源文件中的{c,d,e},进而能够减少变异测试的测试数据量,提高测试效率。
参考图7,在一些实施例中,上述步骤S450包括步骤S451-S452:
S451、若根据第三单元测试配置文件或者根据第三测试指令获取到变更文件的路径;
具体地,本申请实施例可以通过上述第三单元测试配置文件查找对应的单元测试文件,该单元测试文件用于对相应的待测源文件进行单元测试,因此,通过第三单元测试配置文件,找到单元测试文件后,则能获取待测源文件的路径。示例性的,例如第三单元测试配置文件的路径为test/unit/src/index.spec.js,则相对应的,所述变更文件的路径为src/index.js。
另外,本申请实施例还可以通过第三测试指令声明单元测试文件的路径,进而通过该路径找到对应的待测源文件的路径,再有,本申请实施例还可以重新获取指令,该指令用于显式地声明源文件路径,基于该指令,则无需通过第三单元测试配置文件查找单元测试文件对应的待测源文件路径。
需要说明的是,本申请实施例获取了变更文件的路径之后,能够用于生成第二变异测试配置文件。
S452、根据变更文件的路径生成第二变异测试配置文件。
具体地,第二变异测试配置文件中配置了变更文件对应将要执行的预变异源文件。其中,预变异源文件是指预先编辑好的对待测源文件进行变异测试时将要进行变异修改的内容。需要说明的是,变异测试是指向待测程序代码中植入各种类型的故障,从而产生大量的错误程序,用来模仿某种故障的操作,进而评估测试用例集的质量。因此,在对待测源文件进行变异测试的时候,需要预先编辑好需要进行变异修改的预变异源文件,在确认了待测源文件之后,通过上述预变异源文件,就能对待测源文件中相应的代码内容进行变异修改。
例如,对于一段变更文件{a,b,c,d},预设的预变异源文件为{c’,d’},这里的c’是指对变更文件中代码c进行变异修改后的内容,d’是指对变更文件中代码d进行变异修改后的内容。
在一些实施例中,上述步骤S420生成第三单元测试配置文件之前,还包括删除第三备份文件的步骤。
需要说明的是,第三备份文件是指变更文件的临时备份文件,当变异测试驱动器对任一项目内容进行变异测试的时候,会在该项目的根目录下的临时文件夹内生成整个项目的完整拷贝内容,即为第三备份文件。在本申请实施例执行第三测试指令的时候,会首先执行单元测试,然后执行变异测试。如果不在单元测试步骤之前先删除上述第三备份文件,则每次执行完变异测试之后存留的临时备份文件会不断积累,而单元测试是对整个项目完整内容的全面测试,因此这些临时生成的备份文件也会成为单元测试的测试对象,这会导致单元测试的测试数据量大,降低了单元测试的效率;另外,由于临时生成的备份文件可能无法通过单元测试,因此不断积累的临时备份文件可能造成单元测试的失败率提高,进而导致无法执行变异测试或者只能执行失败的变异测试。因此,本申请实施例在执行第三单元测试之前,先将变更文件的临时文件夹内的第三备份文件删除,能够减少单元测试的测试数据量,提高单元测试的通过率,进而提高后续变异测试的通过率。
在一些实施例中,上述步骤S460对变更文件进行第二变异测试之后,还包括删除第四备份文件的步骤。
其中,第四备份文件是指经过第二变异测试时,在变更文件的临时文件夹内生成的对于变更文件的完整拷贝内容,如果在变异测试之后存留第四备份文件,则当变更文件下次执行单元测试的时候,会对整个待测源文件进行测试,这里的变更文件包含了第四备份文件,因此会造成后续单元测试的数据量变大,可能导致单元测试的失败率提高,进而导致变异测试的失败率提高。
因此,本申请实施例在执行完第二变异测试之后,可以删除第四备份文件,有助于降低再次利用变更文件进行单元测试时的失败率,进而降低变异测试的失败率。
综上所述,本申请实施例的测试方法,实现了单元测试和变异测试的一体化,能够在对待测源文件进行变异测试的时候,先执行单元测试,在单元测试通过后执行变异测试,在该测试方法中,本申请实施例只需要接收测试人员输入的测试指令,通过解析测试指令得到第一测试指令、第二测试指令或者第三测试指令,就能自主选择执行单元测试或一体化测试,给予用户更好更灵活的测试体验。当执行单元测试的时候,能得到代码覆盖率,进而确保测试内容的代码质量;当执行一体化测试的时候,既能得到代码覆盖率,又能得到测试用例有效性,进而确保测试内容的代码质量以及测试用例质量,帮助用户编写出更好更有效的测试用例,提高测试效率,提升研发效率。
另外,本申请实施例的测试方法能够针对待测源文件的变更文件进行变异测试和单元测试,能够减少测试的数据量,降低测试内容的重复率,进而提高测试效率。
图8为本申请实施例提供的测试平台的结构示意图,如图8所示,该测试平台包括:
命令解析层810,用于对获取的测试指令进行类型解析,确定测试指令为第一测试指令、第二测试指令或者第三测试指令;
配置层820,用于根据测试指令,生成单元测试的配置文件或变异测试的配置文件;
集成层830,用于集成单元测试驱动器和变异测试驱动器;
测试驱动层840,用于响应测试指令,执行如图2所示的以下步骤:
响应于第一测试指令,通过单元测试驱动器对待测源文件进行第一单元测试,生成第一单元测试结果;第一单元测试结果用于表征待测源文件的代码覆盖率;
响应于第二测试指令,对待测源文件进行第一一体化测试;第一一体化测试包括:通过单元测试驱动器对所述待测源文件进行第二单元测试,若第二单元测试通过,则通过变异测试驱动器对待测源文件进行第一变异测试,生成第一一体化测试结果;第一一体化测试结果用于表征待测源文件的代码覆盖率和测试用例有效性;
响应于第三测试指令,确定待测源文件的变更文件,对变更文件进行第二一体化测试,第二一体化测试包括:通过单元测试驱动器对变更文件进行第三单元测试,若第三单元测试通过,则通过变异测试驱动器对变更文件进行第二变异测试,生成第二一体化测试结果;第二一体化测试结果用于表征变更文件的代码覆盖率和测试用例有效性。
具体地,如图8所示,本申请实施例的测试平台包括四层,其中,第一层为命令解析层,用于对测试人员输入的测试指令进行解析,以区分当前测试指令是第一测试指令、第二测试指令还是第三测试指令,进而执行不同的测试流程。
第二层为配置层,测试平台在解析得到测试指令之后,配合生成对应的配置文件,例如单元测试配置文件和变异测试配置文件。
第三层为集成层,该集成层可以集成Jest单元测试驱动器和Stryker变异测试驱动器,通过这两种驱动器,能够在同一个测试平台上同时实现单元测试和变异测试,从而实现一体化;
第四层为测试驱动层,用于驱动上述Jest单元测试驱动器和Stryker变异测试驱动器执行对应的测试流程。
本申请实施例的测试平台实现了本地化体验,相较于传统技术中测试人员需要将待测源文件上传到指定服务器的测试平台进行数据处理的方式,本申请实施例的本地化测试平台能够使得测试人员得到快速反馈,提高研发效率。
基于图8所示的测试平台,下面以测试人员通过该测试平台执行如图2所示的测试方法的过程为例,详细说明本申请实施例提供的测试方法。参照图9,测试方法包括步骤:
S9100、向图8所示的测试平台的控制台输入测试指令;通过图8所示的命令解析层810解析控制指令,根据解析到的第一测试指令、第二测试指令或者第三测试指令,分别执行对应的测试步骤;
S9200、响应于第一测试指令,通过单元测试驱动器对待测源文件进行第一单元测试,生成第一单元测试结果;第一单元测试结果用于表征待测源文件的代码覆盖率;
S9300、响应于第二测试指令,对待测源文件进行第一一体化测试;第一一体化测试包括:通过单元测试驱动器对所述待测源文件进行第二单元测试,若第二单元测试通过,则通过变异测试驱动器对待测源文件进行第一变异测试,生成第一一体化测试结果;第一一体化测试结果用于表征待测源文件的代码覆盖率和测试用例有效性;
S9400、响应于第三测试指令,确定待测源文件的变更文件,对变更文件进行第二一体化测试,第二一体化测试包括:通过单元测试驱动器对变更文件进行第三单元测试,若第三单元测试通过,则通过变异测试驱动器对变更文件进行第二变异测试,生成第二一体化测试结果;第二一体化测试结果用于表征变更文件的代码覆盖率和测试用例有效性。
具体地,参见图9,在步骤S9200中,首先判断第一测试指令中是否包含第一单元测试配置文件的路径,若有,则本申请实施例可以根据指定的配置文件路径获取对应的配置文件,即上述第一单元测试配置文件,并根据第一单元测试配置文件对待测源文件进行单元测试;若无,则本申请实施例可以获取测试平台预先设置好的默认单元测试配置文件,并根据默认单元测试配置文件对待测源文件进行单元测试,进而能够提高单元测试的执行效率,减少用户的操作复杂度。
在步骤S9300中,首先删除待测源文件中历史遗留的第一备份文件,接着临时生成第二单元测试配置文件,然后通过该临时生成的第二单元测试配置文件来执行单元测试,当第二单元测试通过之后,则可以根据第二单元测试的测试文件找到待测源文件的路径,并根据待测源文件的路径临时生成第一变异测试配置文件,进而根据第一变异测试文件对待测源文件进行变异测试,并在完成变异测试之后删除变异测试过程中生成的第二备份文件。根据上述步骤描述,本申请实施例实现了单元测试和变异测试的一体化集成,既能获取代码覆盖率又能评估测试用例的有效性,及时发现无效测试用例,有助于节省时间成本和人力成本,提高了测试效率。
在步骤S9400中,首先判断变更文件相较于待测源文件是否发生了变更,具体判断方法可以例如是将变更文件与待测源文件进行相似性匹配,以检查变更文件中是否发生增删改等变更。接着,获取第二变异测试配置文件中的预变异源文件,并将变更文件与预变异源文件之间的交集确定为目标变异源文件。在删除变更文件中历史遗留的第三备份文件之后,临时生成第三单元测试配置文件,并通过前述步骤S430的方法将第三单元测试配置文件中的预执行单元测试文件替换为目标单元测试文件,对变更文件进行第三单元测试。通过第三单元测试之后,可以根据第三单元测试的测试文件找到变更文件的路径,并根据变更文件的路径临时生成第二变异测试配置文件,并通过前述步骤S440-S460,将第二变异测试配置文件中预变异源文件替换为目标变异源文件,最后通过目标变异源文件对变更文件进行变异测试,并删除变异测试过程中生成的第四备份文件,进而实现单元测试和变异测试的一体化集成,并只需要对变更文件中发生变更的内容进行针对性测试,有助于节省时间成本和人力成本,提高了测试效率。
图10为本申请实施例提供的测试装置的结构示意图,该测试装置1000可以应用于图1所示的终端设备102,比如该装置可以通过硬件或者软硬结合的方式实现终端设备102的部分或者全部功能,以实现如上述测试方法中的步骤。如图10所示,该测试装置可以包括:
解析模块1100,用于对获取的测试指令进行类型解析,确定所述测试指令为第一测试指令、第二测试指令或者第三测试指令;
第一测试模块1200,用于响应于所述第一测试指令,对待测源文件进行第一单元测试,生成第一单元测试结果;所述第一单元测试结果用于表征所述待测源文件的代码覆盖率;
第二测试模块1300,用于响应于所述第二测试指令,对所述待测源文件进行第一一体化测试,所述第一一体化测试包括对所述待测源文件进行第二单元测试,若所述第二单元测试通过,则对所述待测源文件进行第一变异测试,生成第一一体化测试结果;所述第一一体化测试结果用于表征所述待测源文件的代码覆盖率和测试用例有效性;
第三测试模块1400,用于响应于所述第三测试指令,确定所述待测源文件的变更文件,对所述变更文件进行第二一体化测试,所述第二一体化测试包括:对所述变更文件进行第三单元测试,若所述第三单元测试通过,则对所述变更文件进行第二变异测试,生成第二一体化测试结果;所述第二一体化测试结果用于表征所述变更文件的代码覆盖率和测试用例有效性。
综上所述,本申请实施例提供的测试装置,既能获取代码覆盖率又能评估测试用例的有效性,及时发现无效测试用例,有助于节省时间成本和人力成本;另外,本申请实施例能够针对待测源文件的变更文件进行单元测试和变异测试,无需对所有预执行内容进行全面测试,能够减少测试的数据量,降低测试内容的重复率,进而提高测试效率。
本申请实施例还提供了一种电子设备,该设备包括处理器以及存储器;
存储器存储有程序;
处理器执行程序以执行图1所示终端设备102的测试方法。
该电子设备具有搭载本申请实施例提供的测试平台并且运行测试平台的功能,例如个人计算机(Personal Computer,PC)、手机、智能手机、个人数字助手(PersonalDigital Assistant,PDA)、可穿戴设备、掌上电脑PPC(Pocket PC)、平板电脑等,参见图11,本申请实施例以终端设备为手机为例:
图11示出的是与本申请实施例提供的终端设备相关的手机的部分结构的框图。参考图11,手机包括:射频(Radio Frequency,简称RF)电路1110、存储器1120、输入单元1130、显示单元1140、传感器1150、音频电路1160、无线保真(wireless fidelity,简称WiFi)模块1170、处理器1180、以及电源1190等部件。本领域技术人员可以理解,图11中示出的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
在本申请实施例中,该终端设备所包括的处理器1190具有以下功能:
对获取的测试指令进行类型解析,确定测试指令为第一测试指令、第二测试指令或者第三测试指令;
响应于第一测试指令,对待测源文件进行第一单元测试,生成第一单元测试结果;第一单元测试结果用于表征待测源文件的代码覆盖率;
响应于第二测试指令,对待测源文件进行第一一体化测试;第一一体化测试包括:对待测源文件进行第二单元测试,若第二单元测试通过,则对待测源文件进行第一变异测试,生成第一一体化测试结果;第一一体化测试结果用于表征待测源文件的代码覆盖率和测试用例有效性;
响应于第三测试指令,确定待测源文件的变更文件,对变更文件进行第二一体化测试,第二一体化测试包括:对变更文件进行第三单元测试,若第三单元测试通过,则对变更文件进行第二变异测试,生成第二一体化测试结果;第二一体化测试结果用于表征变更文件的代码覆盖率和测试用例有效性。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质存储有程序,该程序被处理器执行完成如前述各个实施例所述的测试方法。
本申请实施例还提供一种包括指令的计算机程序产品,当其在计算机上运行时,使得计算机执行前述各个实施例所述的测试方法。
本申请的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括多指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

Claims (15)

1.一种测试方法,其特征在于,包括:
对获取的测试指令进行类型解析,确定所述测试指令为第一测试指令、第二测试指令或者第三测试指令;
响应于所述第一测试指令,对待测源文件进行第一单元测试,生成第一单元测试结果;所述第一单元测试结果用于表征所述待测源文件的代码覆盖率;
响应于所述第二测试指令,对所述待测源文件进行第一一体化测试;所述第一一体化测试包括:对所述待测源文件进行第二单元测试,若所述第二单元测试通过,则对所述待测源文件进行第一变异测试,生成第一一体化测试结果;所述第一一体化测试结果用于表征所述待测源文件的代码覆盖率和测试用例有效性;
响应于所述第三测试指令,确定所述待测源文件的变更文件,对所述变更文件进行第二一体化测试,所述第二一体化测试包括:对所述变更文件进行第三单元测试,若所述第三单元测试通过,则对所述变更文件进行第二变异测试,生成第二一体化测试结果;所述第二一体化测试结果用于表征所述变更文件的代码覆盖率和测试用例有效性。
2.根据权利要求1所述的一种测试方法,其特征在于,所述响应于所述第一测试指令,对待测源文件进行第一单元测试,生成第一单元测试结果包括:
响应于所述第一测试指令;
若所述第一测试指令中包含第一单元测试配置文件的路径,则根据所述第一单元测试配置文件的路径获取所述第一单元测试配置文件,对所述待测源文件进行所述第一单元测试,生成所述第一单元测试结果;
若所述第一测试指令中不包含第一单元测试配置文件的路径,则通过默认单元测试配置文件对所述待测源文件进行所述第一单元测试,生成所述第一单元测试结果。
3.根据权利要求1所述的一种测试方法,其特征在于:所述响应于所述第二测试指令,对所述待测源文件进行第一一体化测试,所述第一一体化测试包括对所述待测源文件进行第二单元测试,若所述第二单元测试通过,则对待测源文件进行第一变异测试,生成第一一体化测试结果,包括:
响应于所述第二测试指令,生成第二单元测试配置文件;
根据所述第二单元测试配置文件对所述待测源文件进行所述第二单元测试;
若所述第二单元测试通过,生成第一变异测试配置文件,对所述待测源文件进行所述第一变异测试,生成所述第一一体化测试结果。
4.根据权利要求3所述的一种测试方法,其特征在于,所述生成第一变异测试配置文件,对所述待测源文件进行所述第一变异测试,生成所述第一一体化测试结果,包括:
若根据所述第二单元测试配置文件或者根据所述第二测试指令获取到所述待测源文件的路径;
根据所述待测源文件的路径生成所述第一变异测试配置文件;
通过所述第一变异测试配置文件对所述待测源文件进行第一变异测试,生成所述第一一体化测试结果。
5.根据权利要求3或4所述的一种测试方法,其特征在于,所述方法还包括以下步骤至少之一:
在所述生成第二单元测试配置文件之前,删除第一备份文件;
在对所述待测源文件进行第一变异测试之后,删除第二备份文件。
6.根据权利要求1所述的一种测试方法,其特征在于,所述确定所述待测源文件的变更文件,对所述变更文件进行第三单元测试,包括:
若所述待测源文件发生变更,确定所述待测源文件的变更文件;
生成所述变更文件的第三单元测试配置文件;
根据所述第三单元测试配置文件,将获取的预执行单元测试文件替换为目标单元测试文件,对所述变更文件进行所述第三单元测试。
7.根据权利要求6所述的一种测试方法,其特征在于,所述根据所述第三单元测试配置文件,将获取的预执行单元测试文件替换为目标单元测试文件,对所述变更文件进行所述第三单元测试,包括:
获取预执行单元测试文件;
若所述预执行单元测试文件与所述第三单元测试配置文件之间存在第一交集,将所述第一交集确定为所述目标单元测试文件;
将所述预执行单元测试文件替换为所述目标单元测试文件,对所述变更文件进行所述第三单元测试。
8.根据权利要求6所述的一种测试方法,其特征在于,所述对所述变更文件进行第二变异测试,包括:
根据所述变更文件,确定目标变异源文件;
生成所述变更文件的第二变异测试配置文件,其中,所述第二变异测试配置文件中配置有预变异源文件;
将所述预变异源文件替换为所述目标变异源文件,对所述变更文件进行所述第二变异测试。
9.根据权利要求8所述的一种测试方法,其特征在于,所述根据所述变更文件,确定目标变异源文件,包括:
获取预变异源文件;
若所述预变异源文件与所述变更文件之间存在第二交集,将所述第二交集确定为所述目标变异源文件。
10.根据权利要求8或9所述的一种测试方法,其特征在于,所述生成第二变异测试配置文件,包括:
若根据所述第三单元测试配置文件或者根据所述第三测试指令获取到所述变更文件的路径;
根据所述变更文件的路径生成所述第二变异测试配置文件。
11.根据权利要求10所述的一种测试方法,其特征在于,所述方法还包括以下步骤至少之一:
在所述生成第三单元测试配置文件之前,删除第三备份文件;
在对所述变更文件进行第二变异测试之后,删除第四备份文件。
12.一种测试平台,其特征在于,包括:
命令解析层,用于对获取的测试指令进行类型解析,确定所述测试指令为第一测试指令、第二测试指令或者第三测试指令;
配置层,用于根据所述测试指令,生成单元测试的配置文件或变异测试的配置文件;
集成层,用于集成单元测试驱动器和变异测试驱动器;
测试驱动层,用于响应所述测试指令,执行以下步骤:
响应于所述第一测试指令,通过所述单元测试驱动器对待测源文件进行第一单元测试,生成第一单元测试结果;所述第一单元测试结果用于表征所述待测源文件的代码覆盖率;
响应于所述第二测试指令,对所述待测源文件进行第一一体化测试;所述第一一体化测试包括:通过所述单元测试驱动器对所述待测源文件进行第二单元测试,若所述第二单元测试通过,则通过所述变异测试驱动器对所述待测源文件进行第一变异测试,生成第一一体化测试结果;所述第一一体化测试结果用于表征所述待测源文件的代码覆盖率和测试用例有效性;
响应于所述第三测试指令,确定所述待测源文件的变更文件,对所述变更文件进行第二一体化测试,所述第二一体化测试包括:通过所述单元测试驱动器对所述变更文件进行第三单元测试,若所述第三单元测试通过,则通过所述变异测试驱动器对所述变更文件进行第二变异测试,生成第二一体化测试结果;所述第二一体化测试结果用于表征所述变更文件的代码覆盖率和测试用例有效性。
13.一种测试装置,其特征在于,包括:
解析模块,用于对获取的测试指令进行类型解析,确定所述测试指令为第一测试指令、第二测试指令或者第三测试指令;
第一测试模块,用于响应于所述第一测试指令,对待测源文件进行第一单元测试,生成第一单元测试结果;所述第一单元测试结果用于表征所述待测源文件的代码覆盖率;
第二测试模块,用于响应于所述第二测试指令,对所述待测源文件进行第一一体化测试,所述第一一体化测试包括:对所述待测源文件进行第二单元测试,若所述第二单元测试通过,则对所述待测源文件进行第一变异测试,生成第一一体化测试结果;所述第一一体化测试结果用于表征所述待测源文件的代码覆盖率和测试用例有效性;
第三测试模块,用于响应于所述第三测试指令,确定所述待测源文件的变更文件,对所述变更文件进行第二一体化测试,所述第二一体化测试包括:对所述变更文件进行第三单元测试,若所述第三单元测试通过,则对所述变更文件进行第二变异测试,生成第二一体化测试结果;所述第二一体化测试结果用于表征所述变更文件的代码覆盖率和测试用例有效性。
14.一种电子设备,其特征在于,包括处理器以及存储器;
所述存储器存储有程序;
所述处理器执行所述程序实现如权利要求1-11中任一项所述的方法。
15.一种计算机可读存储介质,其特征在于,所述存储介质存储有程序,所述程序被处理器执行实现如权利要求1-11中任一项所述的方法。
CN202011336083.3A 2020-11-25 2020-11-25 一种测试方法、平台、装置、电子设备及存储介质 Active CN114546816B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011336083.3A CN114546816B (zh) 2020-11-25 2020-11-25 一种测试方法、平台、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011336083.3A CN114546816B (zh) 2020-11-25 2020-11-25 一种测试方法、平台、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN114546816A true CN114546816A (zh) 2022-05-27
CN114546816B CN114546816B (zh) 2024-07-16

Family

ID=81659944

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011336083.3A Active CN114546816B (zh) 2020-11-25 2020-11-25 一种测试方法、平台、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN114546816B (zh)

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030093716A1 (en) * 2001-11-13 2003-05-15 International Business Machines Corporation Method and apparatus for collecting persistent coverage data across software versions
US20090319832A1 (en) * 2008-06-23 2009-12-24 International Business Machines Corporation Method and apparatus of effective functional test data generation for web service testing
US20130312102A1 (en) * 2012-05-18 2013-11-21 International Business Machines Corporation Verifying application security vulnerabilities
US9280442B1 (en) * 2011-01-27 2016-03-08 Trimble Navigation Limited System and method for generating coverage reports for software unit tests
US20170132116A1 (en) * 2013-03-17 2017-05-11 Typemock Ltd. Methods Circuits Apparatuses Systems and Associated Computer Executable Code for Generating a Software Unit Test
CN108595341A (zh) * 2018-05-11 2018-09-28 清华大学 测试用例自动生成方法及***
CN109032942A (zh) * 2018-07-24 2018-12-18 北京理工大学 一种基于afl的模糊测试框架
CN109213677A (zh) * 2018-07-06 2019-01-15 华东师范大学 基于Android多线程数据依赖的变异测试方法
CN109885479A (zh) * 2019-01-07 2019-06-14 中国人民解放军战略支援部队信息工程大学 基于路径记录截断的软件模糊测试方法及装置
CN110309054A (zh) * 2019-05-22 2019-10-08 平安科技(深圳)有限公司 代码有效性测试方法、计算设备及存储介质
CN110990282A (zh) * 2019-12-04 2020-04-10 中国直升机设计研究所 一种自动化单元测试方法
CN111679977A (zh) * 2020-05-29 2020-09-18 杭州趣链科技有限公司 一种基于Jest的React项目单元测试方法、设备及存储介质

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030093716A1 (en) * 2001-11-13 2003-05-15 International Business Machines Corporation Method and apparatus for collecting persistent coverage data across software versions
US20090319832A1 (en) * 2008-06-23 2009-12-24 International Business Machines Corporation Method and apparatus of effective functional test data generation for web service testing
US9280442B1 (en) * 2011-01-27 2016-03-08 Trimble Navigation Limited System and method for generating coverage reports for software unit tests
US20130312102A1 (en) * 2012-05-18 2013-11-21 International Business Machines Corporation Verifying application security vulnerabilities
US20170132116A1 (en) * 2013-03-17 2017-05-11 Typemock Ltd. Methods Circuits Apparatuses Systems and Associated Computer Executable Code for Generating a Software Unit Test
CN108595341A (zh) * 2018-05-11 2018-09-28 清华大学 测试用例自动生成方法及***
CN109213677A (zh) * 2018-07-06 2019-01-15 华东师范大学 基于Android多线程数据依赖的变异测试方法
CN109032942A (zh) * 2018-07-24 2018-12-18 北京理工大学 一种基于afl的模糊测试框架
CN109885479A (zh) * 2019-01-07 2019-06-14 中国人民解放军战略支援部队信息工程大学 基于路径记录截断的软件模糊测试方法及装置
CN110309054A (zh) * 2019-05-22 2019-10-08 平安科技(深圳)有限公司 代码有效性测试方法、计算设备及存储介质
CN110990282A (zh) * 2019-12-04 2020-04-10 中国直升机设计研究所 一种自动化单元测试方法
CN111679977A (zh) * 2020-05-29 2020-09-18 杭州趣链科技有限公司 一种基于Jest的React项目单元测试方法、设备及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
腾讯移动品质中心: "看点信息流Go后台单元测试有效性提升", pages 1 - 19, Retrieved from the Internet <URL:《https://cloud.tencent.com/developer/article/1749146》> *

Also Published As

Publication number Publication date
CN114546816B (zh) 2024-07-16

Similar Documents

Publication Publication Date Title
CN109901834B (zh) 文档页面生成方法、装置、计算机设备和存储介质
US9009183B2 (en) Transformation of a system change set from machine-consumable form to a form that is readily consumable by a human
CN108459964B (zh) 测试用例选择方法、装置、设备以及计算机可读存储介质
CN107239392B (zh) 一种测试方法、装置、终端及存储介质
CN112270149B (zh) 验证平台自动化集成方法、***及电子设备和存储介质
CN113127347B (zh) 一种接口测试方法、装置、设备及可读存储介质
CN107451112B (zh) 表格工具数据检查方法、装置、终端设备及存储介质
CN110944048A (zh) 业务逻辑配置方法及装置
CN108763094B (zh) 测试用例生成方法、装置、设备及存储介质
CN108388515A (zh) 测试数据生成方法、装置、设备以及计算机可读存储介质
CN112527382B (zh) 部署流水线引擎***的方法、持续集成的方法及装置
CN110580189A (zh) 生成前端页面的方法、装置、计算机设备以及存储介质
CN110569194A (zh) 接口测试方法、装置、电子设备及存储介质
CN117875288A (zh) 一种表单页面生成方法、装置及电子设备
CN108228611B (zh) 单据信息抄写方法和装置
CN111143228B (zh) 基于决策表法的测试代码生成方法及装置
US11960390B2 (en) Test apparatus, test method and program
CN114546816B (zh) 一种测试方法、平台、装置、电子设备及存储介质
CN113656022B (zh) 软件开发方法、装置、计算机设备和存储介质
CN115599683A (zh) 自动化测试方法、装置、设备及存储介质
CN114546850A (zh) 一种埋点的自动化测试方法、***、装置及存储介质
CN114721681A (zh) 配置文件更新方法、装置、设备及存储介质
US20120204159A1 (en) Methods and System for Managing Assets in Programming Code Translation
US10635573B2 (en) Auto-generated multiple input variants
JP2023000907A (ja) ソースコード修正支援装置及びソースコード修正支援方法

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