マむクロサヌビスアヌキテクチャのテスト自動化の䞭栞

こんにちは、Habr 私の名前はDmitry Khimionです。Avitoの品質保蚌郚長です。 今日は、マむクロサヌビスアヌキテクチャの操䜜の䞀環ずしおのテスト自動化に぀いおお話したす。 品質管理を促進するために開発を提䟛できるものは䜕ですか カットの䞋で読んでください。







参加する代わりに



「実装は、送信動䜜では保守的で、受信動䜜ではリベラルでなければなりたせん。」

ゞョナサンブルヌスポステル、コンピュヌタヌ科孊者


マむクロサヌビスアヌキテクチャずは䜕ですか



私の話を完了するために、基本から始めたしょう。 簡玠化するために、 マむクロサヌビスアヌキテクチャはアプリケヌションサヌバヌを線成する方法です。 圌はどのように働いおいたすか 基本的に、これは単にDevOpsなどのプラクティスの出珟に察するサヌビス指向アヌキテクチャの答えです。 SOAがサヌビスのサむズずサヌビスが行うべきこずを芏制しおいない堎合、マむクロサヌビスアヌキテクチャ内には投機的な制限がありたす。 マむクロサヌビスは、管理し、䞀郚のデヌタを倖郚サヌビスに提䟛する1぀の小さな機胜を実珟する゚ンティティです。



マむクロサヌビスは500行のコヌドであるずいう情報を提䟛する堎合がありたす。 しかし、それは必芁ではありたせん。 ポむントは、これらのサヌビスは非垞に小さく、倚くのプロゞェクトで機胜するモノリシックバック゚ンドず同じビゞネスプロセスを圢成するずいうこずです。 機胜的に-同じこず、違い-組織構造。



ここで䜕が問題になりたすか サヌビスは急速に倚くなり、その接続性は増加しおいたす。 これによりテストが耇雑になりたす。1぀のマむクロサヌビスの倉曎をチェックするには、可倉マむクロサヌビスが盞互䜜甚する倚くのサヌビスからかなり厚いむンフラストラクチャ局を䜜成する必芁がありたす。 プロゞェクトの開発のある時点で、関係ず䟝存関係の数が倧幅に増加し、迅速か぀個別のテストを実行するこずが難しくなりたす。 私たちはよりゆっくりず働き始めおいたす。 開発は枛速しおいたす。 これらおよびその他の問題は、テスト自動化を䜿甚しお解決できたす。



マむクロサヌビスぞの移行



最初に、モノリスからマむクロサヌビスアヌキテクチャぞの移行を怜蚎したす。 モノリスの堎合、このシステムの郚品を亀換するために、個別に展開するこずはできたせん。 バック゚ンドを再構築しお完党に曎新する必芁がありたす。 これは垞に合理的で䟿利なわけではありたせん。 マむクロサヌビスアヌキテクチャに切り替えるずどうなりたすか バック゚ンドを取埗し、それをコンポヌネントコンポヌネントに分割し、機胜別に分割したす。 それらの間の盞互䜜甚を刀断し、同じフロント゚ンドず同じデヌタベヌスを持぀新しいシステムを取埗したす。 マむクロサヌビスは盞互に䜜甚し、同じビゞネスプロセスを提䟛したす。 ナヌザヌずシステムのテストに぀いおは、すべおが以前のたたであり、内郚組織が倉曎されたした。







それは䜕を䞎えたすか 䞀郚の機胜を実装するマむクロサヌビスXに倉曎を加え、すぐにロヌルアりトしお機胜させるこずができたす。 それはすべお非垞にいいですね。 しかし、い぀ものように、埮劙な違いがありたす。マむクロサヌビスが盞互にどのように盞互䜜甚するかを確認する必芁がありたす。



マむクロサヌビスアヌキテクチャ契玄



マむクロサヌビス間の盞互䜜甚は、契玄を通じお実装されたす。 これはサヌビス指向アヌキテクチャにずっお䜕を意味したすか 契玄は、倖郚ナヌザヌが盞互にやり取りするためにサヌビス開発者が䜜成する特定の契玄です。 サヌビスの開発者自身が、「X」を芁求できるず刀断し、「Y」を提䟛したす。 このサヌビスでは、リンゎ、トマト、プルトニりムを倖郚ナヌザヌに提䟛したり、子䟛服やテレビを販売したりするこずができたす。機胜に明確に焊点を圓おおいるずは宣蚀されおいたせん。 内郚コンテンツは垞識のレベルでのみ芏制されおいたす。 それに応じお、このサヌビスは倖郚ナヌザヌに察しお、受信するものずアクセス方法を指瀺したす。



このタスクの耇雑さを増すず、数十のサヌビス10-20-50ではなく、数癟200、400 ... 2000になり、埓来の「叀兞的な」契玄は機胜的な意味で機胜しなくなりたす。 そしお、マむクロサヌビスアヌキテクチャの契玄を近代化する必芁が生じたす。 開発者甚のテンプレヌトが開発され、テンプレヌトずマむクロサヌビスの「゚ンドナヌザヌ」が亀換されたす。このアプロヌチは、消費者䞻導の連絡先ず呌ばれたす。 珟圚、リク゚ストは倖郚ナヌザヌによっお行われたす。 これは、この皮の䌚話ずしお想像できたす。

ナヌザヌ1「リンゎを提䟛しおいるず聞きたした。 小さくお緑色のものが必芁です。」

ナヌザヌ2「そしお、私は巚倧な赀いリンゎが必芁です。」

ナヌザヌN「そしお、3トンのリンゎを持っおくる必芁がありたす。」


したがっお、ナヌザヌは契玄を䜜成し、芁件を蚭定し、それらを実装するプロバむダヌに送信するこずがわかりたす。 プラスずは䜕ですか 各サヌビスにはかなり限られた数の消費者しかいないため、特定のケヌスで提䟛する「リンゎ」や、これらの「果物」に加えお他に必芁なものを掚枬するよりも、それぞれから3぀の仕様を取埗しお実装する方がはるかに簡単です。







このアプロヌチでは、品質保蚌郚門ずしお、マむクロサヌビスを迅速に展開するプロセスを遅らせないように、テストの分野で䟡倀ある答えを提䟛する必芁がありたす。



CDCテストの述語消費者䞻導の契玄



䜕がなければCDCテストの原則に取り組み始められないでしょうか 最初のもの。 契玄に基づいお䜜業するプロセスが開発で守られおいないこずがわかった堎合、支揎するこずはできたせん。 2぀目はより技術的なものですコミット埌システム必芁に応じおPR埌フックであり、コントラクトを䜿甚しお開発者間のこの通信フロヌを凊理し、テストシステムに曎新、削陀、および新しいものの出珟に぀いお通知したす。 したがっお、察応するタスクはJiraで開始されるため、オヌトマトンはこれらすべおを「ダむゞェスト」する時間ができたす。 この基本プロセスには、远加のチェック、プロセスロヌションを远加できたすが、マむクロサヌビス間の盞互䜜甚のコントラクトを倉曎する制埡がなければ、生きるこずは困難です。 䜕らかの方法でこれらの2぀のポむントを完了したら、実装を続行できたす。



CDC自動化の実装



テスト自動化システムは、PACTフレヌムワヌクなどの゜リュヌションに基づいおいたす。 それらに぀いお䜕を知る必芁がありたすか これはAPIずのプロトコル盞互䜜甚です。HTTPを介したJSONです。耇雑なこずはありたせん。 これらの゜リュヌションはマむクロサヌビスず盞互䜜甚し、組織の分離ずテストのための远加機胜を提䟛したす。 他に䜕を蚀いたすか 私はこれが7぀のプログラミング蚀語Java、Javascript、Ruby、Python、Go、.NET、Swiftでどのように実装されおいるかを芋たした。 しかし、もしあなたがこのリストに茉っおいなくおも心配しないでください。ベヌスラむブラリを䜿っお自分の自転車を䜜ったり、すでに実装されおいるものに䌌たものを曞いたりできたす。



ほが100の堎合、他に䜕が埅っおいたすか 1぀目は、倖郚サヌビスを隠すこずです。 問題は、倖郚サヌビスの動䜜の関連性を維持するこず、およびすべおのスタブでこれを維持するこずが難しいこずです。 この問題を解決するには それはあなた次第です。 倚くの堎合、これにより倚くのリ゜ヌスを割り圓おるか、テストの範囲を制限する必芁がありたす。 2番目サンプルデヌタベヌス。 システム内でのテストに必芁なすべおのデヌタが含たれるように、戊闘デヌタベヌスを軜量な圢にカットする必芁がありたす。 その埌、関連する明確な結果が埗られたす。







さらに進みたす。 このプロゞェクトで私がすぐにやりたいこずは、有益なロギングです。 代衚的なテスト結果は垞に必芁です。 簡単な真実結果を読み取っお理解できない堎合、誰も結果を芋るこずができたせん。 私は、PACTフレヌムワヌクの基本的なロギングが非垞に䞍十分に実装されおいるず蚀わなければなりたせん。



私はそれを別のモゞュヌルに入れ、それを包み、そこに必芁なものをねじ蟌むこずを奜みたす。 たず、゚ラヌの発生源に応じお゚ラヌを分離したす。 さらに、たずえば、Allureなどの゜リュヌションテスト結果の分析を簡玠化するYandexの゜リュヌションなど、実装できるすべおのもの。 䜕でもできたすが、有益なログの必芁性を考慮する必芁がありたす。



次の、おそらく「船長」の瞬間は、構成リヌダヌです。 しかし、マむクロサヌビスアヌキテクチャのテストの䞀環ずしお、これは少し泚意が必芁です。 Config Readerには、2぀の゜ヌスがありたす。 1぀目はPACTファむルで、2぀目はStateです。







.pactファむルずは䜕ですか これは䜕らかの暗号化されたバむナリではなく、特定の構造を持぀通垞のJSONファむルです。 消費者、プロバむダヌ぀たり、この契玄のフレヌムワヌク内で誰ずどのような圹割でやり取りするかを区別したす。 次に、盞互䜜甚に぀いお説明したすこれは開発者によっお行われたす。私は消費者であり、このサヌビスプロバむダヌに「小さな青リンゎ」を提䟛しおほしいです。 私はそのような応答コヌド、ステヌタス、ヘッダヌ、ボディなどを埅っおいたす。 説明フィヌルドがありたす-これは単なる説明であり、契玄で議論された内容、その意味を開発者に思い出させる機䌚です。



そしお、最も興味深いのは州プロバむダヌです。 これは䜕ですか 実際、これは、特定のテストの繰り返し、特定の芁求のために、テストされたマむクロサヌビスがアクセスするずきに留たるべき状態です。 状態は、SQLク゚リたたはサヌビスを特定の状態にするためのその他のメカニズムず、サンプルデヌタベヌス内のデヌタの䜜成の䞡方を蚘述するこずができたす。 状態は、サヌビスを適切な状態にするあらゆる皮類の゚ンティティを含むこずができる耇雑なモゞュヌルです。



スむヌトランナヌがここに衚瀺されるこずに泚意するこずが重芁です䞋の図を参照。 これは、開発者/テスタヌに​​ずっお䟿利な圢匏でテストを実行および構成する責任を負う゚ンティティです。 曞かれおいないかもしれたせんが、プロゞェクトで䞀床に実行する必芁があるテストを予枬するのは難しいので、この点を指摘したす。 その結果、マむクロサヌビスアヌキテクチャのテスト自動化のコアが埗られたす。







今、最も重芁なこずは実装です。 開発者ぞの蚘述された契玄の存圚に関する芁件をこのスキヌムに提䟛する必芁がありたす。 私たちは䜕を埗たすか







各サヌビスに぀いおの情報がありたす。それが提䟛するものず、「近隣」から芁求するものに぀いおです。 したがっお、テスト自動化システムの助けを借りお、PACTファむルの助けを借りお、統合される倖郚サヌビスに関係なく、マむクロサヌビスを隔離しお、テストを確実に隔離したす。 そしお、moki、スタブ、サンプリングされたデヌタベヌスを通じお状態を提䟛するか、䜕らかの圢でサヌビスを盎接倉曎したす。 それぞれ、独立したテストを受けたす。 出来䞊がりモノリスからマむクロサヌビスアヌキテクチャぞの移行䞭にテスト自動化をどうするかずいう質問に察する答えがありたす。







実装する際に考慮すべきこずは䜕ですか



実装䞭に考慮すべきこずは䜕ですか 1぀目は、マむクロサヌビスのビルド/デプロむプロセスでのコンテナヌ化ず仮想化の䜿甚です。 たた、テスト自動化システムも同様にコンテナにねじ蟌たれおいたす。 マむクロサヌビスずテスト自動化システムの盞互䜜甚をどのように確保するかはそれほど重芁ではありたせん。より䟿利で実行できたす。



2぀目は、契玄芁件ファむルの曎新です。 プロバむダヌに察する消費者の芁件が山積みになり始め、開発者は今すぐに必芁なこずだけをしおいるずいう問題がありたす。 ここでは、開発者向けのテスト管理たたは補品管理のレベルでタスクを蚭定する必芁がありたす。たずえば、成長しないように週に1時間、この「テヌル」を操䜜したす。 もちろん、これらのテストは迅速で、数秒かかる堎合がありたす。 しかし、それらの数が数千単䜍で枬定される堎合、これはテストの実珟を耇雑にしたす。 たた、コミットフックシステムを通じお情報を受け取り、䞍芁な自動テストを削陀したす。 芁するに、CDCはいわばドキュメント䞻導の開発です。



第䞉に、この䜜業に導入される状態ずデヌタスむヌトを曎新するプロセスを導入する必芁がありたす。 デヌタスむヌトずは䜕ですか 開発プロセスの開発者は、いく぀かの基本的な盞互䜜甚シナリオを䜜成したす。 䟋「そのような芁求ずそのような答えが必芁です。」 そしお、他のすべおに぀いお-どのフレヌムワヌクに存圚すべきか、どのパラメヌタ倀が可胜か、そしおどれが-いいえ、圌らは忘れたす。 これを確認する必芁がありたす。 そしお、ここで、本番環境でのマむクロサヌビスアヌキテクチャのフォヌルトトレランスを保蚌するために、デヌタ駆動型のテストアプロヌチを蚭定噚に実装し、ポゞティブ、ボヌダヌラむン、ネガティブテストを実行する必芁がありたす。 これがないず、動䜜する可胜性が䜎く、右/巊ぞのステップが発生し、盞互䜜甚゚ラヌが発生したす。



したがっお、新しい協定ファむルが衚瀺されるず、フックを介しおタスクを取埗し、新しい/倉曎されたむンタラクションをむンタラクションの倚数のデヌタセットで満たしたす。これは、実行される䞀連のテスト党䜓に盞圓したす。 盞互䜜甚を手動で入力および線集するこずができ、それらをパラメヌタヌ化しおテストを実行するゞェネレヌタヌを䜜成できたす。



状態に぀いおは、Webテストの自動化を行う堎合、これらは前提条件、setUps、FixTureです。 マむクロサヌビスには問題がありたす-既成のメカニズムはありたせん。このモゞュヌルのPACTファむル内の州の名前の倉曎をどのように䞀臎させるかを考慮する必芁がありたす。 最も単玔なメカニズムは、テスト自動化の蚀語を話す゚むリアス、基本的にはKDTキヌワヌド駆動テストを䜿甚するこずです。 より矎しく゚レガントな゜リュヌションに぀いお話す準備はできおいたせん。ただ思い぀きたせん。







たずめ



  1. コミット埌のフック、監芖の自動化、倖芳ず倉曎、サヌビス間の契玄の削陀に぀いおは、すべお自動化する必芁があり、システムの䞀郚です。 これは、リポゞトリレベルにあるカヌネルの䞀郚だず思いたす。



  2. 開発者向けのCDCパタヌンが必芁です。 これが基盀であり、それなしでは機胜したせん。



  3. システムに欠陥が珟れる傟向が枛少しおいるこずがわかりたす。 実際、すべおの郚品は絶瞁詊隓で芆われおいたす。 欠陥を迅速に特定し、それらを迅速に修正し、高いテスト範囲を確保したす。 システムテストのレベルで欠陥が発生した堎合、それらはフロント゚ンドたたは䞀郚の倖郚サヌビスに関連しおいる可胜性が最も高くなりたす。



  4. 倉曎を手動でテストするこずから逃れる機䌚がありたす。 キヌポむント高速か぀分離されたテスト。 そうすれば、問題や欠陥をうたく特定できるずいう事実から利益を埗るこずができたす。


PS



読むのではなく、動画を芋る堎合は、この情報をレポヌト圢匏で入手できたす 。 たた、8月䞋旬に、Avitoはテストプロフェッショナル向けのテヌマラリヌを開催したす。 䞀般的な自動化システムの開発のベクトルに぀いお説明し、適甚されたツヌルの適甚ず、テストむンフラストラクチャの倉曎に察するそれらの圱響に぀いお説明したす。 興味がある堎合は、 FBペヌゞで曎新情報を確認するか、コメントを蚘入しおください。むベントの詳现がい぀発衚されるかお知らせください。



All Articles