summaryrefslogtreecommitdiffstats
path: root/utils/test/reporting/functest/reporting-tempest.py
blob: 563e53010a5aff36e2b9a5b773ea871417625276 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
from urllib2 import Request, urlopen, URLError
import json
import jinja2
import os

installers = ["apex", "compass", "fuel", "joid"]
items = ["tests", "Success rate", "duration"]

for installer in installers:
    # we consider the Tempest results of the last 7 days
    url = "http://testresults.opnfv.org/testapi/results?case=Tempest"
    request = Request(url + '&period=7&installer=' + installer)

    try:
        response = urlopen(request)
        k = response.read()
        results = json.loads(k)
    except URLError, e:
        print 'No kittez. Got an error code:', e

    test_results = results['test_results']
    test_results.reverse()

    scenario_results = {}
    criteria = {}
    errors = {}

    for r in test_results:
        # Retrieve all the scenarios per installer
        if not r['version'] in scenario_results.keys():
            scenario_results[r['version']] = []
        scenario_results[r['version']].append(r)

    for s, s_result in scenario_results.items():
        scenario_results[s] = s_result[0:5]
        # For each scenario, we build a result object to deal with
        # results, criteria and error handling
        for result in scenario_results[s]:
            result["creation_date"] = result["creation_date"].split(".")[0]

            # retrieve results
            # ****************
            nb_tests_run = result['details']['tests']
            if nb_tests_run != 0:
                success_rate = 100*(int(result['details']['tests']) - int(result['details']['failures']))/int(result['details']['tests'])
            else:
                success_rate = 0

            result['details']["tests"] = nb_tests_run
            result['details']["Success rate"] = str(success_rate) + "%"

            # Criteria management
            # *******************
            crit_tests = False
            crit_rate = False
            crit_time = False

            # Expect that at least 200 tests are run
            if nb_tests_run >= 200:
                crit_tests = True

            # Expect that at least 90% of success
            if success_rate >= 90:
                crit_rate = True

            # Expect that the suite duration is inferior to 45m
            if result['details']['duration'] < 2700:
                crit_time = True

            result['criteria'] = {'tests': crit_tests,
                                  'Success rate': crit_rate,
                                  'duration': crit_time}

            # error management
            # ****************

            # TODO get information from artefact based on build tag
            # to identify errors of the associated run
            # build tag needed to wget errors on the artifacts
            # the idea is to list the tests in errors and provide the link
            # towards complete artifact
            # another option will be to put the errors in the DB
            # (in the detail section)...
            result['errors'] = {'tests': "",
                                'Success rate': "",
                                'duration': ""}

    templateLoader = jinja2.FileSystemLoader(os.path.dirname(os.path.abspath(__file__)))
    templateEnv = jinja2.Environment(loader=templateLoader)

    TEMPLATE_FILE = "./template/index-tempest-tmpl.html"
    template = templateEnv.get_template(TEMPLATE_FILE)

    outputText = template.render(scenario_results=scenario_results,
                                 items=items,
                                 installer=installer)

    with open("./release/index-tempest-" + installer + ".html", "wb") as fh:
        fh.write(outputText)