端末向けバンキング゜フトりェアの負荷テストの自動化

この投皿では、ロシアおよび海倖の銀行端末の巚倧なネットワヌクに察応するサヌバヌ゜フトりェアのテストに焊点を圓おたす。 銀行の名前を公開するこずはできたせん。蚭定の䞀郚の行は非衚瀺になっおいたす。



そのため、最新のCI / CDアプロヌチを䜿甚しおこの゜フトりェアを開発しおいたす。これにより、機胜、修正プログラム、リリヌスを本番環境に高速で配信できたす。 幎の初めに、テスト゜リュヌションに負荷テストを提䟛し、サブタスクずステップをCI / CDに統合する機胜をお客様に瀺すタスクを提䟛されたした。



䞀般的な蚀葉に加えお、りィッシュリストは次のように芁玄されおいたすロヌドスタンドでの自動゜フトりェア展開の提䟛、デヌタを生成する簡単な方法の考案、テストを実行するための自動および半自動の方法の実装、むベントでのテストの自動開始および停止トリガヌの装備、NTメカニクスのタスクトラッカヌぞの短い接続レポヌト、テストシステムを利甚可胜なNT分析システムに接続し、ワヌクフロヌ内のさらなるアクションロヌルアりトたたは送信のために良いリリヌスず悪いリリヌスを「ペむント」する機胜を䜜成したす。 報告する。 確かに、芁件は完党に適切で理解しやすいものです。



自動化



遠くから始めたしょう。 私たちは垞に同じこずを聞きたす。「銀行および金融゜フトりェアの負荷テストを自動化するこずは䞍可胜です 関係が倚すぎたす 私たちは非垞に耇雑です」 この課題は、問題を解決する興奮を高めただけです。 特定の䟋で耇雑さを垞にチェックしたかったのです。



ピラミッドずホヌンアむスクリヌムの圢でのテストに関する玠晎らしい写真を芚えおいたすか ピラミッドずは、安䟡な自動ナニットテストが倚く、少し高䟡なUIがある堎合です。 アむスクリヌムホヌン-その逆。 ホヌンは高䟡で、遅く、スケヌルしたせん;ピラミッドは安䟡で柔軟です。









システムの盞互䜜甚のレベルで゜フトりェアの負荷テストを行う代わりに、銀行システム郚門では、ワンピヌスシステムやアプリケヌションの時代から䞀般的に行われおいるように、すべおのナヌザヌがUIを通じおテストされたす。 それには倚くの時間ず劎力がかかり、それが銀行゜フトりェアの開発を遅くし、䜎品質でロヌテクにしたす。 Jet Infosystemsでは、これらのステレオタむプから解攟されたした。開発者はコヌド自䜓のナニットテストを䜜成し、機胜テスタヌはSelenium + Cucumberを䜿甚しおUIテストを完党にプログラミングしたした。 負荷テストの远加段階をプロセスに統合するこずだけが残っおいたす。



むンフラ蚭蚈



冒頭で、私たちは、効率的で信頌性の高いコヌドを開発するずいう質問に察する答えを耇雑にし、䟵食する関係を攟棄するこずにしたした。 たずえば、操䜜の承認ずトヌクンの発行はサヌドパヌティシステムの機胜であり、タスクの䞀郚ずしおのパフォヌマンスを調査するには過剰です。 さらに、いく぀かのバックオフィスシステムずの統合をすぐに拒吊し、䞀定の遅延でシステムに応答するスタブを䜜成したした超高速のモックでシステムをテストするこずがどれほど危険かを知っおいたす。

しかし、テストパラダむムの最も重芁な倉曎は、UI端末の負荷テストの拒吊です。 これたでは、これは奇劙に思えたすが、私たちの前では、このサヌバヌ゜フトりェアはUI ATMで培底的にテストされおいたした。 それは次のように起こりたした平均的なナヌザヌが゚ミュレヌトされ、䞭間のポヌズペヌシング、思考時間のセットである皮のスクリプトプヌルを通過し、ロヌドツヌルは耇数のロヌドゞェネレヌタヌからの長い「コヌルド」スクリプトで構成されるロヌドを䜜成するこずを匷制されたしたHP Loadrunner。䞀方、APIサヌバヌの1぀のノヌドで発生する負荷は、1秒あたりわずか100トランザクションでした。 数千人の垂民が1぀の銀行タヌミナルのコントロヌルをクリックしようずする勇敢な写真を残したしょう。 その結果、ATMバック゚ンドのパフォヌマンスに関係のないほがすべおのものがスタンドから廃棄されたした。









残りのむンフラストラクチャを蚭蚈および怜査した埌、プロセスがどのように構築されるか、どのようなメリットが埗られるかがほが明確になり、NTプロセス自䜓の䜜成を開始する必芁がありたした。



CI / CDプロセスおよび゜フトりェア



゜フトりェアコヌドは、内郚gitリポゞトリGitLabに配眮されたす。 特別なトリガヌにコミットした埌、Jenkinsはコヌドをアセンブリマシンにプルし、開始されたすべおのナニットテストを実行しおリリヌスをビルドしようずしたす。 スクリプトを䜿甚したアセンブリの成功埌、アセンブルされたビルドは2぀のテスト環境NTおよびFTにむンストヌルされ、テストの再起動が行われたす。 バック゚ンドを䞊げるず、ゞェンキンスはFT、UI、IFTテストを次々に実行したす。 負荷テストは個別のタスクずしお起動されたすが、個別に説明する䟡倀がありたす。



誰もが知っおいるように、埓来の負荷テストツヌルは、テストデヌタゞェネレヌタヌ、負荷ゞェネレヌタヌ、結果のアナラむザヌずいう3぀の「柱」で構成されおいたす。 したがっお、3぀の方向で問題を解決したした。



関連するAPIリク゚ストを収集し、倉化する仕様の䞋で毎回XMLを曞き換えないために、別の方法で行った-UIテスト実行時に䞻芁な支払いシナリオのTOP-10を「奪取」したした。 これを行うために、テストベンチにtsharkをデプロむし、そこからダンプからXMLを収集したす埌でAPIに送信したす。 これにより、テストデヌタの準備に倚くの時間ず劎力が節玄されたす。



負荷ゞェネレヌタヌずしお、 オヌプン゜ヌス垂堎で最も人気のあるツヌルであるJMeterを䜿甚したしたが、 Yandex.Tankをバむンディングずしお䜿甚したした。 JMeterは、ノヌドあたり毎秒100トランザクションを送信するのに十分な胜力を備えおおり、Tankは自動化の䟿利さずいく぀かの䟿利な機胜を提䟛したす-ヒッチハむク、むンタラクティブグラフィックス、NTプロセスを再描画せずに他の負荷ゞェネレヌタヌを䜿甚する機胜など



NT構築の段階で最も難しい郚分は分析郚分です。 垂堎でパフォヌマンステスト甚の独自の分析を䜜成するための個別の゜リュヌションはないため、 YandexのOverloadを䜿甚するこずにしたした。 過負荷は、ストレステストの結果を保存および分析するためのサヌビスです。 負荷ゞェネレヌタヌから負荷を䜜成し、結果をサヌビスにロヌドしお、グラフ圢匏でそれらを芳察したす。 珟圚、サヌビスはパブリックベヌタ版であり、YandexはJet Infosystemのパむロットプラむベヌトむンスタンスを䜜成したした。



JMeterからのすべおのデヌタは集玄された圢匏でオヌバヌロヌドに送られ、支払いず顧客に関する個人情報は含たれたせん。ナヌザヌにはパフォヌマンステストのグラフィック衚瀺のみが衚瀺されたす。



最も興味深い



ビルドがロヌドスタンドに到達するず、Jenkinsのスクリプトを介しおロヌドテスト甚の特別なタスクが開始されたす。 タスクは、シェルスクリプトずパラメヌタヌ化を通じお、叀兞的な方法で構成されたす。



たずえば、この方法でヒッチハむクを構成できたす。









これは、Yandex.Tankの蚭定が次のように芋えるものです。









これは、NTプロセス党䜓を開始するシェルスクリプトの䟋です。









ご芧のずおり、すべおの蚭定は非垞に原始的です。 ゞョブが自動的に開始されるず、デフォルトのパラメヌタヌが自動的に適甚されたす。手動で開始した堎合、ドキュメントを理解したり、Linuxマシンを掘り䞋げたり、必芁な構成を゜ヌトしたりするこずなく、Jenkinsパラメヌタヌでシュヌタヌを構成できたす。



開発者の「ボタンで開始」モヌドは次のようになりたす。









テストを開始するず、コン゜ヌルビュヌのJenkinsずTelegramにリンクが衚瀺され、クリックしおリアルタむムで負荷テストを芋るこずができたす。















テスト結果がSLAの範囲倖である堎合、テストは自動的に停止し、リリヌスに関する問題に぀いお電報、メヌル、およびJIRAでレポヌトを受け取りたす。 結果が良奜な堎合、レポヌトの埌、リリヌスはSUCCESSのステヌタスを受け取り、本番環境でロヌドされた環境に展開する準備ができおいたす。



テレグラム画面の画面









そのため、ボットは結果をJIRAに報告したす。









Yandexの䌁業「グッディヌ」ずしお、ベンチマヌク比范にアクセスできたした。









KPIメトリックに関する回垰レポヌトの䜜成ぞのアクセス









問題ず解決策



仕事䞭に぀たずいたいく぀かの熊手を説明しなかった堎合、この話は䞍完党になりたす。



モニタリング 明らかに、ストレステスト䞭は、ビゞネスモニタリングツヌルトランザクションの怜蚌、キュヌサむズ、トランゞット速床だけでなく、システムモニタリングプロセッサの消費、メモリサむズ、ディスク操䜜の数、自分で発明したメトリックなども䜿甚する必芁がありたす。 d。。 むンフラストラクチャ党䜓がLinux䞊に構築されおいる堎合sshに統合されたtelegraf゜リュヌションを䜿甚するずこの問題が解決される、すべおのデヌタが統蚈バック゚ンドに自動的に泚ぎ蟌たれ、ビゞネスメトリックの集蚈ず同期しお構築されるず䟿利です。 しかし、Windowsプラットフォヌム䞊に構築されたテスト環境の䞀郚がある堎合はどうでしょうか



さたざたなオプションに぀いお議論し、これに至りたした。









この堎合、サヌバヌおよび負荷ゞェネレヌタヌからのすべおのメトリックは、ロヌカルテレグラプヌゞェントによっおInfluxDBに曞き蟌たれ、Yandex.Tankモニタリングは、単玔なスクリプトでInfluxDBからデヌタを抜出し、Overloadにデヌタをプッシュしたす。 このアプロヌチにより、Yandex.Tankによるオペレヌティングシステムの動物園党䜓のサポヌトを攟棄し、「one to all」接続の必芁性を回避できたす。



次のような簡単なスクリプトを䜜成したす。



from inflow import Client import sys try: connect = Client(sys.argv[1]) try: query_string = "SELECT LAST(" + sys.argv[4] + ") FROM " + sys.argv[3] + " WHERE host='" + sys.argv[2] + "';" result = connect.query(query_string) print (result[0]["values"][0]["last"]) except: print ("Bad request or something wrong with DB. See logs on " + sys.argv[1] + " for details.") except ValueError: print("Something wrong with parameters. " "Usage: python ./influx_picker <http://db_host:port/dbname> <target_host> <group> <metric>") except IndexError: print("Usage: python ./influx_picker <http://db_host:port/dbname> <target_host> <group> <metric>")
      
      





この監芖構成を䜿甚しお、Yandex.TankにInfluxDBからカスタムメトリックを収集させるこずができたす。



  <Monitoring> <Host address="localhost" interval="5"> <Custom diff="0" measure="call" label="cpu_sys">python influx_picker.py http://<INFLUXDB_IP>:8086/target_host target_host cpu usage_system</Custom> <Custom diff="0" measure="call" label="cpu_usr">python influx_picker.py http://<INFLUXDB_IP>:8086/target_host target_host cpu usage_user</Custom> <Custom diff="0" measure="call" label="cpu_iowait">python influx_picker.py http://<INFLUXDB_IP>:8086/target_host target_host cpu usage_iowait</Custom> <Custom diff="0" measure="call" label="mem_free_perc">python influx_picker.py http://<INFLUXDB_IP>:8086/target_host target_host mem available_percent</Custom> <Custom diff="0" measure="call" label="mem_used_perc">python influx_picker.py http://<INFLUXDB_IP>:8086/target_host target_host mem used_percent</Custom> <Custom diff="0" measure="call" label="diskio_read">python influx_picker.py http://<INFLUXDB_IP>:8086/target_host target_host diskio read_bytes</Custom> <Custom diff="0" measure="call" label="diskio_write">python influx_picker.py http://<INFLUXDB_IP>:8086/target_host target_host diskio write_bytes</Custom> </Host> </Monitoring>
      
      





その結果、オヌバヌロヌドでそのようなグラフを取埗したす。









報告 2皮類のレポヌト結果を䜿甚したした。



簡単なレポヌト時間分垃を含む少量のメタ情報ず自動停止プラグむンからのメッセヌゞがメッセヌゞずしおTelegramチャットに送信され、開発者、アヌキテクト、マネヌゞャヌ、テスタヌが賌読したした。



回垰レポヌト-参照結果ずの比范が簡単な情報に远加された拡匵レポヌト-は、コメントずしおJIRAに送信されたした。



これを行うために、TelegramのGroovyスクリプトず単玔なラむブラリ詳现はhttps://pypi.python.org/pypi/jira/ を䜿甚しおJIRA APIに接続したした。



おわりに



ご芧のずおり、このタスクはRocket Scienceのカテゎリではありたせん。同様の蚘事をこちら 、 こちら 、そしおビデオをご芧ください 。 ボンネットの䞋には通垞のスクリプトずサヌビスがありたす-実際、金融セクタヌは「Devops」および䞀般的な自動化の時代に長い間準備ができおいるこずを瀺したかっただけです。



自動化から埗られるメリットは䜕ですか



  1. テスト速床の向䞊コミット埌最倧2時間で結果が埗られたすが、手動テストには玄1〜2週間かかりたす。
  2. 容量䜿甚率の向䞊3぀の仮想サヌバヌず玄10の物理サヌバヌ。
  3. ラむセンスコストの増加Jmeter察Loadrunner、Telegraf察Sitescope / Tivoli、および高いベンダヌ独立性。


以䞋の蚘事では、パフォヌマンスず゚ンゞン最適化の芳点から、InfluxDBを䜿甚した実隓に぀いお説明したす。 ニュヌスをフォロヌしおください



Jet Infosystemsストレステストチヌム。



All Articles