Scenariusze testowe

Pobieranie listy scenariuszy testowych

Aby otrzymać listę dostępnych scenariuszy testowych należy wysłać wiadomość GET na adres /api/user/test_suites/.
W odpowiedzi powinniśmy otrzymać wiadomość o treści z taką strukturą danych:
{
    "count": 2,
    "next": "http://$host_url/api/user/test_suites/?limit=100&offset=100",
    "previous": null,
    "results": [
        {
            "id": 580,
            "name": "1",
            "test_blocks": [
                {
                    "id": 701,
                    "name": "Ping1",
                    "task_type": 20,
                    "stage_no": 1,
                    "timeout": null,
                    "options": {
                        "params": {
                            "count": 1,
                            "address": "8.8.8.8",
                            "interval": 1
                        },
                        "thresholds": {}
                    },
                    "on_premise_test_agents": [],
                    "cloud_locations": []
                }
            ],
            "repeat_interval": 0,
            "repeat_start": null,
            "repeat_end": null,
            "paused": false,
            "status": 4,
            "timestamp_created": "2021-04-21T12:21:42.371546+02:00",
            "cloud_locations": [],
            "on_premise_test_agents": [
                82
            ],
            "options": {
                "notifications": {
                    "1": [1],
                    "2": [1],
                    "3": [1],
                    "4": [1],
                    "5": [1],
                    "6": [1]
                }
            }
        },
        {
            "id": 579,
            "name": "ICMP short monitoring",
            "test_blocks": [
                {
                    "id": 700,
                    "name": "Ping1",
                    "task_type": 20,
                    "stage_no": 1,
                    "timeout": null,
                    "options": {
                        "params": {
                            "count": 5,
                            "address": "netrsr.com",
                            "interval": 1
                        },
                        "thresholds": {
                            "enabled": true,
                            "mode": "json",
                            "configuration": {
                                "type": "threshold",
                                "value": 40,
                                "variable": "mean_rtt",
                                "threshold_type": "gte"
                            }
                        },
                        "priority": 10
                    },
                    "on_premise_test_agents": [],
                    "cloud_locations": []
                }
            ],
            "repeat_interval": 60,
            "repeat_start": "2021-04-20T13:45:00+02:00",
            "repeat_end": "2021-04-20T14:00:00+02:00",
            "paused": false,
            "status": 4,
            "timestamp_created": "2021-04-20T13:49:38.814888+02:00",
            "cloud_locations": [],
            "on_premise_test_agents": [
                82
            ],
            "options": {}
        }
    ]
}

Filtrowanie scenariuszy testowych

Jest również możliwość pobrania przefiltrowanych danych. Aby pobrać filtrowane dane należy do adresu wiadomości dopisać odpowiedni parametr: /api/user/test_suites/?search=test&status=3|4.
Dostępne filtry:
  • search - scenariusze zawierające w nazwie podaną wartość tekstową,

  • status - status scenariusza (dozwolone liczby 1-4, możliwość podania wielu wartości):
    • 1 – scenariusz zaplanowany,

    • 2 – scenariusz uruchomiony,

    • 3 – scenariusz wstrzymany,

    • 4 – scenariusz zakończony,

  • on_premise_test_agents - id test agenta (możliwość podania wielu wartości),

  • test_blocks__task_type - id typu testu.

Możliwe jest również podanie do filtra test agentów i/lub statusów wielu wartości. Aby to zrobić należy poszczególne wartości oddzielić znakiem:
  • „,” w przypadku gdy chcemy połączyć je operatorem logicznym „i”,

  • „|” w przypadku gdy chcemy połączyć je operatorem logicznym „lub”.

Pobieranie scenariuszy, w ramach którego testy były wykonywane na test agentach o id 1, 2 lub 3: /api/user/test_suites/?on_premise_test_agents=1|2|3.

Sortowanie scenariuszy testowych

Możliwe jest również sortowanie scenariuszy po dacie lub po nazwie. Należy to zrobić poprzez dopisanie do adresu wiadomości parametru ordering:
  • /api/user/test_suites/?ordering=name dla sortowania typu A→Z,

  • /api/user/test_suites/?ordering=-name dla sortowania typu Z→A,

  • /api/user/test_suites/?ordering=timestamp_created dla sortowania od najstarszych do najnowszych,

  • /api/user/test_suites/?ordering=-timestamp_created dla sortowania od najnowszych do najstarszych.

Pobieranie danych scenariusza testowego

Aby otrzymać dane szczegółowe scenariusza należy wysłać wiadomość GET na adres /api/user/test_suites/<id>/, gdzie <id> jest id scenariusza, którego dane chcemy pobrać.
W odpowiedzi powinniśmy otrzymać wiadomość o treści z taką strukturą danych:
{
    "id": 579,
    "name": "Ping",
    "test_blocks": [
        {
            "id": 700,
            "name": "Ping1",
            "task_type": 20,
            "stage_no": 1,
            "timeout": null,
            "options": {
                "params": {
                    "count": 5,
                    "address": "netrsr.com",
                    "interval": 1
                },
                "thresholds": {
                    "enabled": true,
                    "mode": "json",
                    "configuration": {
                        "type": "threshold",
                        "value": 40,
                        "variable": "mean_rtt",
                        "threshold_type": "gte"
                    }
                },
                "priority": 10
            },
            "on_premise_test_agents": [],
            "cloud_locations": []
        }
    ],
    "repeat_interval": 60,
    "repeat_start": "2021-04-20T13:45:00+02:00",
    "repeat_end": "2021-04-20T14:00:00+02:00",
    "paused": false,
    "status": 4,
    "timestamp_created": "2021-04-20T13:49:38.814888+02:00",
    "cloud_locations": [],
    "on_premise_test_agents": [
        82
    ],
    "options": {}
}

Dodawanie scenariusza testowego (uruchamianie scenariusza)

Aby dodać (uruchomić) scenariusz należy wysłać wiadomość POST na adres /api/user/test_suites/.
Wiadomość powinna zawierać treść o takiej strukturze danych:
{
    "name":"Ping",
    "repeat_interval":60,
    "repeat_start":"2021-04-22T15:15:00.000Z",
    "repeat_end":"2021-04-22T16:15:00.000Z",
    "cloud_locations":[],
    "on_premise_test_agents":[82],
    "options": {
        "notifications": {
            "1": [1],
            "2": [1],
            "3": [1],
            "4": [1],
            "5": [1],
            "6": [1]
        },
        "priority_limit": 20,
        "thresholds": {
            "enabled": true,
            "code": "exceeded = False\r\nfor ta, ta_data in data.items():\r\n\r\n    rtts = [row['rtt'] for row in ta_data['ping_block']['results'][-1]['result'][-1]['list']]\r\n    rtts_mean = statistics.mean(rtts)\r\n    rtts_std = statistics.stdev(rtts)\r\n    \r\n    ta_exceeded = rtts_mean > 20 or rtts_std < 0.1 * rtts_mean\r\n    exceeded != ta_exceeded  \r\n"
        },
        "5g_config": {
            "k": "00112233445566778899aabbccddeeff",
            "opc": "63BFA50EE6523365FF14C1F45F88737D",
            "imsi": "999700123456780",
            "mme_address": "172.30.30.209"
        }
    },
    "test_blocks": [
        {
            "name":"Ping1",
            "stage_no":1,
            "task_type":20,
            "cloud_locations":[],
            "on_premise_test_agents":[],
            "options": {
                "params": {
                    "address":"www.netrsr.com",
                    "count":1,
                    "interval":1
                },
                "thresholds": {
                    "enabled": true,
                    "mode": "json",
                    "configuration": {
                        "type": "threshold",
                        "value": 40,
                        "variable": "mean_rtt",
                        "threshold_type": "gte"
                    }
                },
                "priority": 10,
                "5g_enabled": false,
            }
        }
    ]
}
Wiadomość powinna zawierać pola:
  • name – nazwa testu,

  • repeat_interval – czas pomiędzy poszczególnymi uruchomieniami scenariusza, w przypadku pojedynczego testu = 0, w przypadku monitoringu > 0,

  • repeat_start – data uruchomienia scenariusza (dozwolone są jedynie pełne minuty oraz 0, 15, 30 lub 45 minuta każdej godziny), w przypadku pojedynczego testu null,

  • repeat_end – data zakończenia scenariusza (dozwolone są jedynie pełne minuty oraz 0, 15, 30 lub 45 minuta każdej godziny), w przypadku pojedynczego testu null,

  • cloud_locations – globalna lista lokalizacji chmurowych, na których mają się wykonać wszystkie testy w obrębie tego scenariusza (globalna lista zostanie wykorzystana, tylko w tych testach, w których lokalna lista dla testu jest pusta),

  • on_premise_test_agents - globalna lista test agentów, na których mają się wykonać wszystkie testy w obrębie tego scenariusza (globalna lista zostanie wykorzystana, tylko w tych testach, w których lokalna lista dla testu jest pusta),

  • options - dodatkowe opcje scenariusza (pole opcjonalne):
    • notifications - lokalne opcje powiadomień scenariusza:
    • priority_limit - wartość progowa oznaczająca to, że bloki testowe mające ustalony priorytet poniżej tej wartości nie będą generowały powiadomień po przekroczoneniu progu alarmowego,

    • thresholds - zaawansowana opcja ustalania progów alarmowych poprzez treść kodu napisanego w języku Python:
      • enabled - informacja o tym, czy konfiguracja ma być włączona (dozwolone wartości: true oraz false),

      • code - treść kodu w języku Python,

    • 5g_config - konfiguracja połączenia z rdzeniem sieci 5G:
      • mme_address - adres modułu MME będącego częścią rdzenia 5G,

      • imsi - akceptowalny przez sieć 5G numer IMSI,

      • opc - akceptowalny przez sieć 5G klucz operatora,

      • k - akceptowalny przez sieć 5G klucz abonenta,

  • test_blocks – lista testów do wykonania:
    • name – nazwa testu,

    • stage_no – numer kroku scenariusza,

    • task_type – id testu według danych z api/task_types (Opis pobierania typów testów),

    • cloud_locations – lista lokalizacji chmurowych, na których ma się wykonać dany test (jeśli chcemy dla tego testu wykorzystać globalną listę, należy podać pustą tablicę [] jako wartość tego pola),

    • on_premise_test_agents - lista test agentów, na których ma się wykonać dany test (jeśli chcemy dla tego testu wykorzystać globalną listę, należy podać pustą tablicę [] jako wartość tego pola),

    • options – opcje testu:
      • params – parametry unikalne dla każdego typu testu, wszystkie niezbędne dla testu pola oraz opis możliwych wartości są dostępne w /api/task_types/<id> (Pobieranie parametrów testu),

      • thresholds – opis progów alarmowych testu:
        • enabled - informacja, czy progi alarmowe dla danego bloczka mają być włączone (dozwolone wartości: true oraz false),

        • mode - tryb podania progów alarmowych (dozwolone wartości: „python” - dla kodu w języku Python oraz „json” - dla progów przekazanych w formacie JSON),

        • configuration - konfiguracja thresholdów w trybie „json”:
          • type – przyjmuje wartości „threshold” lub „operator”,

          • threshold_type – (tylko dla opcji type=”threshold”), typ progu, przyjmuje wartości gt (greater than), gte (greater or equal), lt (less than), lte (less or equal),

          • variable - (tylko dla opcji type=”threshold”), wartość dotycząca progu, możliwe wartości opisane w /api/task_types/<id> (Pobieranie parametrów testu),

          • value - (tylko dla opcji type=”threshold”), wartość progu,

          • operator_type - (tylko dla opcji type=”operator”), przyjmuje wartości „and” lub „or”,

          • thresholds - (tylko dla opcji type=”operator”), lista thresholdów wg powyższego opisu,

        • code - konfiguracja thresholdów w trybie „python”,

      • priority - wartość liczbowa odpowiadająca ważności bloczka testowego,

      • 5g_enabled - flaga oznaczająca, czy dany test ma być przeprowadzony przez skonfigurowaną w scenariuszu sieć 5G.

W odpowiedzi powinniśmy otrzymać wiadomość o treści z taką strukturą danych:
{
    "id": 583,
    "name": "Ping",
    "test_blocks": [
        {
            "id": 704,
            "name": "Ping1",
            "task_type": 20,
            "stage_no": 1,
            "timeout": null,
            "options": {
                "params": {
                    "count": 1,
                    "address": "netrsr.com",
                    "interval": 1
                },
                "thresholds": {
                    "enabled": true,
                    "mode": "json",
                    "configuration": {
                        "type": "threshold",
                        "value": 40,
                        "variable": "mean_rtt",
                        "threshold_type": "gte"
                    }
                },
                "priority": 10,
                "5g_enabled": false
            },
            "on_premise_test_agents": [],
            "cloud_locations": []
        }
    ],
    "repeat_interval": 60,
    "repeat_start": "2021-04-22T15:15:00.000Z",
    "repeat_end": "2021-04-22T16:15:00.000Z",
    "paused": false,
    "status": 4,
    "timestamp_created": "2021-04-22T15:19:22.124859+02:00",
    "cloud_locations": [],
    "on_premise_test_agents": [82],
    "options": {
        "notifications": {
            "1": [1],
            "2": [1],
            "3": [1],
            "4": [1],
            "5": [1],
            "6": [1]
        },
        "priority_limit": 20,
        "thresholds": {
            "enabled": true,
            "code": "exceeded = False\r\nfor ta, ta_data in data.items():\r\n\r\n    rtts = [row['rtt'] for row in ta_data['ping_block']['results'][-1]['result'][-1]['list']]\r\n    rtts_mean = statistics.mean(rtts)\r\n    rtts_std = statistics.stdev(rtts)\r\n    \r\n    ta_exceeded = rtts_mean > 20 or rtts_std < 0.1 * rtts_mean\r\n    exceeded != ta_exceeded  \r\n"
        },
        "5g_config": {
            "k": "00112233445566778899aabbccddeeff",
            "opc": "63BFA50EE6523365FF14C1F45F88737D",
            "imsi": "999700123456780",
            "mme_address": "172.30.30.209"
        }
    }
}

Wstrzymywanie działania scenariusza testowego

Aby wstrzymać działanie scenariusza testowego należy wysłać wiadomość PATCH na adres /api/user/test_suites/<id>/, gdzie <id> jest id scenariusza, który chcemy wstrzymać.
Wiadomość powinna zawierać treść:
{
    "paused": true
}
Aby wznowić działanie scenariusza należy wysłać wiadomość PATCH na ten sam adres o treści:
{
    "paused": false
}
W odpowiedzi powinniśmy otrzymać wiadomość o treści z taką strukturą danych (pole paused=true dla wstrzymanych testów, paused=false dla uruchomionych lub wznowionych):
{
    "id": 583,
    "name": "Ping",
    "test_blocks": [
        {
            "id": 704,
            "name": "Ping1",
            "task_type": 20,
            "stage_no": 1,
            "timeout": null,
            "options": {
                "params": {
                    "count": 1,
                    "address": "netrsr.com",
                    "interval": 1
                },
                "thresholds": {
                    "enabled": true,
                    "mode": "json",
                    "configuration": {
                        "type": "threshold",
                        "value": 40,
                        "variable": "mean_rtt",
                        "threshold_type": "gte"
                    }
                },
                "priority": 10,
                "5g_enabled": false
            },
            "on_premise_test_agents": [],
            "cloud_locations": []
        }
    ],
    "repeat_interval": 60,
    "repeat_start": "2021-04-22T15:15:00.000Z",
    "repeat_end": "2021-04-22T16:15:00.000Z",
    "paused": true,
    "status": 4,
    "timestamp_created": "2021-04-22T15:19:22.124859+02:00",
    "cloud_locations": [],
    "on_premise_test_agents": [82],
    "options": {
        "notifications": {
            "1": [1],
            "2": [1],
            "3": [1],
            "4": [1],
            "5": [1],
            "6": [1]
        },
        "priority_limit": 20,
        "thresholds": {
            "enabled": true,
            "code": "exceeded = False\r\nfor ta, ta_data in data.items():\r\n\r\n    rtts = [row['rtt'] for row in ta_data['ping_block']['results'][-1]['result'][-1]['list']]\r\n    rtts_mean = statistics.mean(rtts)\r\n    rtts_std = statistics.stdev(rtts)\r\n    \r\n    ta_exceeded = rtts_mean > 20 or rtts_std < 0.1 * rtts_mean\r\n    exceeded != ta_exceeded  \r\n"
        },
        "5g_config": {
            "k": "00112233445566778899aabbccddeeff",
            "opc": "63BFA50EE6523365FF14C1F45F88737D",
            "imsi": "999700123456780",
            "mme_address": "172.30.30.209"
        }
    }
}

Zapisywanie scenariusza jako preset

Aby ustawić jeden z uruchomionych scenariuszy jako preset (Opis presetów) należy wysłać wiadomość POST na adres /api/user/test_suites/<id>/set_as_preset/, gdzie <id> jest id scenariusza, którego chcemy zapisać jako preset.
Wiadomość powinna zawierać treść o takiej strukturze danych:
{
    "display_name": "Preset from Test Suite",
    "description": "Test Suite set as a new preset."
}

Usuwanie scenariuszy testowych

Aby usunąć jeden scenariusz testowy należy wysłać wiadomość DELETE na adres /api/user/test_suites/<id>/, gdzie <id> jest id scenariusza, który chcemy usunąć.
Aby usunąć większą ilość scenariuszy nalezy wysłać wiadomość POST na adres /api/user/test_suites/delete/ dodając do niego treść o takiej strukturze danych (liczby w polu test_suites oznaczają id scenariuszy, które chcemy usunąć):
{
    "test_suites": [1, 2, 3]
}
Możliwe jest również usunięcie tym sposobem jednego scenariusza poprzez podanie w polu test_suites tablicy zawierającej id jednego scenariusza.
{
    "test_suites": [1]
}