예제 #1
0
    def bucket_metric_and_test_suites(self):
        all_tests = self.tests()
        self.test_suites = []
        if len(all_tests):
            for suite_name, tests in groupby(
                    sorted(all_tests.values(), key=lambda t: t.name),
                    lambda t: parse_test_name(t.name)[0]):
                test_suite = TestRun.TestSuite()
                test_suite.name = suite_name
                test_suite.tests = [t for t in tests]
                self.test_suites.append(test_suite)

        all_metrics = self.metrics()
        if len(all_metrics):
            self.metric_suites = []
            for suite_name, metrics in groupby(
                    sorted(all_metrics.values(), key=lambda m: m.name),
                    lambda m: parse_metric_name(m.name)[0]):
                metric_suite = TestRun.MetricSuite()
                metric_suite.name = suite_name
                metric_suite.metrics = [m for m in metrics]
                self.metric_suites.append(metric_suite)
예제 #2
0
    def bucket_metric_and_test_suites(self):
        all_tests = self.tests()
        self.test_suites = []
        if len(all_tests):
            for suite_name, tests in groupby(
                    sorted(all_tests.values(), key=lambda t: t.name),
                    lambda t: parse_test_name(t.name)[0]):
                test_suite = Suite()
                test_suite.name = suite_name
                self.test_suites.append(test_suite)
                for test in tests:
                    test_suite.add_test(test)

        all_metrics = self.metrics()
        if len(all_metrics):
            self.metric_suites = []
            for suite_name, metrics in groupby(
                    sorted(all_metrics.values(), key=lambda m: m.name),
                    lambda m: parse_metric_name(m.name)[0]):
                metric_suite = MetricSuite()
                metric_suite.name = suite_name
                [metric_suite.add_metric(m) for m in metrics]
                self.metric_suites.append(metric_suite)
예제 #3
0
def find_stable_tests(tests, envs={}, suites={}):
    """
        Print a list of stable tests

        - if environments are given

                       | envA | envb |
          suiteA       |  2/2 | 1/2  |
          - testA      |  Y   |  90% |
          - testB      |  Y   |  80% |
          suiteB/testA |  50% |  Y   |

    """

    if len(tests) == 0:
        print('*** No tests available ***')
        return

    envs_slugs = sorted([env.slug for env in envs.values()])
    tests_names = sorted(set([test.name for test in tests]))
    tests_dict = {}

    # Longest test name
    longest_test_name = max(
        [len(parse_test_name(name)[1]) for name in tests_names]) + len('- ')

    # Saves a summary by suite
    suites_stableness = defaultdict(list)

    if len(envs):
        # Longest env slug
        longest_env_slug = max(10, max([len(slug) for slug in envs_slugs]))

        envs_dict = {env.slug: [] for env in envs.values()}
        tests_dict = defaultdict(lambda: envs_dict.copy())
        for test in tests:
            env = envs[getid(test.environment)]
            tests_dict[test.name][env.slug].append(test.status)

        print(' ' * (3 + longest_test_name), end='')
        envs_header = '|'.join(
            [slug.center(longest_env_slug) for slug in envs_slugs])
        print(f'|{envs_header}|')

        prev_suite_slug = None
        for test_name in tests_names:

            suite_slug, test = parse_test_name(test_name)
            if suite_slug != prev_suite_slug:
                prev_suite_slug = suite_slug
                print(f'\n\033[1m{prev_suite_slug}\033[0m')

            print(f'- {test.ljust(longest_test_name)} ', end='')
            for env_slug in envs_slugs:
                n, out = stableness(tests_dict[test_name][env_slug],
                                    pad=longest_env_slug)
                suites_stableness[suite_slug].append(n)
                print(f'|{out}', end='')
            print('|')
    else:
        tests_dict = defaultdict(list)
        for test in tests:
            tests_dict[test.name].append(test.status)

        prev_suite_slug = None
        for test_name in tests_names:

            suite_slug, test = parse_test_name(test_name)
            if suite_slug != prev_suite_slug:
                prev_suite_slug = suite_slug
                print(f'\n\033[1m{prev_suite_slug}\033[0m')

            n, out = stableness(tests_dict[test_name])
            suites_stableness[suite_slug].append(n)
            print(f'- {test.ljust(longest_test_name)} {out}')

    longest_suite_slug = max([len(slug) for slug in suites_stableness.keys()])

    print()
    print("*** Suite summary ***")
    for suite_slug in suites_stableness.keys():
        n, out = stableness(suites_stableness[suite_slug], target=1)
        print(f'\033[1m{suite_slug.ljust(longest_suite_slug)}\033[0m: {out}')