テスト環境の準備、たたは必芁なテストむンスタンスの数

プロゞェクト内のテストベンチの数は5、10、たたは10を超えおいたすか 手っ取り早く、各開発チヌムのスタンド、各プロゞェクトのQAのスタンド、プロゞェクトマネヌゞャヌもスタンド、およびCIが必芁です。これをすべお正確に区別するこずは難しく、競合状況を匕き起こしたせん。 ぀たり、必芁なずきに正確にテストベンチを䜜成しおみたせんか テストベンチが必芁になりたした-䜜成したしたが、䞍芁です-削陀したした。



Alexander Dubrovin  adbrvn が圌のレポヌトでHighload ++ 2017で提案したのはこのアプロヌチでした 。







スピヌカヌに぀いお Alexander DubrovinはSuperjobで働いおいたす。 この䌚瀟のプロゞェクトは非垞に負荷が高いこずが知られおいたす。 しかし、今日はポヌタルにアクセスするナヌザヌの数やサヌバヌに保存されるデヌタの量に぀いおは説明したせんが、他のむンゞケヌタヌに぀いおは觊れたす。



将来を芋据えお、実際には、Superjobはテストスタンドの数を知りたせん。 しかし、たず最初に。 ちょっずした話から始めたしょう。



ちょっずした歎史







小さなプロゞェクトSを想像しおください。どこかにコヌドをテストする必芁がある開発者チヌムがいたす。 テストを敎理するために、テストマシンを配眮し、実皌働のように芋せ、そこでコヌドをロヌルし、実行したす。開発者はそこでテストを行うこずができたす。



ある時点で、チヌムは成長し始め、テスタヌのスタッフが必芁になりたす。 QAスペシャリストが登堎し、どこかでテストする必芁もありたす。



簡単なアプロヌチを䜿甚できたす-テスタヌに​​いく぀かの領域を割り圓お、そこで同じコピヌを転がすず、圌らはすでにテストできたす。 すべおが玠晎らしいず良いです





プロゞェクトは成長を続け、远加の開発チヌムが珟れたす。 たた、どこかでテストする必芁がありたす。 このアプロヌチはすでによく知られおいたす-テストサヌバヌの別の郚分を分離したす。



しかし実際には、チヌムも成長しおいたす-1぀のテストベンチでは十分ではありたせん。 たた、より倚くのタスクを実行するため、テスタヌは倚くのテストを行う必芁がありたす。







この段階で、面癜い話に気づき始めるこずができたす。 䜕らかの問題をテストしたいテスタヌVasyaがいるずしたす。 圌はテストベンチを遞択し、そこでコヌドを転がしおテストを開始したす。 圌はクリックし、クリックし、䜕かが正しくないこず、䜕かが機胜しおいないこず、そしお䞀般的にタスクが完了しおいないこずを認識したす。



チケットはJIRAに萜ち始め、開発者は次の蚀葉でVasyaの近くに集たり始めたす。 「そしお、最終的に誰かが尋ねたす」そしお、あなたはテストのためにどのブランチを展開したしたか ブランチはすぐに修正され、JIRAのチケットはクロヌズされたす。すべお問題ありたせん。 Vasyaはテストを続け、すべおが圌のために機胜しおいたす。



しかし、この時点で、郚屋の反察偎で、Vovaの開発者は「奇劙なこずですが、なぜ私にはうたくいかないのですか」ず考えたす。しかし、圌はすぐにブランチが同じではないこずに気付きたす。 必芁なものを展開するず、Vasyaは再び問題を抱えおいたす。



数回の反埩で、圌らは同じテストベンチでテストしおいるだけで、互いに干枉し合っおいるこずに気付きたす。 その結果、 時間の浪費 、VasyaずVovaは䞍幞です。



別の話。 開発者のKolyaはVasinaの問題を知っおおり、事前に圌に来お、どのテストベンチが珟圚無料かを尋ねたす。 Vasyaは無料を瀺し、すべおが順調です。 数日埌、圌らは再び䌚い、VasyaはKolyaに尋ねたす。「テストベンチを私たちに返したすか 1時間かけお、2日が経過したした。」



そしお再び問題-開発者が別のスタンドを探すか、テストが完了するたで誰もが元気に埅぀でしょう。



実際、䞊の図にすべおが衚瀺されおいるわけではありたせん。 マネヌゞャヌが䞍足しおいたす。 マネヌゞャヌは、ただテストされおいない生のコヌドを芋たい堎合がありたす。 アプロヌチは暙準です-テストサヌバヌのコヌナヌを再び匷調衚瀺し、テストスタンドを䜜成したす。



このシステムの最埌の郚分はもちろんCIです。圌はどこかで撮圱し、どこかでテストしたいず考えおいたす。



このようなスキヌムをスムヌズに開発するこずで、テストベンチの制埡䞍胜な倉曎を取埗できたす 。 このようなスタンドを実際に制埡しないずいう点で、このスキヌムは良くありたせん-わかりたせん





さらに、どのテストベンチが珟圚無料であるかはわかりたせん。その時点でいく぀かのキュヌが存圚する可胜性がありたす。



アむデア



この瞬間、私たちは考えたした-䜕をすべきか なぜこれほど倚くのテストスタンドが必芁なのですか 必芁なずきに正確にテストベンチを䜜成しおみたせんか テストベンチが必芁になりたした-䜜成したしたが、䞍芁です-削陀したした。



このアむデアの次のステップは、各コヌドブランチのテストベンチを䜜成するこずです。



良いアむデアのように思えたすが、技術的なニュアンスがありたす。 スタンドが必芁です。





理想的には、「 テストベンチを䜜成する 」ボタンが1぀必芁です。



厳しい珟実



私たちが持っおいる厳しい珟実がただありたす





そしお、ある時点で、テスタヌはこれをすべおテストしたいず思うでしょう。 珟圚りクラむナでテストしおいなくおも、明日はりクラむナ偎の特別なペヌゞを䜜成するタスクがありたす。これも考慮する必芁がありたす。



すぐに蚀っおやった



Docker / docker-compose



たず、テストスタンドを分離し、可胜な限り同様にする必芁があるずいう事実に぀いお説明したした。 最近では、これによりdockerを実装できたす。 コンテナを実行する機䌚が䞎えられたす。 明らかに、 1぀のコンテナで管理するこずはありたせん 。さらに、同様のスタックをたくさん起動する必芁がありたす。 したがっお、 docker-composeが必芁です。



玠晎らしい-私たちは枯湟劎働者を䜿甚したす-それはスタむリッシュでファッショナブルな若者です。



モノリスを芋た、サヌビスを遞択



Dockerはマむクロサヌビスアプロヌチを掚進しおいたすが、ここではモノリスがあるために問題に盎面しおいたす。



マむクロサヌビスでモノリスを削枛するのにかかる費甚を芋積もろうずしたこずはありたすか 明らかに、この数字は人幎で枬定されたす。



ある時点で、システムのコンポヌネント図を芋お、ここにロヌドバランシングがあるこずを確認したした。ここはphpアプリケヌション、ここはnode.jsアプリケヌションです。 サヌビスずしおそれだけを始めおみたせんか。 Dockerコンテナで実行できるものを芋぀けたしょう。



ネットワヌクを蚭定したした



さらに、テストベンチに䜕らかの方法で到達する必芁がありたす。 圓然、ブラりザがテストスタンドを開くこずができるように80番目のポヌトを匕き出す必芁がありたすが、同じマシン内でそのようなスタンドを起動する堎合は、IPを発行する必芁がありたす。



ドキュメントには、ネットワヌクのセットアップに関する倧きなセクションがありたす。



Dockerはさたざたなタむプのネットワヌクを䜿甚できたす。 私たちの堎合、macvlanのようなネットワヌクが本圓に圹立ちたした。 これは、1぀の物理ネットワヌクむンタヌフェヌスに仮想ネットワヌクむンタヌフェヌスのバンドルを実装できるテクノロゞヌです。 同時に、docker自䜓がこれらのむンタヌフェむスを管理したす䜜成、マシンぞの远加、ホストマシンに関連する倖郚IPアドレスの受信。



したがっお、コンテナヌのパックを開始し、フロントコンテナヌバランサヌに倖郚IPアドレスを取埗し、その80番目のポヌトを開く機䌚を䞎えるこずができたす。 ブラりザを䜿甚しお、すでにそこをノックするこずができたす。



DNSずAPIを䞊げる



ドメむンゟヌンず倚数のサブドメむンがあるこずを芚えおいたす。 したがっお、2番目のレベルのドメむンでのみテストベンチにアクセスできたす。 巚倧なプラスず巚倧なマむナスの䞡方がありたす





したがっお、 明確で簡朔で明確なアドレスを取埗したす 。このアドレスには 、すでにコヌド分岐の指瀺が含たれおいたす。



欠点は本圓に簡単です。 ドメむンをオヌバヌラップする必芁がある堎合は、プレフィックスを远加するだけで、オヌバヌラップするドメむンのセットを制限したす。これは既に我慢できたす。



この䟋では、sjプレフィックスを遞択したした。 ドメむンをsjプレフィックスのみでオヌバヌラップする必芁があるこずがわかりたす。明らかにこれらの倚くはありたせん。



DNSのもう1぀の郚分はAPIです。 すでに述べたように、テストスタンドをすばやく䞊げる必芁がありたす。 したがっお、自動モヌドのAPIで゚ントリをすばやく远加および削陀できるDNSサヌバヌが必芁です。



゜リュヌションはPowerDNSです。 このサヌバヌを䜿甚するず、APIをすばやく簡単に固定し、スクリプトを䜿甚しおテストスタンドを远加および削陀できたす。



いいね DNSを䜜成および構成し、コンテナにIPを登録するように教えたしたが、䜕かが欠萜しおいたす。



SSL-CAの䜜成



私たちは21䞖玀に䜏んでいたす。 明らかに、すべおのむンタヌネットSSLおよびテストスむヌトはSSLをサポヌトする必芁がありたす 。 十分なバグはSSL固有のものであり、混合コンテンツは氷山の䞀角にすぎたせん。



合蚈で、蚌明曞を迅速に取埗し、それを䞊昇䞭のテストベンチに迅速に適甚する方法が必芁です。 圓瀟にはすでにOpenSSLに基づく認蚌局がありたした。 ここでは、自転車を曞く簡単な方法を䜿甚したした。



自転車は1日で䜜成され、GET芁求を䜿甚しお、特定のドメむン名に察しお既に生成された蚌明曞を受信できたす。



最小のたたです。 このすべおを1぀のボタンで行いたいため、これを自動化する必芁がありたす。



自動化



私たち自身の初期段階では、テストベンチを単玔に䞊げるか削陀するこずができるコン゜ヌルスクリプトを䜜成したした。



明らかに、これはテスタヌに​​ずっおあたり䟿利ではありたせん。 したがっお、たずえば、テストベンチを組み立おお実行する特別なアセンブリを䜜成できたす。



しかし、実際には、この点で最もクヌルなステップは、JIRAチケットにそのようなボタンを盎接远加するこずです。 テスタヌがJIRAチケットを開き、リク゚ストを読み取り、ボタンを抌しお、数分でテストベンチを受け取るず想像しおください。



長所





短所



しかし、スタンドの管理には埮劙な欠点もありたす 。 それらを正しく管理する方法を孊ぶ必芁がありたす。



システムの最初のバヌゞョンを叀い脆匱なサヌバヌに展開し、新しいブランチごずにテストスタンドの䜜成をセットアップしたした。 もちろん、1日か半分でサヌバヌが察凊できたせんでした -単に倚くのブランチがあるからです。



次に、それらの自動䜜成を停止し、JIRAにボタンが衚瀺され、CIはテストスタンドの開始ず停止、ログの収集を孊びたした。



このシステムでは解決できないタスクのクラスが間違いなくありたす。 たずえば、頻繁に発生するポップアップの問題は、すべおのコンテナの合蚈時間です。 サヌバヌの時間をずらしお、いく぀かのタスクをテストするず䟿利です。 残念ながら、このシステムではこのような問題を解決するこずはできたせん。 ただし、テストのためにコヌドに特別なブランチを远加するこずにより、このような問題を解決できるため、たずえば、2週間埌のフォヌムの動䜜を確認できたす。



たずめ



入り口にはテストベンチのシステムがあり、テストベンチを探すこずを䜙儀なくされ、これらのテストベンチで誰も干枉しないずいう保蚌はありたせんでした。



「Vasya、そしおどんな皮類のテストが無料です-私は自分のタスクをテストするのです。」



出力は1぀のボタンで 、クリックしお数分で特定のバヌゞョンのコヌドの完成したテストベンチを取埗できたす。 耇数の人がこのスタンドを䜿甚しおいる堎合でも、これらの人がこの特定のバヌゞョンのコヌドを芋たいず思うこずが保蚌されおいたす。



「ボタンを抌すず、1分半で特定のタスク甚の新しいテストスタンドが手に入りたす。」



ボヌナスずしお、すべおのテストをワンクリックで取埗できたした。 先ほど蚀ったように、CIから盎接分岐するすべおのテストは、1぀のボタンで遞択されたす。 その埌、マシンはすべおを実行したす。テストベンチを䞊げ、発射し、ログを収集しお削陀したす。



最初の質問に戻りたすが、テストスタンドはいく぀必芁ですか。 必芁なテストスタンドの数はわかりたせん。今日必芁なテストスタンドは20、明日-15、明埌日の25です。



しかし、 ここで必芁な数のテストベンチがあるこずは確かです。



時間が経ち、 RIT ++カンファレンスフェスティバルの前にはほずんど残っおいたせんが、5月28日ず29日にスコルコボで開催されるこずを思い出したす。 この機䌚を利甚しお、幅広いリスナヌ向けのRootConfアプリケヌションの小さなセレクションを玹介したす。





あなたはただチケットを予玄するこずができたすが、忘れないでください、䟡栌は着実に増加しおいたす。




All Articles