1日に2回のリリヌスで4幎間生き延びおきた方法





こんにちは、Habr 今日、私は ゚ラヌず経隓の調査から始たるテスト組織に関する䞀連の蚘事を完成させ、Badooが毎日2぀の高品質サヌバヌリリヌスをどのようにリリヌスするかに぀いお説明したす。 金曜日を陀き、午前䞭にのみ解攟されたす。 金曜日の倜にリリヌスする必芁はありたせん 。



4幎ほど前にBadooに来たした。 これたで、プロセスずテストツヌルは継続的に開発および改善されおきたした。 䜕のために 開発者ずテスタヌの数が倍になりたした。぀たり、リリヌスごずにさらに倚くのタスクが準備されおいたす。 アクティブナヌザヌず登録ナヌザヌの数も2倍になりたした。぀たり、゚ラヌの䟡栌が高くなっおいたす。 最高品質の補品をナヌザヌに提䟛するためには、より匷力な品質管理手段が必芁であり、この競争は終わりたせん。 この蚘事の目的は、実䟋を瀺すこずだけでなく、品質管理プロセスがいかにクヌルであっおも、確かにそれをさらに改善できるこずを瀺すこずです 。 他の蚘事ぞのリンクからいく぀かのツヌルの技術的な実装を芋぀けるこずができたすが、それらのいく぀かに぀いおはただ曞いおいたせん。



Badooにはいく぀かの異なるQAフロヌがあり、その違いは異なる開発ツヌルずタヌゲットプラットフォヌムによっお正圓化されたす ただし、JIRA、TeamCity、Gitなどの共通システムを䜿甚したす  。テストプロセスずサヌバヌの展開に぀いお説明したす。タスク同時にWebサむト。 条件付きで5぀の倧きな段階に分けるこずができたす もちろん、ここでは私の同僚の倚くは異なる考えを持っおいたすが。各段階には、手動コンポヌネントず自動コンポヌネントの䞡方が含たれおいたす。 私は、それらのそれぞれに぀いお順番にあなたに話をしようず詊み、近幎倉化し発展したものを個別に匷調したす。



1.コヌドレビュヌ



はい、驚かないでください。これは実際には品質管理の段階でもありたす。 これは、アヌキテクチャ䞊の゚ラヌず論理的な゚ラヌが戊闘コヌドに入らないように考案されたものであり、タスクが私たちの基準やルヌルに決しお違反しないようにするためです。



開発者がコヌドを䞀般リポゞトリに「プッシュ」する前でも、レビュヌコヌドは自動的に開始されたす。 受信偎でgit pushを実行しようずするず、倧量のさたざたな凊理を行う事前受信フックが起動したす。





これらのチェックのいずれかに倱敗するず、プッシュが犁止され、開発者は発生したコメントを修正する必芁がありたす。 このようなフックはたすたす増えおいたす。

たた、受信前フックに加えお、プロセスを自動化する倚くの操䜜を実行する受信埌フックのプヌルが増えおいたすJIRAでタスクのフィヌルドずステヌタスを倉曎し、テストを実行し、展開システムにシグナルを送信したす...䞀般的に、圌らは非垞に良い仲間です。



コヌドが自動怜蚌のすべおの段階を突砎できた堎合、手動でコヌドをレビュヌしたす。これは、私たちが高床に修正したGitPHPのバヌゞョンに基づいおいたす。 開発チヌムは、採甚されたアヌキテクチャに察する゜リュヌションの最適性ずコンプラむアンス、ビゞネスロゞックの䞀般的な正確性をチェックしたす。 同じ段階で、新芏たたは倉曎されたコヌドのカバレッゞを単䜓テストでチェックしたすテストで適切にカバヌされおいないタスクはレビュヌに合栌したせん。 問題の解決䞭に他の郚門のコヌドが圱響を受けた堎合、その代衚者は間違いなくレビュヌに参加したす。







GitPHPで、レビュヌ担圓者はコヌドにコメントを付けるこずができたす-そしお、それらはすべおJIRAの察応するタスクのコメントずしお衚瀺され、QA゚ンゞニアはテスト䞭にすべおのコメントの修正を確認できたす 開発者はこれらのコメントにホリバヌを配眮するこずもありたす、読曞は喜びです 。



2.「開発」でのテスト



私たちの理解における「開発環境」ずは䜕ですか これは、開発およびテスト甚に蚭蚈された小芏暡の生産アヌキテクチャを最倧化する本栌的なプラットフォヌムです。 開発者には、独自のデヌタベヌス、独自のデヌモンのコピヌ、サヌビス、およびCLIスクリプトが含たれおいたす。 盞互䜜甚をテストするために2぀の完党に別個のサむトに分割されたす。1぀はモスクワのオフィスにあり、プラハのデヌタセンタヌの䜜業を゚ミュレヌトしたす。2぀目はロンドンのマむアミのデヌタセンタヌの䜜業を゚ミュレヌトしたす。











開発のフレヌムワヌク内で、各開発者ずテスタヌは独自の「サンドボックス」を持ち、そこで必芁なサヌバヌコヌドの任意のバヌゞョンをアップロヌドでき、察応するURLの内郚ネットワヌクから利甚できたす。 残念ながら、各開発者独自のサンドボックスをロヌカルマシンに展開するのは費甚がかかりすぎたす。Badooは非垞に倚くの異なるサヌビスで構成され、特定の゜フトりェアバヌゞョンに䟝存しおいたす。



2.1。 自動ブランチテスト



開発者がタスクの䜜業を終了した盎埌に、少なくずも統合テストず単䜓テストが開始されたら玠晎らしいず思いたせんか 今、私はあなたに必死の闘争の小さな話を䞀぀お話ししたす。





リリヌス゚ンゞニアが開発したかけがえのないアシスタントAIDA  自動化されたむンタラクティブな展開アシスタント は、適切なタむミングで適切なブランチでテストを実行しおいたす。 実際、開発䞭のすべおの自動化プロセスのほずんどは、その優しいずはいえ骚の折れる 手なしには行えたせん。



2.2。 「開発」での手動テスト



したがっお、テスタヌは最終的にタスクを手に入れたす。 その䞭のすべおの単䜓テストに合栌し、テストを開始できたす。 䜕をする必芁がありたすか そうです、必芁なすべおのケヌスをプレむする必芁がありたす。 そしお4幎前は非垞に退屈な職業でした。



Badooは出䌚い系サヌビスです。぀たり、すべおの機胜はナヌザヌに倧きく䟝存しおいたす。 ほがすべおのテストおよび良い方法-それぞれの堎合で、新しいナヌザヌを登録する必芁がありたす。 ほずんどの機胜は写真のないナヌザヌには利甚できないため、耇数の写真をアップロヌドおよびモデレヌトする必芁もありたす。 合蚈で、すでに玄5分のルヌチン䜜業が必芁です。

次に、テストデヌタを準備する必芁がありたす。 1日に数癟人の他のナヌザヌにメッセヌゞを曞き蟌んだナヌザヌに衚瀺されるプロモヌションりィンドりを芋たいですか さお、指を䌞ばしお措氎を始めたす。 そしお泣く。



ああ、この堎合、1幎以䞊前に登録したナヌザヌが必芁ですか 私はこれを持っおいたせん:(みんな、誰かいたすかいいえデヌタベヌスの倀を修正するために開発者を匕っ匵っお行かなければなりたせん...



ずおも悲しい話ですね しかし、救いが私たちのずころに来たした— QaApi  これは䜕ですか これは、HTTPリク゚ストを䜿甚しおサヌバヌ偎でさたざたなアクションを実行できる玠晎らしいシステムです もちろん、これはすべお蚱可によっおカバヌされ、テストずしおマヌクされたナヌザヌにのみ圱響したす。このむンタヌフェむスを自宅で芋぀けようずしないでください 。

QA゚ンゞニアはQaApiqaapi.example.com/userRegister 圢匏 の簡単なリク゚ストを行い、必芁な蚭定ナヌザヌの性別、登録郜垂、幎霢などをGETパラメヌタヌで転送し、すぐに認蚌デヌタを受信できたす さらに、この方法では、開発環境ず本番の䞡方でナヌザヌを獲埗できたす。 同時に、ボットで本番環境を詰たらせたり、テストナヌザヌが生きおいるようには芋えず、ナヌザヌを定期的に登録する代わりに、適切な以前のテスト埌にすでに完党にクリアされたナヌザヌをプヌルから取埗したす既に存圚する堎合。



同じ簡単なリク゚ストで、むンタヌフェむスから倉曎できないさたざたなデヌタを倉曎しお入力できたす。前述の登録日、1日あたりの新しい連絡先たたはいいねの数倧䞈倫、そしお奜きなものすべお。 たた、必芁なパラメヌタヌを倉曎するQaApiメ゜ッドがない堎合はどうなりたすか ほずんどの堎合、PHPの基本的な知識で十分であり、どの゚ンゞニアでも実行できたす。 ただし、コヌドにさらに深い倉曎が必芁な堎合があり、その堎合はコンポヌネントの責任を負う開発者に連絡する必芁がありたす。

圓然のこずながら、このすべおの矎しさは手動テストだけでなく発明されたした。 私たちのテストはたた、QaApiを匷力か぀メむンで䜿甚し始めたしたテストはより速く、よりアトミックになり、実際にテストする必芁があるもののみをテストしたすもちろん、この方法で単玔化された操䜜のための個別のテストもありたす。



そしお、これだけでは䞍十分だず刀断した堎合、QaApiスクリプトを実装したした。これにより、簡単なスクリプトをLuaで蚘述できたす 尋ねないでください 。ワンクリックでさたざたなメ゜ッドを呌び出すこずで、耇雑なケヌスをテストするための耇雑なデヌタを準備するこずもできたす。



2.3。 環境ずツヌルの改善



開発者のテストを最適化および自動化する方法に加えお、もちろん、テストを完党か぀できるだけ本番に近づける方法が非垞に重芁です。

たずえば、CLIスクリプト。 以前は、クラりンを䜿甚しお起動されおいたした。 したがっお、テスタヌがスクリプトの新しいバヌゞョンを確認する堎合、次のこずを行う必芁がありたした。





これらの手順のいずれかをスキップするず、テスタヌ自身圌が期埅するスクリプトの間違ったバヌゞョンが動䜜する可胜性がありたすたたは圌の呚りのすべおの人スクリプトが動䜜せず、誰も理由を知りたせんのいずれかの問題に぀ながりたす。



珟圚、このような問題はありたせん。すべおのスクリプトは共通のスクリプトフレヌムワヌクで実行されたす。開発バヌゞョンでは、スクリプトに「䞀般的なディレクトリからではなく、䜜業ディレクトリから実行する」ずいう機䌚がありたす。 この堎合、゚ラヌたたはタむムアりトの期限が切れるず、スクリプトが䞀般ストリヌムに戻され、システムはすべおのワヌカヌが正しいバヌゞョンであるこずを確認したす。



もう1぀の問題は、耇数のA / Bテストです。 文字通り䜕十ものそれらがい぀でもありたす。 以前は、すべおのテストオプションをキャプチャするために倚数のナヌザヌを䜜成するか、コヌドをハッキングしお、珟圚関心のあるオプションにナヌザヌを意図的に抌し蟌む必芁がありたした。 そしお今、䞀般的なUserSplitシステムを䜿甚しおいたす。これにより、特定のテストごずに「このナヌザヌは垞にこのオプションを取埗したす」などのQA蚭定を远加し、珟圚必芁なものを正確にチェックしおいるこずを垞に確認できたす。



3.「ショット」でのテスト



私たちの理解における「ショット」ずは䜕ですか 実際、これは実皌働環境のタスクブランチおよび珟圚のマスタヌです。 技術的な芳点からは、ステヌゞングクラスタヌのマシンの1぀に必芁なバヌゞョンのコヌドを含むディレクトリず、NGINX configの行であり、 habr-1.shotの圢匏のhttp-requestsをこのフォルダヌに送信したす。 したがっお、ショットは、Webずモバむルの䞡方の任意のクラむアントのサヌバヌずしお指定できたす。 すべおの゚ンゞニアは、JIRAのリンクを䜿甚しお特定のタスクのショットを䜜成できたす。



これは䞻に、実際の環境でタスクの操䜜性をテストするこずを目的ずしおいたす非垞によく䌌おいたすが、䟝然ずしお「合成」的なものではありたせん。たた、翻蚳の生成やチェックなどの远加のタスクを解決するこずも目的ずしおいたすタスクがステヌゞングに到達し、残りのタスクのリリヌスを遅らせない前に。 ショットを倖郚ずしおマヌクするこずもできたす-そしお、それは私たちの仕事甚ネットワヌクからだけでなくたたはVPN経由でもむンタヌネットからも利甚可胜になりたす。 これにより、たずえば新しい支払い方法を接続する際に、パヌトナヌにタスクをテストする機䌚を提䟛できたす。



近幎発生した䞻な倉曎は、生成盎埌のシ​​ョットでのテストの自動起動ですショットは開発者よりもはるかに安定しおいるため、ここでのテスト結果は垞にはるかに関連性が高く、誀った結果を䞎える可胜性が䜎くなりたす。 AIDAはここで2぀のタむプのテストを実行したすSeleniumテストずcUrlテスト 。 実行結果はタスクに固定され、タスクを担圓するテスタヌに​​送信されたす。



しかし、倉曎たたは远加された機胜がSeleniumテストでカバヌされない堎合はどうなりたすか たず第䞀に、おないでください。 私たちのテストは、確立された機胜たたは重芁な機胜のみを察象ずしおいたすプロゞェクトは非垞に迅速に開発されおおり、テストで各実隓機胜をテストするず、このプロセスが倧幅に遅くなりたす。新しいテストを䜜成するタスクは、本番タスクのリリヌス埌に蚭定されたす。

そしお、テストが倱敗した堎合はどうなりたすか これには2぀の理由が考えられたす。 最初のケヌスでは、タスクに゚ラヌがありたす。プログラマヌはよくできおおらず、タスクを修正する必芁があり、テストは仕事をしたした。 2番目のケヌスでは、機胜は正垞に機胜したすが、そのロゞック たたは単にレむアりト が倉曎され、テストはシステムの珟圚の状態ず䞀臎しなくなりたした。 テストを修埩する必芁がありたす。



以前は、自動化を担圓するQA゚ンゞニアの別のグルヌプがありたした。 圌らはそれをうたくか぀迅速に行う方法を知っおいたしたが、それでも各リリヌスは䞀定数のテスト 時には巚倧な を砎りたした。 その結果、この問題ぞのアプロヌチを倉曎するこずにしたした。すべおのQA゚ンゞニアが少なくずもSeleniumテストを曞くための基本的なスキルを持぀ように、䞀連のセミナヌず講矩を開催したした同時に、テストを曞くのがより䟿利で簡単になるようにラむブラリを倉曎したした。 これで、テスタヌのタスクでテストが倱敗し始めた堎合、テスタヌはタスクブランチで自分でテストを修埩したす。 ケヌスが非垞に耇雑で倧きな倉曎が必芁な堎合でも、知識のある人々にタスクを提䟛したす。



4.ステヌゞングのテスト



そのため、タスクは、テストフェヌズの地獄の3぀の円を通過し、リリヌスの準備ができおいたす AIDAが埩掻したした。 すべおの既補のタスクを収集しタスクはすべおの段階でチェックされ、必芁な転送は完了し、JIRAのチケットは正しいステヌタスにありたす、それらを䞀般的なブランチに「マヌゞ」し単玔な競合を解決し、困難な堎合は開発者に助けを求めたす、珟圚のビルドずしおマヌクしたすステヌゞングサヌバヌに新しいバヌゞョンのコヌドを配眮し、自動テストの起動を開始したす。

ここで、すべおのテストはすでに合栌しおいたす。 ステヌゞングブランチ、スモヌクテスト、およびシステムの完党なセットを倉曎するず、統合テストず単䜓テストが開始されたす。 それらの各゚ラヌは、リリヌスの責任者に送信されたす。



次に、テスタヌはステヌゞングでタスクをチェックしたす。 ほずんどの堎合、ステヌゞングのために残した他のナヌザヌずタスクの互換性を確認する必芁がありたす各ビルドには玄20がありたす。

いや、ただ壊れた どのチケットが原因かをできるだけ早く把握する必芁がありたす シンプルだが匷力なSeleniumマネヌゞャヌシステムが圹立ちたす。 ステヌゞングにある各タスクのショットでテスト実行の結果を衚瀺し、実行されおいないテストを実行できたすデフォルトでは、完党なスむヌトではなくショットが䜜成されたずき。 したがっお、あなたはしばしばチケットの犯人を芋぀けるこずができたす...しかし、垞にではありたせん。 次に、ログを調べお自分で有眪コヌドを探す必芁がありたす。結局のずころ、すべおを最適化できるわけではありたせん。



そしお、この問題のあるチケットを芋぀けたした。 すべおが完党に悪く、問題の解決に時間がかかる堎合、ステヌゞングからチケットをロヌルバックし、ビルドを再構築し、䞍運な開発者がむンシデントを修正しおいる間静かに䜜業を続けたす。 しかし、゚ラヌを修正するには、1行の1文字を倉曎するだけで十分ですか



以前は、開発者はビルドブランチぞの盎接コミットによっおこのような問題を修正したした。 それは十分に速くお䟿利ですが、QAの芳点からは本圓の悪倢です。 そのような「傷に付着したオオバコの葉」を確認するこずは、そのようなすべおの修正を芋぀け、別の堎所で新しい゚ラヌを匕き起こした堎合に犯人を芋぀けるこずは非垞に難しく、さらに困難です。 そのように長く生きるこずは䞍可胜であり、リリヌス゚ンゞニアが独自のパッチむンタヌフェむスを䜜成したした。







Gitパッチを珟圚のビルドに添付しお、解決する問題の説明、䜜成者の名前、および別の開発者による予備レビュヌたたはQAによるテストの可胜性を添付できたす。 各パッチは特定のタスクに添付され、タスクがビルドからロヌルバックされるず、それに添付されたすべおのパッチも自動的にポンプアりトされたす。



誰もがすべおをチェックしたようです。 生産に行くこずができるようです。 正確ですか 以前は、リリヌスを担圓する゚ンゞニアは、すべおが正垞であるかどうかを自分で確認する必芁がありたしたテスト実行の結果を確認し、萜ちたすべおのSeleniumテストが本圓に修埩されおいるか、すべおのタスクがチェックされおいるか、すべおのパッチがテストされ適甚されおいるかを確認する...膚倧な䜜業ず倚くの責任 したがっお、特定のコンポヌネントたたはテストブロックの責任者党員が「私は元気です」をチェックできるようにするシンプルなむンタヌフェむスをたずめ、プレヌト党䜓が緑色になったらすぐに行くこずができたす。







だから、やった あなたは祝犏し、シャンパンを泚ぎ、テヌブルの䞊で螊るこずができたす...実際はそうではありたせん。 おそらく、ただ数時間の劎働時間がありたす。 そしお、おそらく-別のリリヌス。 しかし、これでさえ重芁なこずではありたせん。タスクの品質管理は、ナヌザヌぞの送信時に終了したせん



5.生産怜蚌



実皌働環境ず数十䞇 たたは数癟䞇 のナヌザヌのプレッシャヌの䞋で、タスクが期埅どおりに動䜜するこずを確認しおください。 最初に、戊闘条件におけるシステムの䜜業胜力ずストレス耐性を評䟡するために、倧芏暡で耇雑なプロゞェクトを聎衆の䞀郚たずえば特定の囜の枠組み内のみにのみ配眮したした。 プロセスのすべおの参加者は、開発者、テスタヌ、マネヌゞャヌなど、さたざたな角床からそのような実隓の結果を評䟡するこずに関䞎しおいたす。 そしお、このような「実隓」が成功したず認識され、新しい機胜がすべおのナヌザヌに適甚された埌でも、本栌的な監芖郚門の䜜業にもかかわらず、リリヌス埌のシステムの状態を泚意深く芋るこずは垞に圹立ちたす。最も掗緎されたテスタヌの脳が思い付くよりも。



なんで



垞に努力ず開発の䜙地がありたす。 4幎前、私はBadooに来お、ここですべおがかっこよく配眮されおいるこずに喜んでいた。 私はプロセスの開発に積極的に参加し、1幎埌にカンファレンスで講挔し、より良くなったず話したした。 3幎が経過したした。QaApiなしで、このようなクヌルな自動テストやその他の玠晎らしく䟿利なものなしで、私たちがどのように生きおきたか想像できたせん。 自由時間に䜕ずか座っお、自分のプロセスで䜕を倉曎たたは改善したいかを想像しおください。 あなたの想像力を解き攟ち、最も玠晎らしい機胜を考え出し、仲間ず共有しおください。 これのいく぀かは呚りのすべおの人にずっおひどく必芁であり、実装はあなたが思うほど玠晎らしいものではないでしょう。 そしお、あなた そしお最終的にはナヌザヌ は少し幞せになりたす。



クディノフむリダシニア QA゚ンゞニア



All Articles