Ejemplo n.º 1
0
def deal_arguments(root, node_name):
    variable_date = VariableData(node_name)
    for child in root.element[0]:
        data = dict()

        var_name = child.find(".//stringProp[@name='Argument.name']")
        if var_name is not None:
            data["varName"] = check_argument(var_name.text)

        var_content = child.find(".//stringProp[@name='Argument.value']")
        if var_content is not None:
            data["varContent"] = var_content.text

        variable_remark = child.find(".//stringProp[@name='Argument.desc']")
        if variable_remark is not None:
            data["variableRemark"] = variable_remark.text

        arguments_local[var_name.text] = var_content.text
        variable_date.set_data(data)

    resp = post_blade.dealVariableData(variable_date)
    # logger.debug(resp)
    if resp is not None:
        logger.error("添加自定义变量失败, 原因:{}".format(resp))
    else:
        logger.info("添加自定义变量成功")
    global count
    logger.info(count)
    count += 1
Ejemplo n.º 2
0
def deal_threadgroup(root, node_path):
    # 线程组名称, 作为用例名称
    thread_group_name = root.get("testname")
    logger.debug(node_path)
    sub_elements = root.get_sub_elements()

    # 初始化导入用例请求
    ioc = importOfflineCase(node_path)

    steps = []
    # 获取到所有关键组件
    for sub_element in sub_elements:
        # 组件为禁用状态, 不读取
        if not sub_element.isEnabled():
            continue

        if sub_element.tag == "TransactionController":
            deal_transaction_controller(sub_element, node_path, steps)
        elif sub_element.tag == "UserParameters":
            # 用户参数处理
            steps.append(deal_user_parameters(sub_element))

    ioc.add_case(thread_group_name, steps)
    resp = post_blade.importOfflineCase(ioc)
    logger.debug(resp)
    if resp is not None:
        logger.error("用例{}添加失败, 原因:{}".format(thread_group_name, resp))
    else:
        logger.info("用例{}添加成功".format(thread_group_name))
    global count
    logger.info(count)
    count += 1
Ejemplo n.º 3
0
def deal_arguments(root, node_name, arguments_local=None):
    variable_date = VariableData(node_name)
    for child in root.element[0]:
        data = dict()

        var_name = child.find(".//stringProp[@name='Argument.name']")
        if var_name is not None:
            # 将本地变量转成blade格式
            data["varName"] = "varc_" + var_name.text

        var_content = child.find(".//stringProp[@name='Argument.value']")
        if var_content is not None:
            data["varContent"] = var_content.text

        variable_remark = child.find(".//stringProp[@name='Argument.desc']")
        if variable_remark is not None:
            data["variableRemark"] = variable_remark.text

        # 本地化处理
        arguments_local[var_name.text] = var_content.text
        variable_date.set_data(data)

    resp = post_blade.dealVariableData(variable_date)
    # logger.info(resp)
    if resp is not None:
        logger.error(resp)
Ejemplo n.º 4
0
def deal_threadgroup(root, node_path):
    # 线程组名称, 作为用例名称
    thread_group_name = root.get("testname")
    logger.debug(node_path)
    sub_elements = root.get_sub_elements()

    # 初始化导入用例请求
    ioc = importOfflineCase(node_path + thread_group_name)
    # ioc = importOfflineCase(node_path)
    steps = []
    # 获取到所有关键组件
    for sub_element in sub_elements:
        # 组件为禁用状态, 不读取
        if not sub_element.isEnabled():
            continue

        if sub_element.tag == "TransactionController":
            # 一个事务控制器, 作为一条用例
            ioc.add_case(sub_element.get("testname"),
                         deal_transaction_controller(sub_element, node_path))
        elif sub_element.tag == "JDBCSampler":
            steps += deal_JDBCSample(sub_element)
    if steps:
        ioc.add_case(thread_group_name, steps)
    resp = post_blade.importOfflineCase(ioc)
    logger.debug(resp)
    if resp is not None:
        logger.error("用例{}添加失败, 原因:{}".format(thread_group_name, resp))
    else:
        logger.info("用例{}添加成功".format(thread_group_name))
    global count
    logger.info(count)
    count += 1
Ejemplo n.º 5
0
def deal_threadgroup(root, node_path):
    # 线程组名称, 作为用例名称
    csv_flag = False
    thread_group_cases = False
    thread_group_name = root.get("testname")
    logger.debug(node_path)
    sub_elements = root.get_sub_elements()

    # 初始化导入用例请求
    ioc = importOfflineCase(node_path)

    steps = []
    # 检查当前线程组是否使用csv
    for sub_element in sub_elements:
        if not sub_element.isEnabled():
            continue

        if sub_element.tag == "CSVDataSet":
            csv_flag = True
            break
        elif sub_element.tag == "HTTPSamplerProxy" and "正例" in sub_element.get(
                "testname"):
            thread_group_cases = True
            break
        elif sub_element.tag == "CounterConfig":
            # 有计数器,也是一种读取csv的情况
            csv_flag = True
            break

    if csv_flag:
        for sub_element in sub_elements:
            if not sub_element.isEnabled():
                continue

            # if sub_element.tag == "IfController":
            #     root = sub_element

        cases = deal_csv_threadgroup(root)
        for case in cases:
            ioc.add_case(case[0], case[1])
    elif thread_group_cases:
        # 组件为禁用状态, 不读取
        for sub_element in sub_elements:
            if not sub_element.isEnabled():
                continue

            step = None
            if sub_element.tag == "JDBCSampler":
                step = deal_JDBCSample(sub_element)
            elif sub_element.tag == "HTTPSamplerProxy":
                step = [deal_HTTPSampler(sub_element, "步骤一")]
            else:
                continue

            ioc.add_case(sub_element.get("testname"), step)
    else:
        # 获取到所有关键组件
        for sub_element in sub_elements:
            # 组件为禁用状态, 不读取
            if not sub_element.isEnabled():
                continue

            if sub_element.tag == "JDBCSampler":
                steps += deal_JDBCSample(sub_element)
            elif sub_element.tag == "org.apache.jmeter.protocol.ssh.sampler.SSHCommandSampler":
                steps += deal_ssh_command(sub_element)
            elif sub_element.tag == "HTTPSamplerProxy":
                steps += [
                    deal_HTTPSampler(sub_element, sub_element.get("testname"))
                ]
            elif sub_element.tag == "LoopController":
                # 循环控制器检查结果
                steps += deal_LoopController(sub_element)
                pass
            logger.debug(steps)
        ioc.add_case(thread_group_name, steps)

    # resp = None
    resp = post_blade.importOfflineCase(ioc)
    logger.debug(resp)
    if resp is not None:
        logger.error("用例{}添加失败, 原因:{}".format(thread_group_name, resp))
    else:
        logger.info("用例{}添加成功".format(thread_group_name))
    global count
    logger.info(count)
    count += 1
Ejemplo n.º 6
0
def deal_threadgroup(root, node_path):
    # HTTP 组件
    http_companents = []

    # 线程组名称, 作为用例节点的父级目录名称
    thread_group_name = root.get("testname")
    logger.info(node_path)
    sub_elements = root.get_sub_elements()

    # 如果是csv格式的,包含了控制器,特殊处理
    if sub_elements[0].tag == "TransactionController":
        sub_elements = sub_elements[0].get_sub_elements()

    # 初始化导入用例请求
    ioc = importOfflineCase(node_path + thread_group_name)

    messages = []
    # 获取到所有关键组件
    for sub_element in sub_elements:
        # 组件为禁用状态, 不读取
        if not sub_element.isEnabled():
            continue

        # 从 Beanshell 中将读取的csv文件key取出
        if sub_element.tag in ("BeanShellSampler",
                               "BeanShellPreProcessor") and not messages:
            if sub_element.tag == "BeanShellSampler":
                java_code = sub_element.element.find(
                    ".//stringProp[@name='BeanShellSampler.query']").text
            else:
                java_code = sub_element.element.find(
                    ".//stringProp[@name='script']").text
            # 获取csv 路径 key
            csv_re = re.compile(r'FileInputStream[(]vars.get[(]"(.*?)"[)]',
                                re.S)
            csv_key = re.findall(csv_re, java_code)[0]
            file_path = arguments_local[csv_key]
            filename = file_path.split("/")[-1]
            logger.info(thread_group_name + "的 csv 文件名称" + filename)
            messages = deal_csv_file(filename)
            logger.info("读取csv文件内容结束")
            logger.info(messages)
        elif sub_element.tag == "Arguments":
            # copp 自定义变量里直接放的文件名, 直接获取报文内容, 无需将变量上送到blade
            csv_file_path = sub_element.element.find(
                ".//stringProp[@name='Argument.value']").text
            csv_file_name = csv_file_path.split("/")[-1]
            logger.info(thread_group_name + "的 csv 文件名称" + csv_file_name)
            messages = deal_csv_file(csv_file_name)
            logger.info("读取csv文件内容结束")
            logger.info(messages)
        elif sub_element.tag == "HTTPSamplerProxy":
            # 在这里改成将 HTTP 组件保存下来, 在后面循环遍历 Message, 重复发送
            http_companents.append(sub_element)
        elif sub_element.tag == "JDBCSampler":
            # JDBC 组件处理
            step = deal_JDBCSample(sub_element)
            ioc.add_case(sub_element.get("testname"), [step])

    # 改到这里发HTTP请求
    if messages:
        # 不为空
        for message in messages:
            step_num = 0
            steps = []
            for http_companent in http_companents:
                step_num += 1
                path = http_companent.element.find(
                    ".//stringProp[@name='HTTPSampler.path']").text
                logger.info(path)
                # 先添加脚本
                ds = dealScriptData(node_path)
                ds.set_data_with_default(http_companent.get("testname"),
                                         root_url, path, thread_group_name)
                resp, script_id = post_blade.dealScriptData(ds)
                # 再添加数据
                request_body_half = http_companent.element.find(
                    ".//stringProp[@name='Argument.value']").text
                requst_body = request_body_half.replace(
                    "${req_body}", message["body"])
                logger.debug(requst_body)
                steps.append(
                    deal_HTTPSampler(http_companent, "步骤-" + str(step_num),
                                     script_id, requst_body,
                                     message["check_message"]))
            ioc.add_case(message["casename"], steps)
    elif http_companents:
        step_num = 0
        steps = []
        for http_companent in http_companents:
            step_num += 1
            path = http_companent.element.find(
                ".//stringProp[@name='HTTPSampler.path']").text
            logger.info(path)
            # 先添加脚本
            ds = dealScriptData(node_path)
            ds.set_data_with_default(http_companent.get("testname"), root_url,
                                     path, thread_group_name)
            resp, script_id = post_blade.dealScriptData(ds)
            # 再添加数据
            steps.append(
                deal_HTTPSampler(http_companent, "步骤-" + str(step_num),
                                 script_id))
        ioc.add_case(thread_group_name, steps)
    else:
        pass

    resp = post_blade.importOfflineCase(ioc)
    # logger.info(resp)
    if resp is not None:
        logger.error(thread_group_name + resp)