Пример #1
0
def check_lines(environnement, coverage):
    """Lance la vérification de la présence des codes et noms des lignes et qu'ils ne sont pas identiques.
    """
    log.init_log("", "")
    logger = logging.getLogger("vipere")
    logger.info("Vérification des lignes pour le coverage [{}] et sur l'environnement [{}]".format(coverage, environnement))

    params = json.load(open('../params.json'))
    assert (environnement in params['environnements']), "L'environnement demandé n'existe pas"
    navitia_url = params['environnements'][environnement]['url']
    navitia_api_key = params['environnements'][environnement]['key']

    #pour éviter les gros appels, on fait un appel par réseau
    nav_response_network = requests.get(navitia_url + "coverage/{}/networks?count=1000".format(coverage), headers={'Authorization': navitia_api_key})
    if nav_response_network.status_code != 200 :
        logger.error(">> l'appel navitia a renvoyé une erreur")
        return
    errors = []
    errors.append(["coverage", "env", "test_datetime", "object_id", "object_type", "test_category", "error", "infos", "error_level", "wkt"])
    for a_network in nav_response_network.json()['networks'] :
        nav_response_line = requests.get(navitia_url + "coverage/{}/networks/{}/lines/?count=1000".format(coverage, a_network["id"]),
            headers={'Authorization': navitia_api_key})
        if "lines" in nav_response_line.json():
            for a_line in nav_response_line.json()['lines']:
                if a_line["code"].strip() == "":
                    errors.append([coverage, environnement, datetime.date.today().strftime('%Y%m%d'),
                        a_line["id"], "line", "check_line_name_and_code", "no_line_code", '"' + a_line["name"].replace('"', '""')+'"', "orange",
                        utils.geojson_to_wkt(a_line['geojson'])])
                if a_line["name"].strip() == "":
                    errors.append([coverage, environnement, datetime.date.today().strftime('%Y%m%d'),
                        a_line["id"], "line", "check_line_name_and_code", "no_line_name", a_line["code"], "red",
                        utils.geojson_to_wkt(a_line['geojson'])])
                if a_line["name"].strip() and (a_line["name"].strip() == a_line["code"].strip()):
                    errors.append([coverage, environnement, datetime.date.today().strftime('%Y%m%d'),
                        a_line["id"], "line", "check_line_name_and_code", "line_code_and_name_identical", a_line["code"], "orange",
                        utils.geojson_to_wkt(a_line['geojson'])])
        else:
            errors.append([coverage, environnement, datetime.date.today().strftime('%Y%m%d'),
                a_network["id"], "network", "check_line_name_and_code", "network_has_no_line",
                "le réseau {} n'a pas de lignes".format(a_network["name"])
                , "red", ""])
    utils.write_errors_to_file (environnement, coverage, "check_line_name_and_code", errors)
    utils.generate_file_summary()
Пример #2
0
def test_network_for_realtime_on_stop_schedule(environnement, coverage, *networks):
    log.init_log("", "")
    logger = logging.getLogger("vipere")
    logger.info("Vérification des lignes pour le coverage [{}] et sur l'environnement [{}]".format(coverage, environnement))

    if len(networks) == 0:
        logger.error("Au moins un identifiant de réseau doit être passé en paramètre")
        exit()
    params = json.load(open('../params.json'))
    assert (environnement in params['environnements']), "L'environnement demandé n'existe pas"
    navitia_url = params['environnements'][environnement]['url']
    navitia_api_key = params['environnements'][environnement]['key']


    total_nb_tests = 0
    test_result = {}
    test_result['ligne non configurée'] = 0
    test_result['pas horaires du tout'] = 0
    test_result["pas horaires mais c'est normal"] = 0
    test_result['horaires théoriques'] = 0
    test_result['OK'] = 0
    test_result['non testé'] = 0

    detail_test_result =  []
    detail_test_result.append(["coverage", "env", "test_datetime", "object_id", "object_type", "test_category", "error", "infos", "error_level", "wkt"])

    for network in networks:
        appel_nav = requests.get(navitia_url + "coverage/{}/networks/{}/lines?count=0".format(coverage, network), headers={'Authorization': navitia_api_key})
        nb_result = appel_nav.json()['pagination']['total_result']

        appel_nav = requests.get(navitia_url + "coverage/{}/networks/{}/lines?count={}".format(coverage, network, nb_result), headers={'Authorization': navitia_api_key})
        lines = appel_nav.json()['lines']
        for a_line in lines :
            logger.info("Execution du traitement sur le réseau {} et la ligne {}".format(network, a_line["id"]))
            if not "properties" in a_line :
                message = 'pas de configuration temps réel pour la ligne {} ({})'.format(a_line['name'], a_line['id'])
                result = [coverage, environnement, datetime.date.today().strftime('%Y%m%d'), a_line['id'], "line", "temps réel mode proxy", "config manquante", message, "green", utils.geojson_to_wkt(a_line['geojson'])  ]
                detail_test_result.append(result)
                test_result['ligne non configurée'] += 1
            else :
                keys = [prop['name'] for prop in a_line['properties']]
                if not "realtime_system" in keys :
                    test_result['ligne non configurée'] += 1
                    message = 'pas de configuration temps réel pour la ligne {} ({})'.format(a_line['name'], a_line['id'])
                    result = [coverage, environnement, datetime.date.today().strftime('%Y%m%d'), a_line['id'], "line", "temps réel mode proxy", "config manquante", message, "green", utils.geojson_to_wkt(a_line['geojson'])  ]
                    detail_test_result.append(result)
                    continue

                #je récupère le nombre de stop_points sur ma ligne
                appel_nav = requests.get(navitia_url + "coverage/{}/networks/{}/lines/{}/stop_points?count=200".format(coverage, network, a_line['id']), headers={'Authorization': navitia_api_key})
                if appel_nav.json()['pagination']['total_result'] > 200 :
                    test_result['non testé'] += appel_nav.json()['pagination']['total_result'] - 200
                    message = "Toute la ligne {} ({}) n'a pas été testée car elle a trop d'arrêts".format(a_line['name'], a_line['id'])
                    result = [coverage, environnement, datetime.date.today().strftime('%Y%m%d'), a_line['id'], "line", "temps réel mode proxy", "évo du script à prévoir", message, "red", utils.geojson_to_wkt(a_line['geojson'])  ]
                    detail_test_result.append(result)
                    logger.error(message)

                #je fais un appel grille horaire à l'arrêt pour chaque arrêt de la ligne et je vérifie que j'ai du temps réel
                for a_stop_point in appel_nav.json()['stop_points']:
                    appel_nav = requests.get(navitia_url + "coverage/{}/networks/{}/lines/{}/stop_points/{}/stop_schedules?items_per_schedule=1".format(coverage, network, a_line['id'], a_stop_point['id']), headers={'Authorization': navitia_api_key})
                    for a_schedule in appel_nav.json()['stop_schedules'] :
                        wkt = "POINT({} {})".format(a_schedule['stop_point']["coord"]["lon"], a_schedule['stop_point']["coord"]["lat"])
                        total_nb_tests +=1
                        if len(a_schedule['date_times']) == 0 :
                            if a_schedule['additional_informations'] in ["no_departure_this_day", "partial_terminus", "terminus"] :
                                test_result["pas horaires mais c'est normal"] += 1
                                message = "pas d'horaires aujourd'hui pour l'arrêt {}, la ligne {}, le parcours {} ({}, {}, {})".format(a_schedule['stop_point']['name'], a_schedule['route']['line']['code'],  a_schedule['route']['name'], a_schedule['stop_point']['id'], a_schedule['route']['line']['id'],  a_schedule['route']['id'])
                                result = [coverage, environnement, datetime.date.today().strftime('%Y%m%d')
                                    , a_schedule['stop_point']['id'], "stop_point", "temps réel mode proxy", "pas d'horaires aujourd'hui"
                                    , message
                                    , "green", wkt  ]
                                detail_test_result.append(result)
                            else :
                                message = "pas d'horaires pour l'arrêt {}, la ligne {}, le parcours {} ({}, {}, {})".format(a_schedule['stop_point']['name'], a_schedule['route']['line']['code'],  a_schedule['route']['name'], a_schedule['stop_point']['id'], a_schedule['route']['line']['id'],  a_schedule['route']['id'])
                                result = [coverage, environnement, datetime.date.today().strftime('%Y%m%d')
                                    , a_schedule['stop_point']['id'], "stop_point", "temps réel mode proxy", "pas d'horaires"
                                    , message
                                    , "red", wkt  ]
                                detail_test_result.append(result)
                                test_result['pas horaires du tout'] += 1
                        else :
                            if a_schedule['date_times'][0]['data_freshness'] != "realtime":
                                test_result['horaires théoriques'] += 1
                                message = "pas de temps réel pour l'arrêt {}, la ligne {}, le parcours {} ({}, {}, {})".format(a_schedule['stop_point']['name'], a_schedule['route']['line']['code'],  a_schedule['route']['name'], a_schedule['stop_point']['id'], a_schedule['route']['line']['id'],  a_schedule['route']['id'])
                                result = [coverage, environnement, datetime.date.today().strftime('%Y%m%d')
                                    , a_schedule['stop_point']['id'], "stop_point", "temps réel mode proxy", "horaires théoriques"
                                    , message
                                    , "orange", wkt  ]
                                detail_test_result.append(result)
                            else:
                                test_result['OK'] += 1

    logger.info ("Résultat des tests :")
    logger.info (">> {} cas de tests".format(total_nb_tests))
    logger.info (">> {} ligne(s) sans temps réel configuré".format(test_result['ligne non configurée']))
    logger.info (">> {} cas de services terminés".format(test_result["pas horaires mais c'est normal"]))
    logger.info (">> {} cas où du théorique est renvoyé".format(test_result['horaires théoriques']))
    logger.info (">> {} cas où aucun horaire n'est renvoyé".format(test_result['pas horaires du tout']))
    logger.info (">> {} cas où ça marche !".format(test_result['OK']))
    logger.info (">> au moins {} cas non testés ".format(test_result['non testé']))

    utils.write_errors_to_file (environnement, coverage, "check_realtime_proxy", detail_test_result)
    utils.generate_file_summary()
Пример #3
0
def check_line_colors(environnement, coverage):
    """Lance la vérification de la présence des couleurs des lignes et du texte associé.
    Dans le cas où les deux couleurs sont présentes, le script vérifie le contraste (accessibilité RGAA).
    """
    log.init_log("", "")
    logger = logging.getLogger("vipere")
    logger.info("On teste le coverage [{}] sur l'environnement [{}] ".format(coverage, environnement))

    params = json.load(open('../params.json'))
    assert (environnement in params['environnements']), "L'environnement demandé n'existe pas"
    navitia_url = params['environnements'][environnement]['url']
    navitia_api_key = params['environnements'][environnement]['key']


    detail_test_result =  []
    detail_test_result.append(["coverage", "env", "test_datetime", "object_id", "object_type", "test_category", "error", "infos", "error_level", "wkt"])

    appel_nav_networks = requests.get(navitia_url + "coverage/{}/networks?count=1000".format(coverage), headers={'Authorization': navitia_api_key})
    if appel_nav_networks.status_code != 200 :
        logger.error (">> l'appel navitia a renvoyé une erreur")
        return
    for a_network in appel_nav_networks.json()['networks'] :
        appel_nav = requests.get(navitia_url + "coverage/{}/networks/{}/lines?count=1000&depth=0".format(coverage, a_network['id']), headers={'Authorization': navitia_api_key})
        if appel_nav.json()['pagination']['total_result'] > 1000 :
            logger.error (">> il y a trop de lignes sur le réseau {}, elles n'ont pas toutes été testées".format(a_network['name']))
        if "lines" in appel_nav.json():
            for a_line in appel_nav.json()['lines']:
                color = a_line['color']
                text_color = a_line['text_color']
                if not color or not text_color:
                    message = "il n'y a pas de couleur ou de couleur de texte pour la ligne {} du réseau {}".format(a_line['name'], a_network['name'])
                    result = [coverage, environnement, datetime.date.today().strftime('%Y%m%d'), a_line['id'], "line", "couleurs des lignes", "config manquante", message, "red", utils.geojson_to_wkt(a_line['geojson'])]
                    detail_test_result.append(result)
                elif not is_valid_color(color) or not is_valid_color(text_color):
                    message = "la couleur ou la couleur de texte pour la ligne {} du réseau {} est invalide".format(a_line['name'], a_network['name'])
                    result = [coverage, environnement, datetime.date.today().strftime('%Y%m%d'), a_line['id'], "line", "couleurs des lignes", "config erronée", message, "red", utils.geojson_to_wkt(a_line['geojson'])]
                    detail_test_result.append(result)
                else :
                    contrast = abs(compute_luminosity(text_color) - compute_luminosity(color))
                    if contrast == 0 :
                        message = "la couleur et la couleur du texte sont identiques pour la ligne {} du réseau {}".format(a_line['name'], a_network['name'])
                        result = [coverage, environnement, datetime.date.today().strftime('%Y%m%d'), a_line['id'], "line", "couleurs des lignes", "code de ligne illisible", message, "red", utils.geojson_to_wkt(a_line['geojson'])]
                        detail_test_result.append(result)
                    elif contrast <= 125 :
                        a_better_color = "blanc"
                        if compute_luminosity(color) >= 128 :
                            a_better_color = "noir"
                        message = "il n'y a pas assez de contraste entre la couleur et la couleur du texte pour la ligne {} du réseau {} : du {} serait moins pire".format(a_line['name'], a_network['name'], a_better_color)
                        result = [coverage, environnement, datetime.date.today().strftime('%Y%m%d'), a_line['id'], "line", "couleurs des lignes", "code de ligne peu lisible", message, "orange", utils.geojson_to_wkt(a_line['geojson'])]
                        detail_test_result.append(result)

    utils.write_errors_to_file (environnement, coverage, "check_line_colors", detail_test_result)
    utils.generate_file_summary()
Пример #4
0
def check_line_colors(environnement, coverage):
    """Lance la vérification de la présence des couleurs des lignes et du texte associé.
    Dans le cas où les deux couleurs sont présentes, le script vérifie le contraste (accessibilité RGAA).
    """
    log.init_log("", "")
    logger = logging.getLogger("vipere")
    logger.info("On teste le coverage [{}] sur l'environnement [{}] ".format(
        coverage, environnement))

    params = json.load(open('../params.json'))
    assert (
        environnement
        in params['environnements']), "L'environnement demandé n'existe pas"
    navitia_url = params['environnements'][environnement]['url']
    navitia_api_key = params['environnements'][environnement]['key']

    detail_test_result = []
    detail_test_result.append([
        "coverage", "env", "test_datetime", "object_id", "object_type",
        "test_category", "error", "infos", "error_level", "wkt"
    ])

    appel_nav_networks = requests.get(
        navitia_url + "coverage/{}/networks?count=1000".format(coverage),
        headers={'Authorization': navitia_api_key})
    if appel_nav_networks.status_code != 200:
        logger.error(">> l'appel navitia a renvoyé une erreur")
        return
    for a_network in appel_nav_networks.json()['networks']:
        appel_nav = requests.get(
            navitia_url +
            "coverage/{}/networks/{}/lines?count=1000&depth=0".format(
                coverage, a_network['id']),
            headers={'Authorization': navitia_api_key})
        if appel_nav.json()['pagination']['total_result'] > 1000:
            logger.error(
                ">> il y a trop de lignes sur le réseau {}, elles n'ont pas toutes été testées"
                .format(a_network['name']))
        if "lines" in appel_nav.json():
            for a_line in appel_nav.json()['lines']:
                color = a_line['color']
                text_color = a_line['text_color']
                if not color or not text_color:
                    message = "il n'y a pas de couleur ou de couleur de texte pour la ligne {} du réseau {}".format(
                        a_line['name'], a_network['name'])
                    result = [
                        coverage, environnement,
                        datetime.date.today().strftime('%Y%m%d'), a_line['id'],
                        "line", "couleurs des lignes", "config manquante",
                        message, "red",
                        utils.geojson_to_wkt(a_line['geojson'])
                    ]
                    detail_test_result.append(result)
                elif not is_valid_color(color) or not is_valid_color(
                        text_color):
                    message = "la couleur ou la couleur de texte pour la ligne {} du réseau {} est invalide".format(
                        a_line['name'], a_network['name'])
                    result = [
                        coverage, environnement,
                        datetime.date.today().strftime('%Y%m%d'), a_line['id'],
                        "line", "couleurs des lignes", "config erronée",
                        message, "red",
                        utils.geojson_to_wkt(a_line['geojson'])
                    ]
                    detail_test_result.append(result)
                else:
                    contrast = abs(
                        compute_luminosity(text_color) -
                        compute_luminosity(color))
                    if contrast == 0:
                        message = "la couleur et la couleur du texte sont identiques pour la ligne {} du réseau {}".format(
                            a_line['name'], a_network['name'])
                        result = [
                            coverage, environnement,
                            datetime.date.today().strftime('%Y%m%d'),
                            a_line['id'], "line", "couleurs des lignes",
                            "code de ligne illisible", message, "red",
                            utils.geojson_to_wkt(a_line['geojson'])
                        ]
                        detail_test_result.append(result)
                    elif contrast <= 125:
                        a_better_color = "blanc"
                        if compute_luminosity(color) >= 128:
                            a_better_color = "noir"
                        message = "il n'y a pas assez de contraste entre la couleur et la couleur du texte pour la ligne {} du réseau {} : du {} serait moins pire".format(
                            a_line['name'], a_network['name'], a_better_color)
                        result = [
                            coverage, environnement,
                            datetime.date.today().strftime('%Y%m%d'),
                            a_line['id'], "line", "couleurs des lignes",
                            "code de ligne peu lisible", message, "orange",
                            utils.geojson_to_wkt(a_line['geojson'])
                        ]
                        detail_test_result.append(result)

    utils.write_errors_to_file(environnement, coverage, "check_line_colors",
                               detail_test_result)
    utils.generate_file_summary()
Пример #5
0
def test_network_for_realtime_on_stop_schedule(environnement, coverage,
                                               *networks):
    log.init_log("", "")
    logger = logging.getLogger("vipere")
    logger.info(
        "Vérification des lignes pour le coverage [{}] et sur l'environnement [{}]"
        .format(coverage, environnement))

    if len(networks) == 0:
        logger.error(
            "Au moins un identifiant de réseau doit être passé en paramètre")
        exit()
    params = json.load(open('../params.json'))
    assert (
        environnement
        in params['environnements']), "L'environnement demandé n'existe pas"
    navitia_url = params['environnements'][environnement]['url']
    navitia_api_key = params['environnements'][environnement]['key']

    total_nb_tests = 0
    test_result = {}
    test_result['ligne non configurée'] = 0
    test_result['pas horaires du tout'] = 0
    test_result["pas horaires mais c'est normal"] = 0
    test_result['horaires théoriques'] = 0
    test_result['OK'] = 0
    test_result['non testé'] = 0

    detail_test_result = []
    detail_test_result.append([
        "coverage", "env", "test_datetime", "object_id", "object_type",
        "test_category", "error", "infos", "error_level", "wkt"
    ])

    for network in networks:
        appel_nav = requests.get(
            navitia_url +
            "coverage/{}/networks/{}/lines?count=0".format(coverage, network),
            headers={'Authorization': navitia_api_key})
        nb_result = appel_nav.json()['pagination']['total_result']

        appel_nav = requests.get(
            navitia_url + "coverage/{}/networks/{}/lines?count={}".format(
                coverage, network, nb_result),
            headers={'Authorization': navitia_api_key})
        lines = appel_nav.json()['lines']
        for a_line in lines:
            logger.info(
                "Execution du traitement sur le réseau {} et la ligne {}".
                format(network, a_line["id"]))
            if not "properties" in a_line:
                message = 'pas de configuration temps réel pour la ligne {} ({})'.format(
                    a_line['name'], a_line['id'])
                result = [
                    coverage, environnement,
                    datetime.date.today().strftime('%Y%m%d'), a_line['id'],
                    "line", "temps réel mode proxy", "config manquante",
                    message, "green",
                    utils.geojson_to_wkt(a_line['geojson'])
                ]
                detail_test_result.append(result)
                test_result['ligne non configurée'] += 1
            else:
                keys = [prop['name'] for prop in a_line['properties']]
                if not "realtime_system" in keys:
                    test_result['ligne non configurée'] += 1
                    message = 'pas de configuration temps réel pour la ligne {} ({})'.format(
                        a_line['name'], a_line['id'])
                    result = [
                        coverage, environnement,
                        datetime.date.today().strftime('%Y%m%d'), a_line['id'],
                        "line", "temps réel mode proxy", "config manquante",
                        message, "green",
                        utils.geojson_to_wkt(a_line['geojson'])
                    ]
                    detail_test_result.append(result)
                    continue

                #je récupère le nombre de stop_points sur ma ligne
                appel_nav = requests.get(
                    navitia_url +
                    "coverage/{}/networks/{}/lines/{}/stop_points?count=200".
                    format(coverage, network, a_line['id']),
                    headers={'Authorization': navitia_api_key})
                if appel_nav.json()['pagination']['total_result'] > 200:
                    test_result['non testé'] += appel_nav.json(
                    )['pagination']['total_result'] - 200
                    message = "Toute la ligne {} ({}) n'a pas été testée car elle a trop d'arrêts".format(
                        a_line['name'], a_line['id'])
                    result = [
                        coverage, environnement,
                        datetime.date.today().strftime('%Y%m%d'), a_line['id'],
                        "line", "temps réel mode proxy",
                        "évo du script à prévoir", message, "red",
                        utils.geojson_to_wkt(a_line['geojson'])
                    ]
                    detail_test_result.append(result)
                    logger.error(message)

                #je fais un appel grille horaire à l'arrêt pour chaque arrêt de la ligne et je vérifie que j'ai du temps réel
                for a_stop_point in appel_nav.json()['stop_points']:
                    appel_nav = requests.get(
                        navitia_url +
                        "coverage/{}/networks/{}/lines/{}/stop_points/{}/stop_schedules?items_per_schedule=1"
                        .format(coverage, network, a_line['id'],
                                a_stop_point['id']),
                        headers={'Authorization': navitia_api_key})
                    for a_schedule in appel_nav.json()['stop_schedules']:
                        wkt = "POINT({} {})".format(
                            a_schedule['stop_point']["coord"]["lon"],
                            a_schedule['stop_point']["coord"]["lat"])
                        total_nb_tests += 1
                        if len(a_schedule['date_times']) == 0:
                            if a_schedule['additional_informations'] in [
                                    "no_departure_this_day",
                                    "partial_terminus", "terminus"
                            ]:
                                test_result[
                                    "pas horaires mais c'est normal"] += 1
                                message = "pas d'horaires aujourd'hui pour l'arrêt {}, la ligne {}, le parcours {} ({}, {}, {})".format(
                                    a_schedule['stop_point']['name'],
                                    a_schedule['route']['line']['code'],
                                    a_schedule['route']['name'],
                                    a_schedule['stop_point']['id'],
                                    a_schedule['route']['line']['id'],
                                    a_schedule['route']['id'])
                                result = [
                                    coverage, environnement,
                                    datetime.date.today().strftime('%Y%m%d'),
                                    a_schedule['stop_point']['id'],
                                    "stop_point", "temps réel mode proxy",
                                    "pas d'horaires aujourd'hui", message,
                                    "green", wkt
                                ]
                                detail_test_result.append(result)
                            else:
                                message = "pas d'horaires pour l'arrêt {}, la ligne {}, le parcours {} ({}, {}, {})".format(
                                    a_schedule['stop_point']['name'],
                                    a_schedule['route']['line']['code'],
                                    a_schedule['route']['name'],
                                    a_schedule['stop_point']['id'],
                                    a_schedule['route']['line']['id'],
                                    a_schedule['route']['id'])
                                result = [
                                    coverage, environnement,
                                    datetime.date.today().strftime('%Y%m%d'),
                                    a_schedule['stop_point']['id'],
                                    "stop_point", "temps réel mode proxy",
                                    "pas d'horaires", message, "red", wkt
                                ]
                                detail_test_result.append(result)
                                test_result['pas horaires du tout'] += 1
                        else:
                            if a_schedule['date_times'][0][
                                    'data_freshness'] != "realtime":
                                test_result['horaires théoriques'] += 1
                                message = "pas de temps réel pour l'arrêt {}, la ligne {}, le parcours {} ({}, {}, {})".format(
                                    a_schedule['stop_point']['name'],
                                    a_schedule['route']['line']['code'],
                                    a_schedule['route']['name'],
                                    a_schedule['stop_point']['id'],
                                    a_schedule['route']['line']['id'],
                                    a_schedule['route']['id'])
                                result = [
                                    coverage, environnement,
                                    datetime.date.today().strftime('%Y%m%d'),
                                    a_schedule['stop_point']['id'],
                                    "stop_point", "temps réel mode proxy",
                                    "horaires théoriques", message, "orange",
                                    wkt
                                ]
                                detail_test_result.append(result)
                            else:
                                test_result['OK'] += 1

    logger.info("Résultat des tests :")
    logger.info(">> {} cas de tests".format(total_nb_tests))
    logger.info(">> {} ligne(s) sans temps réel configuré".format(
        test_result['ligne non configurée']))
    logger.info(">> {} cas de services terminés".format(
        test_result["pas horaires mais c'est normal"]))
    logger.info(">> {} cas où du théorique est renvoyé".format(
        test_result['horaires théoriques']))
    logger.info(">> {} cas où aucun horaire n'est renvoyé".format(
        test_result['pas horaires du tout']))
    logger.info(">> {} cas où ça marche !".format(test_result['OK']))
    logger.info(">> au moins {} cas non testés ".format(
        test_result['non testé']))

    utils.write_errors_to_file(environnement, coverage, "check_realtime_proxy",
                               detail_test_result)
    utils.generate_file_summary()