Ejemplo n.º 1
0
def create_jmeter_rule(group_name, get_id, get_description, get_version,
                       get_components, get_response_filters):
    """
    Create JSON file structure
    @param  group_name: the name of rules group
    @param  get_id: the id of the rules
    @param  get_description: the description of the rules
    @param  get_version: the version of the rules
    @param  get_components: the components of the rules
    @param  get_response_filters: the response filter for the rules
    @return json file structure
    """
    data = {
        'id': get_id,
        'description': get_description,
        'version': get_version,
        "components": get_components,
        "responseFilters": get_response_filters,
        "rules": [],
        "repositoryId": "local"
    }

    json_file_name = group_name + '/' + get_id + '-' + get_version + '-template' + '.json'
    os.makedirs(os.path.dirname(json_file_name))
    # Create JSON File
    with open(json_file_name, "w+") as f:
        json.dump(data, f)
    f.close()
    #print("Rules has been created: ", json_file_name)
    message = "Rules has been created: " + json_file_name
    print_message(message, message_color="green")

    return
Ejemplo n.º 2
0
 def header_manager(flag, enabled_count):
     if not flag:
         print_message(
             message_color=Colors.red,
             message=f"{enabled_count} Header Manager are enabled.")
         print_message(message_color=Colors.white,
                       message="Consider adding Header Manager.")
Ejemplo n.º 3
0
def find_element_status(tree, element):
    """
    Finds the element status for a specified element
    @param tree: Parsed JMX file
    @param element: Name of the element to check the status for
    """
    root = tree.getroot()
    enabled_count = 0
    flag = 0
    message = f"No element found for {element}."

    # Elements to ignore if not found in the JMX Test Plan
    # if element == 'XPath2Assertion' or element == 'JSONPathAssertion':
    #    message=f"Check ignored for {element}."
    #    printGreen(message)
    #

    for node in root.iter(element):
        if node.attrib is None:
            print_message(message_color=Colors.red, message=message)
        else:
            if str.__contains__(str(node.attrib), '\'enabled\': \'true\''):
                # Find enabled count
                enabled_count += 1
                # Set flag for success
                flag = 1
                message = f"{enabled_count} {element}(s) enabled."
            else:
                message = f"No {element} enabled."
                # Set flag for fail
                flag = 0

    # print custom logs for exception elements
    Exceptions.check(element, flag, enabled_count, message)
Ejemplo n.º 4
0
 def config_test_element(flag, enabled_count):
     if not flag:
         print_message(
             message_color=Colors.red,
             message=f"{enabled_count} HTTP Request Defaults added.")
         print_message(message_color=Colors.white,
                       message="Consider adding HTTP Request Defaults.")
Ejemplo n.º 5
0
def attribute_check(tree, element):
    """
    Performs additional attribute checks on IfController or LoopController
    @param tree: The parsed JMX
    @param element: The element to check
    """
    root = tree.getroot()
    # Set flag = 1 for issue found
    flag = 0
    for node in root.iter(element):
        #
        for child in node.getchildren():
            for i, j in child.attrib.items():
                # print(i, j)
                if str(j) == 'IfController.useExpression':
                    # Set flag = 0 for no issues
                    flag = 0
                elif str(j) == 'LoopController.loops':
                    loop_count = child.text
                    if int(loop_count) == -1:
                        flag = 0
                else:
                    flag = 1
    if flag == 1:
        if element == 'IfController':
            print_message(
                message_color=Colors.white,
                message=
                "For performance, check \"Interpret Condition as Variable"
                " Expression\" in If Controller.")
        elif element == 'LoopController':
            print_message(
                message_color=Colors.white,
                message="Loop Count is set to infinity. Double check "
                "the count before you start the test.")
Ejemplo n.º 6
0
def create_repository(get_id, get_version, group_name):
    """
    Creating a repository for the rules
    """
    data = {get_id: {"versions": [get_version]}}
    repository_file_name = group_name + '/' + get_id + '-repository.json'
    os.makedirs(os.path.dirname(repository_file_name), exist_ok=True)
    with open(repository_file_name, "w+") as f:
        json.dump(data, f)
    f.close()

    message = "Repository file has been created: " + repository_file_name
    print_message(message, message_color="green")
Ejemplo n.º 7
0
 def bean_shell_sampler(flag, enabled_count):
     if flag:
         print_message(message_color=Colors.red, message=f"{enabled_count} Bean Shell Sampler(s) are enabled.")
         print_message(message_color=Colors.white, message="Consider using JSR223 Sampler.")
     else:
         print_message(message_color=Colors.green, message=f"{enabled_count} Bean Shell Sampler(s) are enabled.")
         print_message(message_color=Colors.white, message="Consider using JSR223 Sampler.")
Ejemplo n.º 8
0
def validate_test_plan(jmx):
    """
    validates the JMeter test plan
    @param jmx: The file path to the JMX
    """
    try:
        tree = ElementTree.parse(jmx)
        print_message(message_color=Colors.green,
                      message="Valid JMeter Test Plan")
        return tree
    except:
        print_message(
            message_color=Colors.red,
            message=
            "Invalid test plan. Please use the valid JMeter test plan. \n")
        exit(1)
Ejemplo n.º 9
0
 def proxy_control(flag, enabled_count):
     if flag:
         print_message(message_color=Colors.red, message=f"{enabled_count} HTTP(S) Script Recorder(s) are enabled.")
         print_message(message_color=Colors.white, message="Consider disabling HTTP(S) Script Recorder(s).")
     else:
         print_message(message_color=Colors.green,
                       message=f"{enabled_count} HTTP(S) Script Recorder(s) are enabled.")
Ejemplo n.º 10
0
 def result_collector(flag, enabled_count):
     if flag:
         print_message(message_color=Colors.red,
                       message=f"{enabled_count} Listener(s) enabled.")
         print_message(message_color=Colors.white,
                       message="Consider disabling Listeners.")
     else:
         print_message(message_color=Colors.green,
                       message=f"{enabled_count} Listener(s) are enabled.")
Ejemplo n.º 11
0
def find_element_status(tree, element, plugin_name=None):
    """
    Finds the element status for a specified element
    @param tree: Parsed JMX file
    @param element: Name of the element to check the status for
    @param plugin_name: (Optional) Name of the plugin to check the status for
    """
    root = tree.getroot()
    enabled_count = 0
    flag = 0
    lookup_element = deepcopy(element)
    message = f"No element found for {element}."

    if plugin_name is not None:
        message = f"No plugin found for {plugin_name}."
        lookup_element = deepcopy(plugin_name)

        if not count_node(root, lookup_element) > 0:
            print_message(message_color=Colors.red, message=message)

    for node in root.iter(lookup_element):
        if node.attrib is None:
            print_message(message_color=Colors.red, message=message)
        else:
            if str.__contains__(str(node.attrib), '\'enabled\': \'true\''):
                # Find enabled count
                enabled_count += 1
                # Set flag for success
                flag = 1
                message = f"{enabled_count} {element}(s) enabled."
            else:
                message = f"No {element} enabled."
                # Set flag for fail
                flag = 0

    # print custom logs for exception elements
    Exceptions.check(element, flag, enabled_count, message)
Ejemplo n.º 12
0
 def debug_sampler(flag, enabled_count):
     if flag:
         print_message(
             message_color=Colors.red,
             message=f"{enabled_count} Debug Sampler(s) are enabled.")
         print_message(message_color=Colors.white,
                       message="Consider disabling Debug Samplers.")
     else:
         print_message(
             message_color=Colors.green,
             message=f"{enabled_count} Debug Sampler(s) are enabled.")
Ejemplo n.º 13
0
 def json_path_assertion(flag, enabled_count):
     if flag:
         print_message(
             message_color=Colors.red,
             message=f"{enabled_count} JSON Path Assertion(s) are enabled.")
         print_message(message_color=Colors.white,
                       message="Consider disabling JSON Path Assertions.")
     else:
         print_message(
             message_color=Colors.green,
             message=f"{enabled_count} JSON Path Assertion(s) are enabled.")
Ejemplo n.º 14
0
 def response_assertion(flag, enabled_count):
     if flag:
         print_message(
             message_color=Colors.red,
             message=f"{enabled_count} Response Assertion(s) are enabled.")
         print_message(message_color=Colors.white,
                       message="Consider disabling Response Assertions.")
     else:
         print_message(
             message_color=Colors.green,
             message=f"{enabled_count} Response Assertion(s) are enabled.")
Ejemplo n.º 15
0
def find_thread_groups_status(tree, element):
    """
    Detects Thread Group and types. It reads from the config.yaml for the list of Thread Groups.
    @param tree: Parsed JMX file
    @param element: The name of the thread group to find
    @return:
    """
    root = tree.getroot()
    enabled_count = 0
    flag = 0
    message = f"No element found for {element}."
    for node in root.iter(element):
        if node.attrib:
            # Find Enabled Thread Groups
            if str.__contains__(str(node.attrib), '\'enabled\': \'true\''):
                # Find enabled count
                enabled_count += 1
                # Set flag for success
                flag = 1
                message = f"Total number of {element} enabled {enabled_count}"
            elif str.__contains__(str(node.attrib), '\'enabled\': \'false\''):
                message = f"No {element} enabled."
                # Set flag for fail
                flag = 0
        else:
            print_message(message_color=Colors.red,
                          message=f"No {element} found.")
    if flag == 1:
        print_message(message_color=Colors.green, message=message)
        enabled_count = 0
    if flag == 0:
        print_message(message_color=Colors.red, message=message)
        print_message(message_color=Colors.white,
                      message=f"Consider enabling one or more {element}.")
        enabled_count = 0
    return
Ejemplo n.º 16
0
def attribute_check(tree, element):
    """
    Performs additional attribute checks on IfController or LoopController
    @param tree: The parsed JMX
    @param element: The element to check
    """
    root = tree.getroot()
    # Set flag = 1 for issue found
    flag = 0

    for node in root.iter(element):
        try:
            for child in node.getchildren():
                for i, j in child.attrib.items():
                    print(i, j)
                    if str(j) == 'IfController.useExpression':
                        # Set flag = 0 for no issues
                        flag = 0
                    elif str(j) == 'LoopController.loops':
                        loop_count = child.text
                        if int(loop_count) == -1:
                            flag = 0
                    else:
                        flag = 1
        except AttributeError:
            if element == 'LoopController':
                print_message(message_color=Colors.red,
                              message="Loop Controller is empty.")
                logging.basicConfig(
                    filename='tmp.log',
                    format='%(levelname)s %(asctime)s :: %(message)s',
                    level=logging.DEBUG)

    if flag == 1:
        if element == 'IfController':
            print_message(
                message_color=Colors.white,
                message=
                "For performance, check \"Interpret Condition as Variable"
                " Expression\" in If Controller.")
        elif element == 'LoopController':
            print_message(
                message_color=Colors.white,
                message="Loop Count is set to infinity. Double check "
                "the count before you start the test.")
Ejemplo n.º 17
0
def validate_jmeter_version(tree):
    """
    Finds the JMeter version
    @param tree: Parsed JMX file
    """
    # Get JMeter version
    root = tree.getroot()
    jmeter_version = root.items()
    expected_jmeter_version = get_jmeter_version()

    # Check JMeter Version
    if expected_jmeter_version == jmeter_version[2][1]:
        print_message(message_color=Colors.green,
                      message=f"JMeter version is {jmeter_version[2][1]}.")
    else:
        print_message(
            message_color=Colors.red,
            message=f"Found outdated JMeter version: {jmeter_version[2][1]}.")
        print_message(
            message_color=Colors.white,
            message="Consider updating to the latest version of JMeter.")
Ejemplo n.º 18
0
 def csv_data_set(flag, enabled_count):
     if not flag:
         print_message(message_color=Colors.red, message=f"{enabled_count} CSV Data Set are added.")
         print_message(message_color=Colors.white, message="Consider adding CSV Data Set.")
Ejemplo n.º 19
0
def main():
    """
    The main context of the application.
    Purpose: Converts LoadRunner correlation rules to Blazemeter Correlation Recorder Plugin format
    @Input: LoadRunner Correlation file (*.cor)
    @Output: Blazemeter Correlation Recorder Rules Template (*.json)
    Author: NaveenKumar Namachivayam | QAInsights.com
    """
    try:
        parser = argparse.ArgumentParser(
            description='Convert LoadRunner Correlation Rules to JMeter')
        required_named = parser.add_argument_group('mandatory arguments')
        required_named.add_argument("-f",
                                    "--file",
                                    dest="corfile",
                                    help="Add Correlation file path")
        args = parser.parse_args()
        cor = args.corfile

        # File Rename from *.cor to *.xml
        lr_cor_file = cor
        base = os.path.splitext(lr_cor_file)[0]
        lr_cor_file_renamed = base + ".xml"
        os.rename(lr_cor_file, lr_cor_file_renamed)

        # Get Inputs from user
        get_id = str(input("Enter id - [default: 1.0]: ") or "myrules")
        get_description = str(
            input(
                "Enter description - [default: Inception version for my rules]: "
            ) or "1.0")
        get_version = str(
            input("Enter the version - [default: 1.0]: ") or "1.0")
        get_components = str(
            input(
                "Enter the components - [default: com.blazemeter.jmeter.correlation.siebel.SiebelCounterCorrelationReplacement]:"
            ) or
            "com.blazemeter.jmeter.correlation.siebel.SiebelCounterCorrelationReplacement"
        )
        get_response_filters = str(
            input("Enter the version - [default: text/html]: ") or "text/html")

        # Root element of cor file
        root = ET.parse(lr_cor_file_renamed).getroot()

        # Iterate through each group
        # Loops only one time
        for group in root.iter('Group'):
            group_name = group.attrib['Name']
            break

        # Boiler Plate
        create_jmeter_rule(group_name, get_id, get_description, get_version,
                           get_components, get_response_filters)
        # Create Rules
        fetch_rules(root, group_name, get_id, get_version)
        # Create Repository File
        create_repository(get_id, get_version, group_name)

        # Reverting the file name
        lr_cor_file = lr_cor_file_renamed
        base = os.path.splitext(lr_cor_file)[0]
        lr_cor_file_renamed = base + ".cor"
        os.rename(lr_cor_file, lr_cor_file_renamed)

    except FileNotFoundError as e:
        print_message(e, message_color="red")
Ejemplo n.º 20
0
 def cookie_manager(flag, enabled_count):
     if not flag:
         print_message(message_color=Colors.red, message=f"{enabled_count} CookieManager added.")
         print_message(message_color=Colors.white, message="Consider adding CookieManager.")
Ejemplo n.º 21
0
 def constant_timer(flag, enabled_count):
     if not flag:
         print_message(message_color=Colors.red, message=f"{enabled_count} Timers added.")
         print_message(message_color=Colors.white, message="Consider adding Timers.")
Ejemplo n.º 22
0
 def test_action(flag, enabled_count):
     if not flag:
         print_message(message_color=Colors.red, message=f"{enabled_count} Test Action are enabled.")
         print_message(message_color=Colors.white, message="Consider adding Test Action.")
Ejemplo n.º 23
0
 def jp_result_collector(flag, enabled_count):
     if flag:
         print_message(message_color=Colors.red, message=f"{enabled_count} Visualizer(s) enabled.")
         print_message(message_color=Colors.white, message="Consider disabling Visualizer(s) plugins.")
     else:
         print_message(message_color=Colors.green, message=f"{enabled_count} Visualizer(s) are enabled.")
Ejemplo n.º 24
0
 def default_choice(flag, message):
     if flag:
         print_message(message_color=Colors.green, message=message)