Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ネットワークテスト自動化システムの実適用 / The application of test ...

tjmtrhs
December 07, 2017

ネットワークテスト自動化システムの実適用 / The application of test automation framework in physical network management

ネットワークへの要求にも迅速にサービス提供する必要がありますが、物理的なリソースを扱うネットワークのテストは時間がかかっていました。
我々の開発したテスト自動化システムを実適用することで運用業務を軽減することができました。
さらにワークフローに組み込むことでテストファーストな開発をネットワークにも導入できることを示します。
To respond to various functional requirements and environmental changes to the network,
it is necessary to construct network systems more quickly and efficiently than before.
However, due to physical restrictions, there has been a bottleneck in the repetitive execution of comprehensive functional network
even when making relatively small changes to the network.
To solve this problem, we developed an automatic test framework of the physical network
and applied it to the actual network systems. As a result, we were able to reduce operating costs.
Moreover, by incorporating this framework into the current operational workflow,
we showed that we could introduce test-first development methodology to network management.

tjmtrhs

December 07, 2017
Tweet

More Decks by tjmtrhs

Other Decks in Technology

Transcript

  1. ネットワークテスト 自動化システムの実適用 The Application of Test Automation Framework in Physical

    Network Management 1 沖縄オープンラボラトリ ネットワークテストシステム プロジェクト (新日鉄住金ソリューションズ株式会社)田島 照久 (TIS株式会社)村木 暢哉 Okinawa Open Days 2017 (Day4) 2017/12/07 @沖縄県市町村自治会館
  2. なぜNWのテストは自動化が進まないのか 物理機器の各種作業が必要 設置場所が遠隔地 物理配線の変更 複数機器にまたがる操作手順 テスト対象の組み合わせ爆発 5 ネットワークは繋がるもの 届きさえすれば中の設定は画一的 テストも1つに着目、ツールも色々

    ネットワークは繋げるもの 色々な機器の整合性を取る必要がある… テスト?現地の人手作業… これらを解決し ユースケースによる テストをしよう (ソフトウェア開発の知見を拝借)
  3. テスト自動化とこれまでの取り組み 6 テスト対象 NW(トポロジ)の操作 テスト対象 NW機器の設定 テスト対象サーバ (サービス)の設定 テスト用ノードの 作成・テスト実行

    テスト用ノードを 対象NWへ接続 テストのための多様なトラフィック生成、 トラフィックの送受信 テストの結果判定 複数ノードの同時制御(client/server etc) 物理・論理構成に対するテストパターンの網羅 必要なテストトラフィックを 必要なポイントで入出力させるための仕組み 物理トポロジのソフトウェアによる操作 障害模擬・物理経路の系切替試験実行 NW機器インタフェース(CLI/REST/NETCONF…) による機器コンフィグレーション、機器状態取得 テスト対象の物理・論理リソース、 サービスの設定・セットアップ ユースケースから各種作業へ分解 テスト全体のオーケストレータ Test Scenario (Cucumber) 済 済 済 済 実際の業務へ適用できる段階 PJ外 PJ外
  4. 実適用の成果 8 適用前 繋げて! 設定うまくで きてるか不安 終わったよ 本当につなが るか確かめな くっちゃ

    どこが悪い のだろう… 適用後 うまくつな がらないん だけど 繋げて! 全パターンテス トしたから確実 終わったよ 安心して使える 利用者 運用者
  5. 導入したシステム構成(詳細は後述) 9 Test Scenario API NetTester Server 1 OFS テスト対象

    ネットワーク (VPLS網) テストシナリオ 実行サーバ tcp/3000 (REST API) テストシステム用 セグメント Operator (テスト実行者) 拠点1 各拠点 操作シナリオ 記述 (RubyCucumber) OFS Test Nodes (NetNS) NetTester Server N …… コマンド実行 拠点N
  6. 実適用で得られたフィードバック 効果が認められたコメント 実際に設定ミスを事前検知できて助かった テストは実行しやすい方が良い  SSHログインするのは従来結構な手間 業務フロー変化を伴う試行ならではのコメントも テストのための機器事前設定は極力少なくしてほしい  作業量が増加した上にオペレーションミスが誘発されることを懸念

     設定自動化の中でフォローしていくなど、今後の課題 CE上で手動でステータスを確認するのと違いがわからない  DevOpsでありがちな、単なるツール導入に陥る可能性  作業均質化のメリットなど、なぜ必要かを組織に浸透させる必要がある 11
  7. NWテストにかかるコストの真相 12 テストのコストは見えにくい 繋げて! 設定しよう 終わらな い・・・ テストをしなかった場合 暗黙的にユーザが負担 問題発生時に信頼度の低下

    作業時のミス対策などのコスト増加 人海戦術のテストをした場合 カバレッジとテスト時間のバランス 現地作業員のアサイン・出張 テスト失敗したときの再実施コスト大 テスト NWテスト自動化で解消
  8. テスト自動化システムの構成 14 Test Scenario API NetTester Server 1 OFS テスト対象

    ネットワーク (VPLS網) テストシナリオ 実行サーバ tcp/3000 (REST API) テストシステム用 セグメント Operator (テスト実行者) 拠点1 各拠点 操作シナリオ 記述 (RubyCucumber) OFS Test Nodes (NetNS) NetTester Server N …… コマンド実行 拠点N
  9. 課題をどう解決したのか 多拠点間テスト対応時のコンポーネント疎結合化と役割分担 テストシナリオと環境制御機能の分離  各拠点を担当するテストシステムの単位 “TesterSet (NetTester+OFS)”を定義  テストの主体=テストシナリオが全体のテスト状況を制御する ✓

    必要に応じTesterSetに制御を指示  NetTesterは設計前提から部品であり具体的なテストと実行内容を知る必要はない ✓ NetTesterはステートレスな単発処理(ホスト起動、繋ぎ込み、コマンド実行)に専念 ✓ 単拠点の機能を遠隔から要求に応じて実行可能にする形へ  SSHでの指示は鍵管理が複雑 → RESTで指示を定義 16 Test Scenario (Cucumber) テスト対象NW tcp/3000 (REST API)
  10. テストシナリオ 実行サーバ 動作の全体像 18 18 NetTester Server 1 OFS (Pica8)

    テスト対象 ネットワーク (SOで作成した 利用者セグメント) tcp/3000 (REST API) テストシステム用 セグメント Operator (テスト実行者) ssh (CLI) 拠点1 各拠点 操作シナリオ 記述 (RubyCucumber) OFS (OVS) Test Nodes (NetNS) TestNode起動 コマンド実行 パッチ実行 Trema起動 TestNode起動 コマンド実行 NetTester Server N …… TestNode起動 コマンド実行 拠点N テストコマンドによる TestNode間の トラフィック テストシナリオ 実行 Test Scenario 他システム REST API
  11. 1.テストシナリオ実行要求 19 19 Test Scenario NetTester Server 1 OFS (Pica8)

    テスト対象 ネットワーク (SOで作成した 利用者セグメント) テストシナリオ 実行サーバ tcp/3000 (REST API) テストシステム用 セグメント Operator (テスト実行者) ssh (CLI) 拠点1 各拠点 操作シナリオ 記述 (RubyCucumber) テストシナリオ 実行 NetTester Server N …… 拠点N 拠点:1…N テスト内容:ping
  12. 2.シナリオに従い、各拠点を初期化 20 20 Test Scenario NetTester Server 1 OFS (Pica8)

    テスト対象 ネットワーク (SOで作成した 利用者セグメント) テストシナリオ 実行サーバ tcp/3000 (REST API) テストシステム用 セグメント Operator (テスト実行者) 拠点1 各拠点 操作シナリオ 記述 (RubyCucumber) OFS (OVS) Trema起動 TestNode起動 コマンド実行 NetTester Server N …… 初期化 拠点N 各拠点初期化 NetTester等 コンポーネントの初期化
  13. 3.各拠点にノード作成 21 21 Test Scenario NetTester Server 1 OFS (Pica8)

    テスト対象 ネットワーク (SOで作成した 利用者セグメント) テストシナリオ 実行サーバ tcp/3000 (REST API) テストシステム用 セグメント Operator (テスト実行者) 拠点1 各拠点 操作シナリオ 記述 (RubyCucumber) OFS (OVS) Test Nodes (NetNS) パッチ実行 NetTester Server N …… TestNode起動 拠点N ノード作成・ テスト対象NWへ接続 拠点1にAAを作成 拠点1にBBを作成 拠点NにXXを作成 拠点NにYYを作成
  14. 4.各拠点でコマンド実行 22 22 Test Scenario NetTester Server 1 OFS (Pica8)

    テスト対象 ネットワーク (SOで作成した 利用者セグメント) テストシナリオ 実行サーバ tcp/3000 (REST API) テストシステム用 セグメント Operator (テスト実行者) 拠点1 各拠点 操作シナリオ 記述 (RubyCucumber) OFS (OVS) Test Nodes (NetNS) NetTester Server N …… コマンド実行 拠点N テストコマンドによる TestNode間の トラフィック 拠点1のAAで 「ping XX」を実行 拠点1のBBで 「ping YY」を実行 各ノードでコマンド実行
  15. 5.各拠点からコマンド実行結果を回収 23 23 Test Scenario NetTester Server 1 OFS (Pica8)

    テスト対象 ネットワーク (SOで作成した 利用者セグメント) テストシナリオ 実行サーバ tcp/3000 (REST API) テストシステム用 セグメント Operator (テスト実行者) 拠点1 各拠点 操作シナリオ 記述 (RubyCucumber) OFS (OVS) Test Nodes (NetNS) NetTester Server N …… 実行結果回収 拠点N AAのログ回収 BBのログ回収 保存してあった 実行結果を送信
  16. 6.シナリオと比較し、テスト成否を判断 24 24 Test Scenario NetTester Server 1 OFS (Pica8)

    テスト対象 ネットワーク (SOで作成した 利用者セグメント) テストシナリオ 実行サーバ tcp/3000 (REST API) テストシステム用 セグメント Operator (テスト実行者) 拠点1 各拠点 操作シナリオ 記述 (RubyCucumber) OFS (OVS) Test Nodes (NetNS) テスト実行結果 NetTester Server N …… 拠点N シナリオに設定された 要件表と比較 差分が無ければ テスト成功
  17. 7.テスト結果をもとに続行/中止を判断 25 25 Test Scenario NetTester Server 1 OFS (Pica8)

    テスト対象 ネットワーク (SOで作成した 利用者セグメント) テストシナリオ 実行サーバ tcp/3000 (REST API) テストシステム用 セグメント Operator (テスト実行者) 拠点1 各拠点 操作シナリオ 記述 (RubyCucumber) OFS (OVS) Test Nodes (NetNS) テスト実行結果 NetTester Server N …… 拠点N テストが成功たから 設定は完了 or 失敗したから 設定見直そう
  18. 参照 NetTesterリポジトリ https://github.com/net-tester net-tester : NetTester本体 scenario-api : シナリオ実行APIサーバ multisite-examples

    : 多拠点対応シナリオサンプル デモ動画 https://youtu.be/DhKutgqYdSw 2016年度の活動 https://github.com/net-tester/examples 27