Exemplo n.º 1
0
def get_test_build(build_name, build_number, check_rebuild=False,
                   force_rebuild_search=False):
    """Get test data from Jenkins job build
    :param build_name: string
    :param build_number: string
    :param check_rebuild: bool, if True then look for newer job rebuild(s)
    :param force_rebuild_search: bool, if True then force rebuild(s) search
    :return: dict
    """
    test_build = Build(build_name, build_number)
    first_case = test_build.test_data()['suites'][0]['cases'].pop()['name']

    if (force_rebuild_search or first_case == 'jenkins') and check_rebuild:
        iso_magnet = get_job_parameter(test_build.build_data, 'MAGNET_LINK')
        if not iso_magnet:
            return test_build

        latest_build_number = Build(build_name, 'latest').number
        builds_to_check = [i for i in
                           range(build_number + 1, latest_build_number + 1)]
        if force_rebuild_search:
            builds_to_check.reverse()

        for n in builds_to_check:
            test_rebuild = Build(build_name, n)
            if get_job_parameter(test_rebuild.build_data, 'MAGNET_LINK') \
                    == iso_magnet:
                logger.debug("Found test job rebuild: "
                             "{0}".format(test_rebuild.url))
                return test_rebuild
    return test_build
Exemplo n.º 2
0
def get_test_build(build_name, build_number, check_rebuild=False):
    """Get test data from Jenkins job build
    :param build_name: string
    :param build_number: string
    :param check_rebuild: bool, if True then look for newer job rebuild(s)
    :return: dict
    """
    test_build = Build(build_name, build_number)
    if test_build.test_data()['suites'][0]['cases'].pop()['name'] == 'jenkins':
        if not check_rebuild:
            return test_build
        iso_magnet = get_job_parameter(test_build.build_data, 'MAGNET_LINK')
        if not iso_magnet:
            return test_build
        latest_build_number = Build(build_name, 'latest').number
        for n in range(build_number, latest_build_number):
            test_rebuild = Build(build_name, n + 1)
            if get_job_parameter(test_rebuild.build_data, 'MAGNET_LINK') \
                    == iso_magnet:
                logger.debug("Found test job rebuild: "
                             "{0}".format(test_rebuild.url))
                return test_rebuild
    return test_build
Exemplo n.º 3
0
def get_test_build(build_name, build_number, check_rebuild=False):
    """Get test data from Jenkins job build
    :param build_name: string
    :param build_number: string
    :param check_rebuild: bool, if True then look for newer job rebuild(s)
    :return: dict
    """
    test_build = Build(build_name, build_number)
    if test_build.test_data()['suites'][0]['cases'].pop()['name'] == 'jenkins':
        if not check_rebuild:
            return test_build
        iso_magnet = get_job_parameter(test_build.build_data, 'MAGNET_LINK')
        if not iso_magnet:
            return test_build
        latest_build_number = Build(build_name, 'latest').number
        for n in range(build_number, latest_build_number):
            test_rebuild = Build(build_name, n + 1)
            if get_job_parameter(test_rebuild.build_data, 'MAGNET_LINK') \
                    == iso_magnet:
                logger.debug("Found test job rebuild: "
                             "{0}".format(test_rebuild.url))
                return test_rebuild
    return test_build
Exemplo n.º 4
0
def get_tests_results(systest_build, os):
    tests_results = []
    test_build = Build(systest_build['name'], systest_build['number'])
    run_test_data = test_build.test_data()
    test_classes = {}
    for one in run_test_data['suites'][0]['cases']:
        class_name = one['className']
        if class_name not in test_classes:
            test_classes[class_name] = {}
            test_classes[class_name]['child'] = []
            test_classes[class_name]['duration'] = 0
            test_classes[class_name]["failCount"] = 0
            test_classes[class_name]["passCount"] = 0
            test_classes[class_name]["skipCount"] = 0
        else:
            if one['className'] == one['name']:
                logger.warning("Found duplicate test in run - {}".format(
                    one['className']))
                continue

        test_class = test_classes[class_name]
        test_class['child'].append(one)
        test_class['duration'] += float(one['duration'])
        if one['status'].lower() in ('failed', 'error'):
            test_class["failCount"] += 1
        if one['status'].lower() == 'passed':
            test_class["passCount"] += 1
        if one['status'].lower() == 'skipped':
            test_class["skipCount"] += 1

    for klass in test_classes:
        klass_result = test_classes[klass]
        if len(klass_result['child']) == 1:
            test = klass_result['child'][0]
            if check_untested(test):
                continue
            check_blocked(test)
            test_result = TestResult(
                name=test['name'],
                group=expand_test_group(test['className'],
                                        systest_build['name'],
                                        os),
                status=test['status'].lower(),
                duration='{0}s'.format(int(test['duration']) + 1),
                url='{0}testReport/(root)/{1}/'.format(test_build.url,
                                                       test['name']),
                version='_'.join(
                    [test_build.build_data["id"]] + (
                        test_build.build_data["description"] or
                        test['name']).split()),
                description=test_build.build_data["description"] or
                    test['name'],
                comments=test['skippedMessage']
            )
        else:
            case_steps = []
            test_duration = sum(
                [float(c['duration']) for c in klass_result['child']])
            steps = [c for c in klass_result['child']
                     if c['name'].startswith('Step')]
            steps = sorted(steps, key=lambda k: k['name'])
            test_name = steps[0]['className']
            test_group = steps[0]['className']
            test_comments = None
            is_test_failed = any([s['status'].lower() in ('failed', 'error')
                                  for s in steps])

            for step in steps:
                if step['status'].lower() in ('failed', 'error'):
                    case_steps.append({
                        "content": step['name'],
                        "actual": step['errorStackTrace'] or
                        step['errorDetails'],
                        "status": step['status'].lower()})
                    test_comments = "{err}\n\n\n{stack}".format(
                        err=step['errorDetails'],
                        stack=step['errorStackTrace'])
                else:
                    case_steps.append({
                        "content": step['name'],
                        "actual": "pass",
                        "status": step['status'].lower()
                    })
            test_result = TestResult(
                name=test_name,
                group=expand_test_group(test_group,
                                        systest_build['name'],
                                        os),
                status='failed' if is_test_failed else 'passed',
                duration='{0}s'.format(int(test_duration) + 1),
                url='{0}testReport/(root)/{1}/'.format(test_build.url,
                                                       test_name),
                version='_'.join(
                    [test_build.build_data["id"]] + (
                        test_build.build_data["description"] or
                        test_name).split()),
                description=test_build.build_data["description"] or
                    test_name,
                comments=test_comments,
                steps=case_steps,
            )
        tests_results.append(test_result)
    return tests_results
Exemplo n.º 5
0
def get_tests_results(systest_build, os):
    tests_results = []
    test_build = Build(systest_build['name'], systest_build['number'])
    run_test_data = test_build.test_data()
    test_classes = {}
    for one in run_test_data['suites'][0]['cases']:
        class_name = one['className']
        if class_name not in test_classes:
            test_classes[class_name] = {}
            test_classes[class_name]['child'] = []
            test_classes[class_name]['duration'] = 0
            test_classes[class_name]["failCount"] = 0
            test_classes[class_name]["passCount"] = 0
            test_classes[class_name]["skipCount"] = 0
        else:
            if one['className'] == one['name']:
                logger.warning("Found duplicate test in run - {}".format(
                    one['className']))
                continue

        test_class = test_classes[class_name]
        test_class['child'].append(one)
        test_class['duration'] += float(one['duration'])
        if one['status'].lower() in ('failed', 'error'):
            test_class["failCount"] += 1
        if one['status'].lower() == 'passed':
            test_class["passCount"] += 1
        if one['status'].lower() == 'skipped':
            test_class["skipCount"] += 1

    for klass in test_classes:
        klass_result = test_classes[klass]
        if len(klass_result['child']) == 1:
            test = klass_result['child'][0]
            if check_untested(test):
                continue
            check_blocked(test)
            test_result = TestResult(
                name=test['name'],
                group=expand_test_group(test['className'],
                                        systest_build['name'], os),
                status=test['status'].lower(),
                duration='{0}s'.format(int(test['duration']) + 1),
                url='{0}testReport/(root)/{1}/'.format(test_build.url,
                                                       test['name']),
                version='_'.join([test_build.build_data["id"]] +
                                 (test_build.build_data["description"]
                                  or test['name']).split()),
                description=test_build.build_data["description"]
                or test['name'],
                comments=test['skippedMessage'])
        else:
            case_steps = []
            test_duration = sum(
                [float(c['duration']) for c in klass_result['child']])
            steps = [
                c for c in klass_result['child']
                if c['name'].startswith('Step')
            ]
            steps = sorted(steps, key=lambda k: k['name'])
            test_name = steps[0]['className']
            test_group = steps[0]['className']
            test_comments = None
            is_test_failed = any(
                [s['status'].lower() in ('failed', 'error') for s in steps])

            for step in steps:
                if step['status'].lower() in ('failed', 'error'):
                    case_steps.append({
                        "content":
                        step['name'],
                        "actual":
                        step['errorStackTrace'] or step['errorDetails'],
                        "status":
                        step['status'].lower()
                    })
                    test_comments = "{err}\n\n\n{stack}".format(
                        err=step['errorDetails'],
                        stack=step['errorStackTrace'])
                else:
                    case_steps.append({
                        "content": step['name'],
                        "actual": "pass",
                        "status": step['status'].lower()
                    })
            test_result = TestResult(
                name=test_name,
                group=expand_test_group(test_group, systest_build['name'], os),
                status='failed' if is_test_failed else 'passed',
                duration='{0}s'.format(int(test_duration) + 1),
                url='{0}testReport/(root)/{1}/'.format(test_build.url,
                                                       test_name),
                version='_'.join([test_build.build_data["id"]] +
                                 (test_build.build_data["description"]
                                  or test_name).split()),
                description=test_build.build_data["description"] or test_name,
                comments=test_comments,
                steps=case_steps,
            )
        tests_results.append(test_result)
    return tests_results