例: テスト
このセクションでは、「 新しいテスト エージェントの作成と展開」に従って、テスト エージェント (テストに必要な数だけ) が作成されていることを前提としています。
テスト オーケストレーションの概要
REST APIを使用してテストを作成して実行する前に、 テストおよびモニターテンプレートの章で説明されているように、コントロールセンターで定義されたテストの基礎となるテンプレートが必要です。そのテンプレートで「テンプレート入力」として指定されたすべてのパラメーターには、REST APIでテストを作成するときに値を割り当てる必要があります。
テストの作成と実行
この例でテストに使用するテンプレートは、HTTP テスト テンプレートです。
REST API を使用してそのテンプレートを検査するために、アカウント内のすべてのテストテンプレートのリストを取得します。
# Request settings # NOTE: User is able to pass additional parameters as a query string ?limit=100&offset=111: # limit: Changes number of elements returned from API # offset: Changes element from which results will be returned url = '%s/accounts/%s/test_templates/%s' % (args.ncc_url, args.account, args.query_params) # Get list of test templates response = requests.get(url=url, headers={'API-Token': args.token})
HTTP テンプレートが定義されている唯一のテスト テンプレートである場合、応答は次のようになります。
{ "count": 1, "items": [ { "inputs": { "clients": { "input_type": "interface_list" }, "url": { "input_type": "string" } }, "description": "This is a template for HTTP tests", "name": "HTTP_test", "id": 1 } ], "next": null, "limit": 10, "offset": 0, "previous": null }
このテンプレートのHTTPテストには、( clients
クライアントの役割を果たすテストエージェントインターフェイスのリスト)と(HTTPを使用して取得するURL)のurl
2つの必須の2つの必須inputs
の残骸があります。パラメータ名は、コントロールセンターで変数名として定義されているものです。ここでは、コントロールセンターの表示名の小文字バージョン(「クライアント」と「クライアント」など)です。
複数のテンプレートがあり、既知の ID を持つ 1 つのテンプレートのみを検査する場合は、次のように実行できます。
# Request settings url = '%s/accounts/%s/test_templates/%s/' % (args.ncc_url, args.account, args.monitor_id) # Get test template response = requests.get(url=url, headers={'API-Token': args.token})
次に、テスト用の POST 操作を使用して HTTP テストを作成して実行します。
以下は、HTTP テスト テンプレートに基づくテストに必要なパラメーター設定を指定するコードです。テンプレートの構造に応じて、ここでの詳細はもちろん異なります。もう少し複雑なテストテンプレートを使用した別の例については、「 異なるテストテンプレートを使用した例」セクションを参照してください。
# Request settings url = '%s/accounts/%s/tests/' % (args.ncc_url, args.account) # Parameter settings for test json_data = json.dumps({ "name": "REST API initiated HTTP test", "description": "This is an HTTP test initiated from the REST API", "input_values": { "clients": { "input_type": "interface_list", "value": [{ "test_agent_id": 1, "interface": "eth0", "ip_version": 4 }] }, "url": { "input_type": "string", "value": "example.com" }, "status": "scheduled", "template_id": 1 }) # Create and start test response = requests.post(url=url, data=json_data, headers={ 'API-Token': TOKEN, 'Accept': 'application/json; indent=4', 'Content-Type': 'application/json', })
テストの実行はコントロールセンターに表示されます。
コントロールセンターは、テストのIDを使用してREST APIコマンドにも応答します。この例では、テスト ID は 47 です。
Status code: 201 { "template_id": 1, "description": "", "name": "HTTP_test", "id": 47 }
テスト ID は、コントロール・センターの Web GUI のテストの URL にも記載されています。この例では、その URL は https://<host IP>/<account>/testing/47/
です。
別のテストテンプレートを使用した例
テストテンプレートの別の例を次に示します:UDP用のテンプレートで、サーバー、クライアントのリスト、およびUDPポート番号を入力として受け取ります。Paragon Active Assurance GUIでは、このUDPテンプレートは次のようになります。
このテンプレートに入力を提供するには、以下のコードを使用できます。ここでは、のデフォルト値 port
をオーバーライドしました。デフォルト値(5000)を保持する場合は、 port
から input_values
セクションを省略できます。
# Request settings url = '%s/accounts/%s/tests/' % (args.ncc_url, args.account) # Parameter settings for test json_data = json.dumps({ "name": "REST API initiated UDP test", "description": "This is a UDP test initiated from the REST API", "input_values": { "clients": { "input_type": "interface_list", "value": [{ "test_agent_id": 1, "interface": "eth0", "ip_version": 4 }] }, "server": { "input_type": "interface", "value": { "test_agent_id": 2, "interface": "eth0", "ip_version": 4 } }, "port": { "input_type": "integer", "value": "5050" } }, "status": "scheduled", "template_id": 2 }) # Create and start test response = requests.post(url=url, data=json_data, headers={ 'API-Token': TOKEN, 'Accept': 'application/json; indent=4', 'Content-Type': 'application/json', }) print 'Status code: %s' % response.status_code print json.dumps(response.json(), indent=4)
テスト結果の取得
テストの結果を取得するには、テスト ID をポイントします。これにより、テストの完全な構成もフェッチされます。
基本的なテスト結果は、各テスト ステップとテスト全体の合格/不合格の結果で構成されます。
既定では、これが関連するテストの場合、テスト結果には、テストの全期間にわたって取得された平均メトリックも含まれます。平均メトリックは > streams
> metrics_avg
にありますtasks
。これらの平均メトリックをオフにするには、クエリ文字列で false に設定しますwith_metrics_avg
。
必要に応じて、この操作は、テストによって実行される各タスクの詳細 (秒単位) データ メトリックを返すことができます (このようなデータを生成するテストの場合も同様です)。この機能を有効にするには、true に設定しますwith_detailed_metrics
。デフォルトでは、このフラグは false に設定されています。詳細なデータメトリックは、 > streams
> metrics
の下tasks
にあります。
true に設定すると、パス追跡タスクの種類 (ルートと再ルート イベント) に対して追加のテスト結果が返される別の設定 with_other_results
があります。
例 1: TWAMP テスト
TWAMP テストは、メトリックを継続的に生成するテストの一例です。
以下は、TWAMP テストから結果を得るための Python コードです。
# Request settings url = '%s/accounts/%s/tests/%s/' % (args.ncc_url, args.account, args.test_id) # Get test response = requests.get(url=url, headers={'API-Token': args.token})
出力は次のようになります。
{ "description": "", "end_time": "2017-09-03T20:05:04.000000Z", "gui_url": "https://<Control Center host and port>/demo/testing/48/", "name": "TWAMP_test", "report_url": "https://<Control Center host and port>/demo/testing/48/report_builder/", "start_time": "2017-09-03T20:04:27.000000Z", "status": "passed", "steps": [ { "description": "", "end_time": "2017-09-03T20:05:03.000000Z", "id": 48, "name": "Test from template", "start_time": "2017-09-03T20:04:27.000000Z", "status": "passed", "status_message": "", "tasks": [ { "name": "", "streams": [ { "gui_url": "https://10.0.157.46/dev/results/72/rrd_graph/?start=1526898065&end=1526898965", "id": 72, "is_owner": true, "metrics": [ [ "2017-09-03T20:04:27", "2017-09-03T20:04:27", 4.4356, 1.7191, 9.9563, 23.5623, 21.8432, 391, 21.09, 93, 66, null, null, null, null, 48.07, 212, 189, null, null, null, null, 100, 100, null, null, 0, null, null ], [ "2017-09-03T20:04:27", "2017-09-03T20:04:28", <metrics omitted> ], <remaining metrics omitted> ], "metrics_avg": { "davg": 10.167887, "davg_far": null, "davg_near": null, "dmax": 24.934801, "dmax_far": null, "dmax_near": null, "dmin": 1.143761, "dmin_far": null, "dmin_near": null, "dv": 23.791039, "dv_far": null, "dv_near": null, "end_time": "2018-05-21T02:01:40", "es": 1, "es_delay": null, "es_dscp": 0, "es_dv": null, "es_loss": 1, "es_ses": null, "loss_far": 18.584512, "loss_near": 51.791573, "lost_far": 81.910714, "lost_near": 228.285714, "miso_far": 60.5, "miso_near": 206.267857, "rate": 4.507413, "recv": 397.339286, "sla": 0, "sla_status": "unknown", "start_time": "2018-05-21T02:00:40", "uas": null }, "metrics_headers": [ "start_time", "end_time", "rate", "dmin", "davg", "dmax", "dv", "recv", "loss_far", "lost_far", "miso_far", "dmin_far", "davg_far", "dmax_far", "dv_far", "loss_near", "lost_near", "miso_near", "dmin_near", "davg_near", "dmax_near", "dv_near", "es", "es_loss", "es_delay", "es_dv", "es_dscp", "es_ses", "uas" ], "metrics_headers_display": [ "Start time", "End time", "Rate (Mbit/s)", "Min round-trip delay (ms)", "Average round-trip delay (ms)", "Max round-trip delay (ms)", "Average round-trip DV (ms)", "Received packets", "Far-end loss (%)", "Far-end lost packets", "Far-end misorders", "Min far-end delay (ms)", "Average far-end delay (ms)", "Max far-end delay (ms)", "Far-end DV (ms)", "Near-end loss (%)", "Near-end lost packets", "Near-end misorders", "Min near-end delay (ms)", "Average near-end delay (ms)", "Max near-end delay (ms)", "Near-end DV (ms)", "ES (%)", "ES loss (%)", "ES delay (%)", "ES DV (%)", "ES DSCP (%)", "SES (%)", "Unavailable seconds (%)" ], "reflector": 18, "sender": { "ip_version": 4, "name": "eth1", "preferred_ip": null, "test_agent": 1, "test_agent_name": "VTA1" } } ], "task_type": "twamp", } ] } ] }
例 2: DSCP 再マッピング テスト
DSCP 再マッピング テストは、連続メトリックを生成するのではなく、最後に 1 つの結果セットを生成するテストです。他のものと同時に実行することはできません。このテストの出力形式を以下に示します。(テスト結果を取得するための Python コードは、テスト ID を除いて同じです)。
{ "description": "", "end_time": "2019-01-04T07:19:53.000000Z", "gui_url": "https://10.0.157.46/dev/testing/154/", "id": 154, "name": "DSCP", "report_url": "https://10.0.157.46/dev/testing/154/report_builder/", "start_time": "2019-01-04T07:19:49.000000Z", "status": "passed", "steps": [ { "description": "", "end_time": "2019-01-04T07:19:52.000000Z", "id": 154, "name": "Step 1", "start_time": "2019-01-04T07:19:49.000000Z", "status": "passed", "status_message": "", "step_type": "exclusive_task_container", "tasks": [ { "end_time": "2019-01-04T07:19:52", "log": [ { "level": "debug", "message": "Starting script", "time": "2019-01-04T07:19:49" }, { "level": "debug", "message": "Sending from VTA1:eth1 (IPv4) to VTA2:eth1 (IPv4)", "time": "2019-01-04T07:19:49" }, { "level": "debug", "message": "Sending packets", "time": "2019-01-04T07:19:50" }, { "level": "info", "message": "Passed: ", "time": "2019-01-04T07:19:52" } ], "name": "Step 1", "results": { "create": [ { "id": 269, "type": "Table" } ], "update": { "269": { "columns": [ { "name": "Sent DSCP", "type": "string" }, { "name": "Received DSCP", "type": "string" }, { "name": "Test result", "type": "string" } ], "rows": [ [ "cs0 (0)", "cs0 (0)", "Passed" ], [ "cs1 (8)", "cs1 (8)", "Passed" ], [ "af11 (10)", "af11 (10)", "Passed" ], <... (DSCPs omitted)> [ "cs7 (56)", "cs7 (56)", "Passed" ] ], "title": "DSCP remapping results" } } }, "start_time": "2019-01-04T07:19:49", "status": "passed", "status_message": "", "task_type": "dscp_remapping" } ] } ] }
テストに関する PDF レポートの生成
REST API から直接、テストに関する PDF レポートを生成できます。レポートの形式は、コントロール・センター GUI から生成される形式と同じです。
既定では、レポートはテストの最後の 15 分間をカバーします。URL の末尾にあるクエリ文字列に および start
end
パラメーターを含めることで、別の時間間隔を指定できます。時刻は IETF RFC 3339 で規定されているとおり、UTC (ISO 8601) で指定されます。
さらに、次のオプションをクエリ文字列に含めることができます。
worst_num
:テストの各タスクについて、表示する測定結果の数を、最悪のものを一番上に含むエラー秒数でランク付けして指定できます。測定結果の範囲はタスクに依存します。一例を挙げると、HTTPの場合、1つのクライアントで得られた結果です。デフォルトの数は 30 です。graphs
: レポートにグラフを含めます。
例:
# Include graphs graphs = 'true' # Request settings url = '%s/accounts/%s/tests/%s/pdf_report?graphs=%s' % (args.ncc_url, args.account, args.test_id, graphs) # Get test response = requests.get(url=url, headers={'API-Token': args.token}) print 'Status code: %s' % response.status_code print json.dumps(response.json(), indent=4)