def run(input_suite_addr: str, project_id: str, version_num: int, bf_type: str, output_addr: str, suite_src: str = "not manual"): """ :param input_suite_addr: 输入测试用例的地址 :param project_id: 项目名(如Lang) Generate tests for this project id. See Project module for available project IDs. :param version_num: 版本号 数字 :param bf_type: f或者b(代表fixed和buggy) :param output_addr: 生成checkout的保存路径 :param suite_src: 使用的测试用例生成工具(randoop或者evosuite) :return:testcase_addr 生成的测试用例地址 """ if not check_proj_args(project_id, version_num, bf_type): sys.stderr.write("interface/bash/Defects4jGenTestcase.py:项目参数验证不通过") return None else: # 注意 必须要在一个新的文件夹(checkout)中进行checkout操作 否则不成功 checkout_addr = output_addr + os.sep + "checkout" file_helper.check_path_exists(checkout_addr) cmd = ["bash", # "-x", BASH_DEFECT4J_MUTATION, DEFECTS4J_ADD_PATH_FILE, # $1 DEFECTS4J_PRE_INCLUDE_FILE_ADDR, # $2 project_id, # $3 str(version_num), # $4 bf_type, # 5 checkout_addr, # $6 input_suite_addr, # $7 suite_src, # $8 ] # print(" ".join(cmd)) sub_call_hook.serial(cmd)
def run(inputFileAddr: str, outputFileAddr: str, javaagentArgs: str, outputErrPath: str, outputAlltestPath: str): """ interface for sqslab.ecnu.edu.util.AntBuildFileEditor :param outputAlltestPath: :param inputFileAddr: :param outputFileAddr: :param javaagentArgs: :param outputErrPath: :return: """ cmd = [ JVM, "-cp", JAR_CLASSPATH, JAR_CLASS_ANT_BUILD_FILE_EDITOR, "-i", inputFileAddr, "-o", outputFileAddr, "-a", javaagentArgs, "-e", outputErrPath, "-t", outputAlltestPath ] # print(" ".join(cmd)) sub_call_hook.serial(cmd)
def run(output_addr: str, checkout_addr: str, testsuite_addr: str, build_file: str): """ defects4j test_diy 将会产生 ant 日志 从ant日志中 分析出 junit日志 作为输出 :param output_addr: junit日志输出地址 Generate tests for this project id. See Project module for available project IDs. :param checkout_addr: 项目checkout的路径 :param testsuite_addr: testsuite路径 是一个.bz2压缩包 :param build_file: build file 路径 :return:testcase_addr: 生成的测试用例地址 """ # 临时文件 ant日志 tmp_ant_log = output_addr + "_ant" file_helper.check_file_exists(output_addr) working_directory = checkout_addr + os.sep + "checkout" cmd = [ "bash", # "-x", BASH_DEFECT4J_RUN_TEST_WITH_AGENT, DEFECTS4J_ADD_PATH_FILE, # $1 DEFECTS4J_PRE_INCLUDE_FILE_ADDR, # $2 working_directory, # $3 tmp_ant_log, # $4 testsuite_addr, # $5 build_file, # $6 ] # print(" ".join(cmd)) sub_call_hook.serial(cmd) # 分析ant日志 获取junit日志 parse(intput_ant_log=tmp_ant_log, output_junit_log=output_addr) # 删除临时文件(ant日志) file_helper.rm(tmp_ant_log)
def run(args: str): cmd = ["bash", BASH_DEFECT4J, DEFECTS4J_ADD_PATH_FILE] + args.split(" ") # print(cmd) sub_call_hook.serial(cmd)
def run(output_addr: str, checkout_folder: str, project_id: str, version_num: int, bf_type: str, suite_num: str = "1", test_id: int = 1, budget: int = 20, suite_src: str = "randoop"): """ :param output_addr: 测试用例输出地址 :param checkout_folder: checkout地址 若不存在checkout 则会自动生成 :param project_id: 项目名(如Lang) Generate tests for this project id. See Project module for available project IDs. :param version_num: 版本号 数字 :param bf_type: f或者b(代表fixed和buggy) :param suite_num: 测试集编号 代表同一个项目中不同测试集的序号 只影响测试集的存储路径 :param test_id: The id of the generated test suite (i.e., which run of the same configuration). :param budget: 生成测试用例的时间限制(秒) The time in seconds allowed for test generation. :param suite_src: 使用的测试用例生成工具(randoop或者evosuite) :return:testcase_addr 生成的测试用例地址 """ is_passed = True if not check_proj_args(project_id, version_num, bf_type): is_passed = False sys.stderr.write("Defects4jGenTestcase.py:项目参数验证不通过") if suite_src not in ["randoop", "evosuite"]: is_passed = False sys.stderr.write( "Defects4jGenTestcase.py: suite_src只能是randoop或者evosuite") if is_passed: testsuite_output_address = output_addr checkout_addr = checkout_folder + os.sep + "checkout" # 保存loaded class 的文件的路径 loaded_classes_file = DEFECTS4J_PROJ_ADDR + os.sep + "framework" + os.sep + "projects" + os.sep + project_id + "loaded_classes" + os.sep + str( version_num) + ".src" cmd = [ "bash", # "-x", BASH_DEFECT4J_GEN_TESTCASE, DEFECTS4J_ADD_PATH_FILE, # $1 DEFECTS4J_PRE_INCLUDE_FILE_ADDR, # $2 testsuite_output_address, # $3 project_id, # $4 str(version_num), # $5 bf_type, # $6 suite_num, # $7 str(test_id), # $8 str(budget), # $9 checkout_addr, # $10 suite_src, # $11 loaded_classes_file, # $12 ] # print(" ".join(cmd)) sub_call_hook.serial(cmd) # testcase_addr = output_addr + os.sep + project_id + os.sep + suite_src + os.sep + suite_num # 删除临时文件 # file_helper.rm(tmp_folder) # 将生成的测试用例压缩包 拷贝至浅层目录 并解压 suite_src_file = testsuite_output_address + os.sep + project_id + os.sep + suite_src + os.sep + suite_num + os.sep + project_id + "-" + str( version_num ) + bf_type + "-" + suite_src + "." + suite_num + ".tar.bz2" suite_dest_file = testsuite_output_address + os.sep + str( version_num) + bf_type + ".tar.bz2" file_helper.mv(src=suite_src_file, dest=suite_dest_file) # 解压测试用例至临时文件夹 tmp_testsuite = testsuite_output_address + os.sep + "tmp_testsuite" bz2_helper.unzip(output_addr=tmp_testsuite, intput_bz2_file_name=suite_dest_file) return tmp_testsuite else: return None