示例#1
0
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)
示例#2
0
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)
示例#4
0
def run(args: str):
    cmd = ["bash", BASH_DEFECT4J, DEFECTS4J_ADD_PATH_FILE] + args.split(" ")
    # print(cmd)
    sub_call_hook.serial(cmd)
示例#5
0
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