CN103218287A - 用于对hadoop streaming脚本进行测试的方法及装置 - Google Patents

用于对hadoop streaming脚本进行测试的方法及装置 Download PDF

Info

Publication number
CN103218287A
CN103218287A CN2012100195602A CN201210019560A CN103218287A CN 103218287 A CN103218287 A CN 103218287A CN 2012100195602 A CN2012100195602 A CN 2012100195602A CN 201210019560 A CN201210019560 A CN 201210019560A CN 103218287 A CN103218287 A CN 103218287A
Authority
CN
China
Prior art keywords
task
script
source code
test
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.)
Granted
Application number
CN2012100195602A
Other languages
English (en)
Other versions
CN103218287B (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.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201210019560.2A priority Critical patent/CN103218287B/zh
Publication of CN103218287A publication Critical patent/CN103218287A/zh
Application granted granted Critical
Publication of CN103218287B publication Critical patent/CN103218287B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)

Abstract

本发明提出一种用于对hadoop streaming脚本进行测试的方法及装置,根据本发明实施例的方法包括步骤:按行读取脚本的任务调度文件以获取脚本中的任务的任务名称和任务类型;如果任务类型是单机任务,则根据任务名称以及脚本的任务描述文件提取与任务对应的源代码的路径;根据源代码的路径提取源代码并对源代码进行扫描以生成与任务对应的测试case;以及使用测试case对hadoop streaming脚本进行测试。该方法可以降低对hadoop streaming脚本的测试难度,并且提高了测试效率。

Description

用于对hadoop streaming脚本进行测试的方法及装置
技术领域
本发明涉及分布式测试领域,尤其涉及一种用于对hadoop streaming脚本进行测试的方法及装置。
背景技术
随着分布式计算技术的推广,越来越多的大数据计算任务迁移到hadoop平台上进行。hadoop streaming是hadoop平台的一个工具,用于帮助用户创建和运行一类特殊的map/reduce作业,这些特殊的map/reduce作业是由一些可执行文件或脚本文件充当mapper或者reducer,mapper和reducer从标准输入逐行读入数据,并把计算结果发给标准输出。streaming工具会创建一个map/reduce作业,并把它发送给合适的集群,同时监视这个作业的整个执行过程。
hadoop streaming脚本的测试,通常需要单独验证map脚本的逻辑、单独验证reduce脚本的逻辑、验证partition分桶正确性、验证sort、验证排序、完整验证整轮map/reduce程序等。
对hadoop streaming脚本进行测试,业界使用的传统的单元测试框架工具主要包括shunit和shunit2两种。其中,shunit是针对shell脚本的单元测试框架,shunit2是适用于shell脚本的xUnit单元测试框架,与JUnit,PyUnit类似。shunit和shunit2这两种工具有如下缺点:case可读性差,不便于维护;对数据的生成和检查支持不够;可扩展性差,如将报告转为xml格式、断言失败时返回等,极不方便。
发明内容
本发明旨在至少解决上述技术问题之一。
为此,本发明的一个目的在于提出一种测试难度小、测试效率高的用于对hadoopstreaming脚本进行测试的方法。
本发明的另一目的在于提出一种用于对hadoop streaming脚本进行测试的装置。
为了实现上述目的,根据本发明的第一方面实施例的用于对hadoop streaming脚本进行测试的方法包括以下步骤:A.按行读取所述脚本的任务调度文件以获取所述脚本中的任务的任务名称和任务类型;B.如果所述任务类型是单机任务,则根据所述任务名称以及所述脚本的任务描述文件提取与所述任务对应的源代码的路径;C.根据所述源代码的路径提取所述源代码并对所述源代码进行扫描以生成与所述任务对应的测试case;以及D.使用所述测试case对所述hadoop streaming脚本进行测试。
根据本发明实施例的用于对hadoop streaming脚本进行测试的方法,可以自动生成脚本测试case,case框架保持一致,便于传承;可以实现完全自动化的case调度;降低了测试难度,提高了测试效率。
为了实现上述目的,根据本发明的第二方面实施例的用于对hadoop streaming脚本进行测试的装置包括:读取模块,所述读取模块用于按行读取所述脚本的任务调度文件以获取所述脚本中的任务的任务名称和任务类型;提取模块,所述提取模块用于在所述任务类型是单机任务时,根据所述任务名称以及所述脚本的任务描述文件提取与所述任务对应的源代码的路径;生成模块,所述生成模块用于根据所述源代码的路径提取所述源代码并对所述源代码进行扫描以生成与所述任务对应的测试case;以及测试模块,所述测试模块用于使用所述测试case对所述hadoop streaming脚本进行测试。
根据本发明实施例的用于对hadoop streaming脚本进行测试的装置,可以自动生成脚本测试case,case框架保持一致,便于传承;可以实现完全自动化的case调度,对hadoop streaming脚本的测试难度较小,测试效率较高。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中,
图1是根据本发明一个实施例的用于对hadoop streaming脚本进行测试的方法的流程图;
图2是根据本发明一个实施例的用于对hadoop streaming脚本进行测试的方法的流程图;
图3是根据本发明一个实施例的用于对hadoop streaming脚本进行测试的方法的流程图;
图4是根据本发明一个实施例的用于对hadoop streaming脚本进行测试的装置的结构框图;以及
图5是根据本发明一个实施例的用于对hadoop streaming脚本进行测试的装置的结构框图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。
在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
脚本测试框架分为三层:总控层,case调度层和case执行层。为了便于case自动生成,需要被测脚本模块提供两个文件:任务调度文件和任务描述文件。任务调度文件描述了被测脚本模块由哪些任务组成,以及任务的执行序列。其中,任务是被测脚本模块执行的基本单位,包含两种类型:分布式、单机。任务描述文件定义各个任务具体的一些参数。如果是单机任务,定义执行命令即可;如果是分布式任务,需要定义该任务的输入、输出、partition方式、map执行命令、reduce执行命令等。随后抽象出脚本测试的常用操作,形成case。case调度层依次获取任务调度文件中的一个任务交给case执行层;case执行层收到case调度层的请求后,首先分析改任务包含多少个case,依次执行该任务的各个case,并监控case的执行状态,记录case的执行结果,生成测试报告等。
下面参考说明书附图描述根据本发明实施例的用于对hadoop streaming脚本进行测试的方法。
一种用于对hadoop streaming脚本进行测试的方法,包括以下步骤:A.按行读取脚本的任务调度文件以获取脚本中的任务的任务名称和任务类型;B.如果任务类型是单机任务,则根据任务名称以及脚本的任务描述文件提取与任务对应的源代码的路径;C.根据源代码的路径提取源代码并对源代码进行扫描以生成与任务对应的测试case;以及D.使用测试case对hadoop streaming脚本进行测试。
图1为根据本发明一个实施例的用于对hadoop streaming脚本进行测试的方法的流程图。
如图1所示,根据本发明实施例的用于对hadoop streaming脚本进行测试的方法包括下述步骤。
步骤S101,按行读取脚本的任务调度文件以获取脚本中的任务的任务名称和任务类型。任务调度文件描述了被测脚本模块由哪些任务组成,以及任务的执行序列。
具体地,从第一行开始读取脚本的任务调度文件;判断第一行是否为注释行或空白行;如果是,则跳过第一行并读取第二行;以及如果否,则获取第一行中的任务的任务名称和任务类型。
步骤S102,如果任务类型是单机任务,则根据任务名称以及脚本的任务描述文件提取与任务对应的源代码的路径。任务描述文件定义各个任务具体的一些参数。
具体地,根据任务描述文件中对相应任务的描述得到获取源代码的路径。
步骤S103,根据源代码的路径提取源代码并对源代码进行扫描以生成与任务对应的测试case。
具体地,如果源代码中存在函数,则为每一个函数生成一个测试case。如果源代码中不存在函数,则为源代码生成一个测试case。
在本发明的一个实施例中,对源代码进行扫描,生成本次任务所对应的测试case的具体过程为:扫描脚本中的函数,每一个函数均生成一个对应的测试case,case在执行过程中捕获了该函数在执行时的返回值、标准错误输入、标准输出等,并提供各种断言函数辅助结果的验证;如果该脚本不存在函数,则为该脚本生成一个测试case,同样,case在执行过程中捕获了该脚本在执行时的返回值、标准错误输入、标准输出等,并提供各种断言函数辅助结果的验证,由此生成了单机任务对应的测试case。
步骤S104,使用测试case对hadoop streaming脚本进行测试。
具体地,依照步骤S103生成的测试case对hadoop streaming脚本进行测试,进行自动化的case调度,自动监控case的执行状态,记录case的执行结果,并在所有case执行完毕后,自动生成测试报告等。
根据本发明实施例的用于对hadoop streaming脚本进行测试的方法,可以自动生成脚本测试case,case框架保持一致,便于传承;可以实现完全自动化的case调度;降低了测试难度,提高了测试效率可适用于单机shell脚本程序,通用性较好。
图2为根据本发明一个实施例的用于对hadoop streaming脚本进行测试的方法的流程图。
如图2所示,根据本发明实施例的用于对hadoop streaming脚本进行测试的方法包括下述步骤。
步骤S201,按行读取脚本的任务调度文件以获取脚本中的任务的任务名称和任务类型。任务调度文件描述了被测脚本模块由哪些任务组成,以及任务的执行序列。
具体地,从第一行开始读取脚本的任务调度文件;判断第一行是否为注释行或空白行;如果是,则跳过第一行并读取第二行;以及如果否,则获取第一行中的任务的任务名称和任务类型。
步骤S202,如果任务类型是单机任务,则根据任务名称以及脚本的任务描述文件提取与任务对应的源代码的路径。任务描述文件定义各个任务具体的一些参数。
具体地,根据任务描述文件中对相应任务的描述得到获取源代码的路径。
步骤S203,根据源代码的路径提取源代码并对源代码进行扫描以生成与任务对应的测试case。
具体地,如果源代码中存在函数,则为每一个函数生成一个测试case。如果源代码中不存在函数,则为源代码生成一个测试case。
在本发明的一个实施例中,对源代码进行扫描,生成本次任务所对应的测试case的具体过程为:扫描脚本中的函数,每一个函数均生成一个对应的测试case,case在执行过程中捕获了该函数在执行时的返回值、标准错误输入、标准输出等,并提供各种断言函数辅助结果的验证;如果该脚本不存在函数,则为该脚本生成一个测试case,同样,case在执行过程中捕获了该脚本在执行时的返回值、标准错误输入、标准输出等,并提供各种断言函数辅助结果的验证,由此生成了单机任务对应的测试case。
步骤S204,如果任务类型是分布式任务,则根据任务名称以及脚本的任务描述文件获取与任务对应的描述。
在本发明的一个实施例中,该描述包括输入地址,输出地址,partition参数,需要上传的文件,map命令,reduce命令等信息。
需要指出的是,步骤S202和步骤S204是在流程图上是平行的二选一的关系。在完成步骤S201之后,根据任务类型的不同,选择进入不同的步骤。如果任务类型是单机任务则进入步骤S202,如果任务类型是分布式任务则进入步骤S204。
步骤S205,如果描述中包括map命令或reduce命令,则提取map命令或reduce命令对应的源代码进行扫描以生成与map命令或reduce命令对应的测试case。
在本发明的一个实施例中,如果该任务包括map命令,则提取出其所对应的map源代码文件,进行扫描生成一个case,该case用于单独验证map程序。具体步骤包括:将测试数据上传至输入地址;备份任务描述文件;将reduce命令设置为空,使得可以解惑map的产出;调用hadoop streaming进行执行并根据输出地址将执行结果输出;以及将任务描述文件还原。
在本发明的另一个实施例中,如果该任务包括reduce命令,则提取出其所对应的reduce源代码文件,进行扫描生成一个case,该case用于单独验证reduce程序。具体步骤包括:将测试数据上传至输入地址;备份任务描述文件;将map命令设置为空;调用hadoop streaming进行执行并根据输出地址将执行结果输出;以及将任务描述文件还原。
步骤S206,使用测试case对hadoop streaming脚本进行测试。
具体地,使用步骤S203生成的测试case和/或步骤S205生成的测试case对hadoopstreaming脚本进行测试,进行自动化的case调度,自动监控case的执行状态,记录case的执行结果,并在所有case执行完毕后,自动生成测试报告等。
在上述实施例中,增加步骤S204与步骤S205使得本发明实施例的用于对hadoopstreaming脚本进行测试的方法适用于分布式任务的hadoop streaming脚本的检测,降低了测试难度,提高了测试效率。
图3为根据本发明一个实施例的用于对hadoop streaming脚本进行测试的方法的流程图。
如图3所示,根据本发明实施例的用于对hadoop streaming脚本进行测试的方法包括下述步骤。
步骤S301,按行读取脚本的任务调度文件以获取脚本中的任务的任务名称和任务类型。任务调度文件描述了被测脚本模块由哪些任务组成,以及任务的执行序列。
具体地,从第一行开始读取脚本的任务调度文件;判断第一行是否为注释行或空白行;如果是,则跳过第一行并读取第二行;以及如果否,则获取第一行中的任务的任务名称和任务类型。
步骤S302,如果任务类型是单机任务,则根据任务名称以及脚本的任务描述文件提取与任务对应的源代码的路径。任务描述文件定义各个任务具体的一些参数。
具体地,根据任务描述文件中对相应任务的描述得到获取源代码的路径。
步骤S303,根据源代码的路径提取源代码并对源代码进行扫描以生成与任务对应的测试case。
具体地,如果源代码中存在函数,则为每一个函数生成一个测试case。如果源代码中不存在函数,则为源代码生成一个测试case。
在本发明的一个实施例中,对源代码进行扫描,生成本次任务所对应的测试case的具体过程为:扫描脚本中的函数,每一个函数均生成一个对应的测试case,case在执行过程中捕获了该函数在执行时的返回值、标准错误输入、标准输出等,并提供各种断言函数辅助结果的验证;如果该脚本不存在函数,则为该脚本生成一个测试case,同样,case在执行过程中捕获了该脚本在执行时的返回值、标准错误输入、标准输出等,并提供各种断言函数辅助结果的验证,由此生成了单机任务对应的测试case。
步骤S304,如果任务类型是分布式任务,则根据任务名称以及脚本的任务描述文件获取与任务对应的描述。
在本发明的一个实施例中,该描述包括输入地址,输出地址,partition参数,需要上传的文件,map命令,reduce命令等信息。
需要指出的是,步骤S302和步骤S304是在流程图上是平行的二选一的关系。在完成步骤S301之后,根据任务类型的不同,选择进入不同的步骤。如果任务类型是单机任务则进入步骤S302,如果任务类型是分布式任务则进入步骤S304。
步骤S305,如果描述中包括map命令或reduce命令,则提取map命令或reduce命令对应的源代码进行扫描以生成与map命令或reduce命令对应的测试case。
在本发明的一个实施例中,如果该任务包括map命令,则提取出其所对应的map源代码文件,进行扫描生成一个case,该case用于单独验证map程序。具体步骤包括:将测试数据上传至输入地址;备份任务描述文件;将reduce命令设置为空,使得可以解惑map的产出;调用hadoop streaming进行执行并根据输出地址将执行结果输出;以及将任务描述文件还原。
在本发明的另一个实施例中,如果该任务包括reduce命令,则提取出其所对应的reduce源代码文件,进行扫描生成一个case,该case用于单独验证reduce程序。具体步骤包括:将测试数据上传至输入地址;备份任务描述文件;将map命令设置为空;调用hadoop streaming进行执行并根据输出地址将执行结果输出;以及将任务描述文件还原。
步骤S306,如果描述中包含partition参数,则生成用于测试partition参数的测试case。
具体地,根据S304中获取的描述中的partition参数,生成一个用于单独验证partition的正确性的case。具体步骤包括:将测试数据上传至输入地址;备份任务描述文件;将reduce命令设置为cat;调用hadoop streaming进行执行并根据输出地址将执行结果输出;以及将任务描述文件还原。其中将reduce命令设置为cat能使得map的产出按照指定的partition进行分桶,通过cat的结果,便能验证各个桶中的数据是否符合partition的预期。
步骤S307,使用测试case对hadoop streaming脚本进行测试。
具体地,依照步骤S303生成的测试case和/或步骤S306生成的测试case对hadoopstreaming脚本进行测试,进行自动化的case调度,自动监控case的执行状态,记录case的执行结果,并在所有case执行完毕后,自动生成测试报告等。上述实施例中考虑了任务对应的描述包含partition的情况,并提出了相应技术方案,以使本发明的测试方法适用于包含partition的分布式任务的hadoop streaming脚本的检测,降低了测试难度,提高了测试效率。
根据本发明实施例的用于对hadoop streaming脚本进行测试的方法,可以生成单独用于map或reduce的测试case,也可以生成单独用于partition参数的测试case,从而也可以对整轮map/reduce任务进行测试。
根据本发明实施例的用于对hadoop streaming脚本进行测试的装置包括:读取模块,读取模块用于按行读取脚本的任务调度文件以获取脚本中的任务的任务名称和任务类型;提取模块,提取模块用于在任务类型是单机任务时,根据任务名称以及脚本的任务描述文件提取与任务对应的源代码的路径;生成模块,生成模块用于根据源代码的路径提取源代码并对源代码进行扫描以生成与任务对应的测试case;以及测试模块,测试模块用于使用测试case对hadoop streaming脚本进行测试。
图4是根据本发明一个实施例的用于对hadoop streaming脚本进行测试的装置的结构框图。
如图4所示,根据本发明实施例的用于对hadoop streaming脚本进行测试的装置,包括读取模块1、提取模块2、生成模块3和测试模块4。
其中,读取模块1用于按行读取脚本的任务调度文件以获取脚本中的任务的任务名称和任务类型。任务调度文件描述了被测脚本模块由哪些任务组成,以及任务的执行序列。
具体地,读取模块1从第一行开始读取脚本的任务调度文件;判断第一行是否为注释行或空白行;如果是,则跳过第一行并读取第二行;以及如果否,则获取第一行中的任务的任务名称和任务类型。
提取模块2与读取模块1相连,用于在任务类型是单机任务时,根据任务名称以及脚本的任务描述文件提取与任务对应的源代码的路径。任务描述文件定义各个任务具体的一些参数。
具体地,根据任务描述文件中对相应任务的描述得到获取源代码的路径。
生成模块3与提取模块2相连,用于根据源代码的路径提取源代码并对源代码进行扫描以生成与任务对应的测试case。
具体地,在源代码中存在函数时,为每一个函数生成一个测试case。在源代码中不存在函数时,为源代码生成一个测试case。
在本发明的一个实施例中,生成模块3对源代码进行扫描,生成本次任务所对应的测试case的具体过程为:扫描脚本中的函数,每一个函数均生成一个对应的测试case,case在执行过程中捕获了该函数在执行时的返回值、标准错误输入、标准输出等,并提供各种断言函数辅助结果的验证;如果该脚本不存在函数,则为该脚本生成一个测试case,同样,case在执行过程中捕获了该脚本在执行时的返回值、标准错误输入、标准输出等,并提供各种断言函数辅助结果的验证,由此生成了单机任务对应的测试case。
测试模块4与生成模块3相连,用于使用测试case对hadoop streaming脚本进行测试。
测试模块4可以进行自动化的case调度,自动监控case的执行状态,记录case的执行结果,并在所有case执行完毕后,自动生成测试报告等。
根据本发明实施例的用于对hadoop streaming脚本进行测试的装置,可以自动生成脚本测试case,case框架保持一致,便于传承;可以实现完全自动化的case调度;,对hadoop streaming脚本的测试难度较小,测试效率较高,可适用于单机shell脚本程序,通用性较好。
图5是根据本发明一个实施例的用于对hadoop streaming脚本进行测试的装置的结构框图。
如图5所示,根据本发明实施例的用于对hadoop streaming脚本进行测试的装置,包括读取模块1’、提取模块2’、生成模块3’和测试模块4’。
对比图5与图4可知,本实施例的测试装置包括的模块与上一实施例的装置包括的模块相同,但各个模块间的内在联系以及各个模块的作用有所不同。
本实施例中,读取模块1’用于按行读取脚本的任务调度文件以获取脚本中的任务的任务名称和任务类型。任务调度文件描述了被测脚本模块由哪些任务组成,以及任务的执行序列。
具体地,读取模块1’从第一行开始读取脚本的任务调度文件;判断第一行是否为注释行或空白行;如果是,则跳过第一行并读取第二行;以及如果否,则获取第一行中的任务的任务名称和任务类型。
提取模块2’与读取模块1’相连,根据不同的任务类型,提取不同的信息。具体地,当任务类型是单机任务时,提取模块2’根据任务名称以及脚本的任务描述文件提取与任务对应的源代码的路径;当任务类型是分布式任务时,提取模块2’根据任务名称以及脚本的任务描述文件提取与任务对应的描述,其中,描述包括输入地址,输出地址,partition参数,需要上传的文件,map命令,reduce命令等。
生成模块3’与提取模块2’相连,用于根据源代码的路径提取源代码并对源代码进行扫描以生成与任务对应的测试case。具体地,在源代码中存在函数时,为每一个函数生成一个测试case;以及在源代码中不存在函数时,为源代码生成一个测试case。
在本发明的一个实施例中,生成模块3’对源代码进行扫描,生成本次任务所对应的测试case的具体过程为:扫描脚本中的函数,每一个函数均生成一个对应的测试case,case在执行过程中捕获了该函数在执行时的返回值、标准错误输入、标准输出等,并提供各种断言函数辅助结果的验证;如果该脚本不存在函数,则为该脚本生成一个测试case,同样,case在执行过程中捕获了该脚本在执行时的返回值、标准错误输入、标准输出等,并提供各种断言函数辅助结果的验证,由此生成了单机任务对应的测试case。在本发明的一个实施例中,如果描述中包括map命令或reduce命令,生成模块3’还用于对提取的与map命令或reduce命令对应的源代码进行扫描以生成与map命令或reduce命令对应的测试case。
在本发明的一个实施例中,如果描述中包含partition参数,生成模块3’还用于生成用于测试partition参数的测试case。
测试模块4’与生成模块3’相连,用于使用测试case对hadoop streaming脚本进行测试。测试模块4可以进行自动化的case调度,自动监控case的执行状态,记录case的执行结果,并在所有case执行完毕后,自动生成测试报告等。
在本发明的一个实施例中,如果描述包括map命令或reduce命令,则测试模块4’还用于将测试数据上传至输入地址;备份任务描述文件;将map命令或reduce命令设置为空;调用hadoop streaming进行执行并根据输出地址将执行结果输出;以及将任务描述文件还原。
在本发明的一个实施例中,如果描述中包含partition参数,则测试模块4’还用于将测试数据上传至输入地址;备份任务描述文件;将reduce命令设置为cat;调用hadoopstreaming进行执行并根据输出地址将执行结果输出;以及将任务描述文件还原。
根据本发明实施例的测试装置,可以生成单独用于map或reduce的测试case,也可以生成单独用于partition参数的测试case,从而也可以对整轮map/reduce任务进行测试。
根据本发明实施例的测试装置,还可以测试含有map命令或reduce命令或partition参数的脚本,case框架保持一致,便于传承,对hadoop streaming脚本的测试难度较小,测试效率较高。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同限定。

Claims (16)

1.一种用于对hadoop streaming脚本进行测试的方法,其特征在于,包括以下步骤:
A.按行读取所述脚本的任务调度文件以获取所述脚本中的任务的任务名称和任务类型;
B.如果所述任务类型是单机任务,则根据所述任务名称以及所述脚本的任务描述文件提取与所述任务对应的源代码的路径;
C.根据所述源代码的路径提取所述源代码并对所述源代码进行扫描以生成与所述任务对应的测试case;以及
D.使用所述测试case对所述hadoop streaming脚本进行测试。
2.根据权利要求1所述的方法,其特征在于,进一步包括步骤:
E.如果所述任务类型是分布式任务,则根据所述任务名称以及所述脚本的任务描述文件获取与所述任务对应的描述;以及
F.如果所述描述中包括map命令或reduce命令,则提取所述map命令或所述reduce命令对应的源代码进行扫描以生成与所述map命令或所述reduce命令对应的测试case。
3.根据权利要求2所述的方法,其特征在于,进一步包括步骤:
如果所述描述中包含partition参数,则生成用于测试所述partition参数的测试case。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述步骤A包括:
从第一行开始读取所述脚本的任务调度文件;
判断所述第一行是否为注释行或空白行;
如果是,则跳过所述第一行并读取第二行;以及
如果否,则获取所述第一行中的任务的任务名称和任务类型。
5.根据权利要求1至3中任一项所述的方法,其特征在于,所述步骤C包括:
如果所述源代码中存在函数,则为每一个函数生成一个测试case;以及
如果所述源代码中不存在函数,则为所述源代码生成一个测试case。
6.根据权利要求2或3所述的方法,其特征在于,所述描述包括输入地址,输出地址,partition参数,需要上传的文件,map命令,reduce命令。
7.根据权利要求6所述的方法,其特征在于,所述步骤D包括:
将测试数据上传至所述输入地址;
备份所述任务描述文件;
将所述reduce命令或所述map命令设置为空;
调用hadoop streaming进行执行并根据所述输出地址将执行结果输出;以及
将所述任务描述文件还原。
8.根据权利要求6所述的方法,其特征在于,所述步骤D包括:
将测试数据上传至所述输入地址;
备份所述任务描述文件;
将所述reduce命令设置为cat;
调用hadoop streaming进行执行并根据所述输出地址将执行结果输出;以及
将所述任务描述文件还原。
9.一种用于对hadoop streaming脚本进行测试的装置,其特征在于,包括:
读取模块,所述读取模块用于按行读取所述脚本的任务调度文件以获取所述脚本中的任务的任务名称和任务类型;
提取模块,所述提取模块用于在所述任务类型是单机任务时,根据所述任务名称以及所述脚本的任务描述文件提取与所述任务对应的源代码的路径;
生成模块,所述生成模块用于根据所述源代码的路径提取所述源代码并对所述源代码进行扫描以生成与所述任务对应的测试case;以及
测试模块,所述测试模块用于使用所述测试case对所述hadoop streaming脚本进行测试。
10.根据权利要求9所述的装置,其特征在于:
所述提取模块用于在所述任务类型是分布式任务时,根据所述任务名称以及所述脚本的任务描述文件提取与所述任务对应的描述;以及
所述生成模块用于在所述描述中包括map命令或reduce命令时,提取所述map命令或所述reduce命令对应的源代码进行扫描以生成与所述map命令或所述reduce命令对应的测试case。
11.根据权利要求10所述的装置,其特征在于:
所述生成模块用于在所述描述中包含partition参数时,生成用于测试所述partition参数的测试case。
12.根据权利要求8至11中任一项所述的装置,其特征在于,所述读取模块用于:
从第一行开始读取所述脚本的任务调度文件;
判断所述第一行是否为注释行或空白行;
如果是,则跳过所述第一行并读取第二行;以及
如果否,则获取所述第一行中的任务的任务名称和任务类型。
13.根据权利要求8至11中任一项所述的装置,其特征在于,所述生成模块用于:
在所述源代码中存在函数时,为每一个函数生成一个测试case;以及
在所述源代码中不存在函数时,为所述源代码生成一个测试case。
14.根据权利要求9或10所述的装置,其特征在于,所述描述包括输入地址,输出地址,partition参数,需要上传的文件,map命令,reduce命令。
15.根据权利要求14所述的装置,其特征在于,所述测试模块用于:
将测试数据上传至所述输入地址;
备份所述任务描述文件;
将所述reduce命令或所述map命令设置为空;
调用hadoop streaming进行执行并根据所述输出地址将执行结果输出;以及
将所述任务描述文件还原。
16.根据权利要求14所述的装置,其特征在于,所述测试模块用于:
将测试数据上传至所述输入地址;
备份所述任务描述文件;
将所述reduce命令设置为cat;
调用hadoop streaming进行执行并根据所述输出地址将执行结果输出;以及
将所述任务描述文件还原。
CN201210019560.2A 2012-01-20 2012-01-20 用于对hadoop streaming脚本进行测试的方法及装置 Active CN103218287B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210019560.2A CN103218287B (zh) 2012-01-20 2012-01-20 用于对hadoop streaming脚本进行测试的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210019560.2A CN103218287B (zh) 2012-01-20 2012-01-20 用于对hadoop streaming脚本进行测试的方法及装置

Publications (2)

Publication Number Publication Date
CN103218287A true CN103218287A (zh) 2013-07-24
CN103218287B CN103218287B (zh) 2016-03-16

Family

ID=48816106

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210019560.2A Active CN103218287B (zh) 2012-01-20 2012-01-20 用于对hadoop streaming脚本进行测试的方法及装置

Country Status (1)

Country Link
CN (1) CN103218287B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110457902A (zh) * 2019-06-25 2019-11-15 平安银行股份有限公司 银行系统的静态源代码扫描方法、装置及计算机存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101719096A (zh) * 2009-12-29 2010-06-02 北京航空航天大学 一种提高实时嵌入式系统测试脚本执行速度的方法
CN101833498A (zh) * 2009-07-31 2010-09-15 北京伟晨豪嘉科技有限责任公司 一种基于测试脚本技术的嵌入式系统自动化检测系统
CN101996250A (zh) * 2010-11-15 2011-03-30 中国科学院计算技术研究所 一种基于Hadoop的海量流数据存储和查询方法及系统
US8296743B2 (en) * 2007-12-17 2012-10-23 Intel Corporation Compiler and runtime for heterogeneous multiprocessor systems

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8296743B2 (en) * 2007-12-17 2012-10-23 Intel Corporation Compiler and runtime for heterogeneous multiprocessor systems
CN101833498A (zh) * 2009-07-31 2010-09-15 北京伟晨豪嘉科技有限责任公司 一种基于测试脚本技术的嵌入式系统自动化检测系统
CN101719096A (zh) * 2009-12-29 2010-06-02 北京航空航天大学 一种提高实时嵌入式系统测试脚本执行速度的方法
CN101996250A (zh) * 2010-11-15 2011-03-30 中国科学院计算技术研究所 一种基于Hadoop的海量流数据存储和查询方法及系统

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110457902A (zh) * 2019-06-25 2019-11-15 平安银行股份有限公司 银行系统的静态源代码扫描方法、装置及计算机存储介质

Also Published As

Publication number Publication date
CN103218287B (zh) 2016-03-16

Similar Documents

Publication Publication Date Title
CN103150249B (zh) 一种自动化测试的方法和系统
CN103631720B (zh) 测试用例的生成方法和装置
CN106339312A (zh) Api测试方法和系统
US9466087B2 (en) Meter data management testing
Tosun et al. Practical considerations in deploying ai for defect prediction: a case study within the turkish telecommunication industry
CN103425572A (zh) 代码分析方法及代码分析系统
CN110297760A (zh) 测试数据的构造方法、装置、设备及计算机可读存储介质
CN110321292A (zh) 芯片测试方法、装置、电子设备及计算机可读存储介质
CN112433944A (zh) 业务测试方法、装置、计算机设备和存储介质
CN111679977B (zh) 一种基于Jest的React项目单元测试方法、设备及存储介质
CN103942140A (zh) 一种测试程序自动转换方法
CN103218297A (zh) 测试数据的筛选方法及装置
CN114996127A (zh) 固态硬盘固件模块智能化测试方法及系统
Tsai et al. Adaptive fault detection for testing tenant applications in multi-tenancy saas systems
CN111240974A (zh) 日志输出方法、装置、电子设备及介质
CN108874662A (zh) 测试方法和存储程序的非暂态计算机可读介质
CN103218287A (zh) 用于对hadoop streaming脚本进行测试的方法及装置
JP4702194B2 (ja) プログラム開発支援装置、プログラム開発支援方法およびプログラム開発支援プログラム
CN102004660A (zh) 一种业务流程的实现方法及装置
CN109960654A (zh) 定损规则的测试方法、装置、设备及存储介质
CN106933713B (zh) 硬件加速器的验证方法和验证系统
CN113485919A (zh) 测试方法、测试装置及计算机可读存储介质
CN102788952B (zh) 芯片测试方法
CN112214201A (zh) 车机系统底层接口认证的方法、装置、设备及存储介质
CN103593284A (zh) 一种测试方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant