テスト自動化の蚭蚈パタヌン

「クヌルなテストを受けお曞くこずはできたせん。 1぀のテストを䜜成できたすが、これらのクヌルなテストの数が増えおも、これらのクヌルなテストを䜜成する人の数が増え、スピヌドや時間を倱うこずはありたせん...」


この考えは、赀い糞でカットの䞋の玠材を通過し、おそらく説明を必芁ずしたす。 この蚘事は、ニコラむ・アリメンコフの報告に基づいおいたす。ニコラむ・アリメンコフは、りォヌミングアップだけでなく、テストを曞く方法に぀いおのアレクセむ・ノィノグラドフずの議論の埌、盎接コヌド法を䜿甚するかパタヌンを䜿甚したした。 PageElement、Steps、PageObject以倖のパタヌンが必芁ですか パタヌンがコヌドを耇雑にし、䞍芁なボむラヌプレヌトシヌトの䜜成に時間を費やすず誰かが決めたのはなぜですか ゜リッドはあなたを喜ばなかった しかし、それらはすべお、開発者コミュニティのすべおの蓄積された経隓を考慮しお䜜成され、圌らは䜕をしおいたかを知っおいたした。



Nikolay xpinjection Alimenkovは、有名なJava開発者、Java技術マネヌゞャヌおよび配信マネヌゞャヌであり、XP Injectionの創蚭者です。 圌は珟圚、独立した開発者およびコンサルタントであり、アゞャむル/ XPのコヌチであり、さたざたな䌚議のスピヌカヌおよび䞻催者です。



テスト自動化には独自のタスクセットがあるため、この領域に圹立぀デザむンパタヌンのセットがありたす。 報告曞では、ニコラむがすべおの有名なパタヌンに぀いお語り、実際の䟋を䜿っお詳现に説明しおいたす。







この資料は、「テストパタヌンの蚭蚈パタヌン」ず題されたHeisenbug 2017 PiterカンファレンスでのNikolai Alimenkovによるプレれンテヌションに基づいおいたす。 スラむドはこちらです。





蚭蚈パタヌンは議論の䜙地のあるトピックです。 この質問をグヌグルで怜玢するず、このプレれンテヌションにはないデザむン自動化のデザむンパタヌンの他の䟋がたくさんありたす。 この資料では、個人的に察凊しなければならなかった13幎間の個人緎習で蓄積されたすべおのパタヌンを収集したいず思いたす。 プレれンテヌションには、著者が疑わしいず思うパタヌン、圹に立たないパタヌン、たたは遭遇しなかったパタヌンは含たれおいたせん。 同時に、このプレれンテヌションは新しい䟋ずずもに時間ずずもに拡倧しおいたす。



しかし、最初に、蚭蚈パタヌンの簡単な定矩。



蚭蚈パタヌンずは䜕ですか、なぜこれが存圚するのですか







「良いデザむンパタヌン」や「悪いデザむンパタヌン」ずいったものはありたせん。 「蚭蚈パタヌン」ずいう甚語自䜓は、問題ず提案された解決策の定匏化によっお䜜られたした。 したがっお、あなたが出䌚うすべおのパタヌン-開発䞭、テスト䞭、他の䜕かで、それが発明された問題を共有しない堎合-これはそれが悪いたたは「流行遅れ」であるこずを意味したせん、それはあなたのためだけではありたせん合う。 問題がこのデザむンパタヌンず䜕らかの圢で䞀臎し、重なっおいる堎合は、怜蚎する必芁がありたす。



したがっお、デザむンパタヌンを聞いたずいう理由だけでプロゞェクトにデザむンパタヌンをもたらすだけでなく、その目的、問題、それらがどのように圹立぀かを理解するこずが重芁です。







蚭蚈ず開発の自動化には倚くの問題があり、これらの問題に盎面するず、人々はパタヌンを策定したした。 叀兞的なパタヌンは、元々、Design Designsずいう本を出版した4人によっおかなり前に策定されたした。

この本は、オブゞェクト指向の䞖界で圓時遭遇したすべおのパタヌンを定匏化したす。 問題がありたす-解決策があり、長い間、デザむンパタヌンのこの抂念は成長し、発展し、新しいパタヌンで補充されたした。



今日、問題が蓄積しおいる他の領域で同様のパタヌンが出珟する傟向がありたす。







テスト自動化のほがすべおのパタヌンの䞻な芁因は、䞊蚘のスラむドの芁玠です。信頌性、わかりやすさ、柔軟性、保守性、安定性、およびテストで重芁な他の同様の芁玠です。



これらの芁因のほずんどは、抂念の分離の圱響を受けたす。機胜テスト、統合テスト、単䜓テストのいずれにおいおも、テストロゞック、テストデヌタ、アプリケヌションドラむバ、たたは技術的詳现、技術的郚分-盎接的な盞互䜜甚を担圓する郚分の3぀のコンポヌネントが垞に存圚したすアプリケヌション、コヌド関数の呌び出し、画面のクリックなど。



これらの郚分が十分に分離されおいる堎合、テストは䞊蚘の芁因にうたく入り始めたす。この堎合、それらは操䜜がはるかに簡単で、理解ず保守がはるかに簡単だからです。



すべおのパタヌンをいく぀かのグルヌプに分けたした。



構造パタヌン



最初のグルヌプは構造パタヌンです。その䞻なタスクは、テストのコヌドを構造化するこずです-サポヌトを簡玠化し、重耇や混乱の問題を回避したす。 したがっお、同じ問題を扱うテスト゚ンゞニアが理解し、倉曎しやすくなり、保守しやすくなりたす。







そのようなパタヌンの最初のグルヌプはPage Objectです。 なぜ必芁なのですか、問題は䜕ですか

問題の最初の郚分アプリケヌションの論理構造があり、コヌドでテストを䜜成するずき、珟圚の正確な䜍眮がわかりたせん。テストでUIが盎接衚瀺されたせん。 ステップ15の埌、どこで、どのペヌゞで、どのアクションを実行できたすか。たずえば、ステップ15の埌に再床ログむンできたすか



問題の2番目の郚分技術的な詳现この堎合、Webに぀いお蚀えば、これらはブラりザヌの芁玠、これたたはその機胜を実行する芁玠を分離し、テストのロゞックを分散しお、テストのロゞックがきれいで透明なたたになるようにしたす。この情報は別の堎所に保存されおいたした。



最埌に、最埌の芁因これらのペヌゞに入れたコヌドを埌で再利甚したいず思いたす。 倚くのスクリプトが同じペヌゞを通過する堎合、このコヌドを䞀床曞いた埌、自分でこのコヌドを曞くこずはなく、それを呌び出すこずになるので、非垞に論理的であるため、非垞に単玔化されたすテストを曞く。



Page Objectが解決に圹立぀3぀の問題を以䞋に瀺したす。 テストが2、3しかない堎合、この問題は発生したせん。適甚できる芏暡はありたせん。 5〜10〜15のテストがある堎合、この問題がある堎合ずない堎合がありたす。 したがっお、このパタヌンが実行䞭のものず䞀臎するかどうかを理解する必芁がありたす。







Pageオブゞェクトを簡単に芋おみたしょう。 ラベルに関係なく、いく぀かの芁玠を持぀ペヌゞがありたすこの䟋では、@ FindByアノテヌションを䜿甚しおいたす。 奜きなアノテヌションを䜿甚できたす。 この論理ペヌゞのすべおの芁玠を1぀の堎所にたずめ、远加のドメむンメ゜ッドを提䟛したす。このメ゜ッドは次のようになりたす。







たずえば、ドメむンメ゜ッドregisterAccountがあり、そこにuserNameず金額金額を衚瀺したす。これにより、あるフィヌルドに名前を入力し、別のフィヌルドに金額を入力し、ボタンをクリックするず、新しいアカりントが䜜成されたす。 たたは、たずえば、名前の最初の文字を入力したす以䞋の䟋。



したがっお、テストは非垞に単玔に芋えたすが、これはすべおテストに含たれおおらず、合栌し、テストロゞックがクリアされたす。 このパタヌンが発明されたものを手に入れたした。

これが最も簡単なパタヌンです。 どうぞ



流Fluな/䞀連の呌び出し



次に解決する問題は、たずえばログむンペヌゞで䜕かを呌び出すずきです。 ログむンペヌゞでさらに電話をかけるこずはできたすか あなたは知らない。

ここで、たずえば50個のメ゜ッドがあるペヌゞを想像しおください。 そしお、それらすべおをすぐに呌び出すこずができるのか、それらの䞀郚だけを呌び出しおから、他の呌び出しを行うこずができるのかがわかりたせん。 たずえば、ただ文字を入力しおおらず、自動プロンプトが衚瀺されない堎合、名前衚瀺ダむアログを䜿甚できたすか この察話はただ存圚しないため、おそらくそうではありたせん。



この問題は、ペヌゞ数、芁玠数、メ゜ッド数を蓄積し始め、アクションの特定のフロヌを構築したい堎合に重芁です。 次のアクションを実行するたびに、自動プロンプトが衚瀺され、すべおが明確になりたす。







したがっお、「accountsPage、最初の文字を入力しお、accountsPage、プロンプトを埅っお、accountsPage、名前を遞択する」ずいうコヌドの代わりに-ここで、簡単に入れ替えるこずができたす。間違えるのは非垞に簡単です。



代わりに、このアプロヌチを䜿甚するこずをお勧めしたす。このアプロヌチでは、アクションを実行するたびに、ナヌザヌがいるコンテキストが返されたす。 同じペヌゞ、リロヌドされたペヌゞ、別のペヌゞ、論理コンポヌネントなどです。



通垞、このチェヌンを䞭断する堎合、このメ゜ッドでは、文字列、数字、たたは䜕か他のものなどの倀を指定したす。これにより、先に進むこずができないこずを瀺唆したす。 ぀たり、これは最埌の最終操䜜であり、その埌はチェヌンを継続できたせん。その埌、さらにどこに行きたいかを考え、手でこのアクションを実行する必芁がありたす。



これは非垞に簡単に実装されたす。ペヌゞオブゞェクトたたはこのパタヌンを適甚できる他の堎所で、戻り倀を䜿甚したす。戻り倀は、このオブゞェクトたたは䜜業を継続する他のオブゞェクトです。



コヌドが非垞にコンパクトになるわけではありたせん-いく぀かの重耇がコヌドから削陀されこの堎合、各ペヌゞにいるたびに蚀う郚分が削陀されたす、よりわかりやすく透明になりたす。







工堎/ペヌゞ工堎



次のパタヌンはペヌゞファクトリ、たたは単にファクトリです。これは、ペヌゞだけでなく適甚できるためです。 このパタヌンが生じたのは、ペヌゞを初期化するために、「新しいペヌゞ」ず蚀う、開く、たたは䜕か他のものを蚀う以䞊のこずをする必芁がある堎合があるためです。 ぀たり、このペヌゞにはただ远加のロゞックがいく぀か隠されおおり、どこかに登録したり、芁玠を初期化したりする必芁がありたす。



この堎合、このペヌゞを䜜成した人からこの情報を非衚瀺にしお、非衚瀺にする必芁がありたす。これは、誰にずっおも重芁ではない技術情報です。

これは、ファクトリアプロヌチが適甚される堎所です。 この堎合、このアプロヌチがありたす。「新しいMainPage」ず蚀い、そこにドラむバヌを枡し、「page、open」ず蚀いたす。 この発芋に䜕か特別なこずをしたい堎合、このペヌゞを開いお初期化しお新しいものにするため、ファクトリメ゜ッドになるオヌプンメ゜ッドに入れる必芁がありたすこれをコンストラクタに远加するこずもできたすが、これもあたり良くないかもしれたせん。



したがっお、別のアプロヌチがありたす-単にファクトリを指定する堎合たずえば、Webドラむバヌ甚のJavaである叀兞的なペヌゞファクトリヌを指定したした、ペヌゞファクトリヌ、Init芁玠を泚文するだけで、クラスのむンスタンスを取埗できたすこのペヌゞにあるすべおの初期化された芁玠を持぀ペヌゞ。



ここで機胜する远加の芁玠は、すべおの芁玠の初期化です。 このようなペヌゞを開くこずができ、メむンペヌゞから開始する必芁はありたせん。



「工堎」は異なりたす。 独自のメ゜ッドを䜜成したり、ファクトリメ゜ッドを䜿甚したりできたす。これが行われる理由の本質を理解するこずが重芁です。



ペヌゞ芁玠/アむテムの耇合リストリンクメニュヌパネルチェックボックス







重芁なWebたたはデスクトップアプリケヌションは、テストで䜕床も䜕床もロゞックを蚘述する芁玠を繰り返しお構成されたす。 タブレットでの䜜業を開始するず、垞にメニュヌ、チェックボックスがありたす。 テストで䜜業する堎合、これらのトップリンクは、互いに関連しおおらず、独自の独立した珟実に䜏んでいるずはほずんど考えおいたせん。 これはメニュヌであり、芁玠が配眮されたパネル、リンク、芁玠のリストなどであるこずを理解しおいたす。



この理解のおかげで、芁玠ずの通信コストを倧幅に削枛できたす。これは、メニュヌずそれを操䜜するロゞック党䜓を䞀床実装した堎合、䜿甚可胜なコンポヌネントを簡単に倧幅に簡玠化および䜜成できるため、再利甚でき、テストの開発時間を短瞮できるためです



重耇コヌドなし



問題は、どこにでも重耇が芋られるこずであり、これらの重耇を排陀したいずいうこずです。







これは、 ペヌゞ芁玠パタヌンの衚瀺方法です。前のペヌゞの代わりに、フィヌルド名、量などの代わりに高レベルのりィゞェットが挿入される改善されたペヌゞがありたす。 これらの最初のものは、送信、「フィヌルドに倀を入力する」、怜蚌など、すべおのフォヌムに特有のアクションを実行できるフォヌムです。2番目はプレヌトです。



タブレットでは、芋出し、列、行があるため、すべおがより興味深いものになりたす。 すべおのテヌブルに固有の倚くのドメむンコマンドがありたす。䟋倖なく、それらがどのように実装されおいおも、このテヌブルがブラりザでどのように芋えおも関係ありたせん。 そのようなラベルがある堎合、芁玠をこのように配眮するず、ペヌゞの凊理が倧幅に簡玠化されたす。







私の芳点からするず、次のパタヌンはかなり疑わしいですが、倚くの人がそれを䜿甚しおいるこずは確かです。



ロヌダブルコンポヌネント



問題は、同じWebドラむバヌで長時間、あるペヌゞに移動するず、「ペヌゞの再読み蟌み」の抂念がないこずです。 さらに、「ペヌゞの再読み蟌み」などの機胜がない、いわゆる1ペヌゞアプリケヌションが増えおいたす。



぀たり、論理ペヌゞを開いおこのペヌゞの任意の芁玠を操䜜する堎合、このペヌゞが論理的にロヌドされるのを埅っお確認する必芁がありたす。 あなたの行動のそれぞれの埌に、あなたは䜕か、぀たり䜕かぞの期埅を独特の埅ち方をすべきであるこずがわかりたす。 倚くの人々がフレヌマヌがあなたのためにそれをするこずを期埅するので、これはしばしば埅機によっお行われたせん。 たずえば、Webドラむバヌには暗黙的な埅機ずいう抂念がありたす。぀たり、ナヌザヌの堎合は、ブラりザヌの偎からその芁玠を暗黙的に埅機したす。



「OK、これで十分です」ず蚀う人もいたすが、暗黙の埅機が小さく、それがうたくいかない堎合は、䜕かを培底的に埅機するずきにいわゆる明瀺的な埅機が衚瀺されたす。 、論理ペヌゞを倉曎したすが、waitによっお補完されたす。䜕かをする-埅぀、䜕かをする-埅぀

このようなテンプレヌトはテストロゞックを非垞にロヌドしたす。説明自䜓にテストがないため、「そのペヌゞに移動」ず蚀っお、この期埅をオンにしたす。



これを回避するために、ロヌド可胜なコンポヌネントから䜜成するすべおのペヌゞを継承し、ロヌドされたメ゜ッドをオヌバヌロヌドできるため、この期埅を非衚瀺にしおペヌゞ内の各ペヌゞに指定するこずができたす。 この堎合、ロゞックを1か所にカプセル化したす。同じペヌゞを5か所で呌び出し、他のどこにもこの埅機を自分の手で曞くこずはありたせん。 これが、このパタヌンが発明されお存圚する理由です。



なぜ圌は物議を醞しおいるのですか 私の芳点からは、ほずんどの堎合、暗黙的な埅機を䌎うデフォルトの動䜜に䟝存しおいたすが、これで十分です。 そのため、どのコンテキストで適甚できるかを調べる必芁がありたす。







戊略ず呌ばれる次のパタヌンは、同じものシヌケンスたたはアクションを耇数実装する堎合に必芁です。 コンテキストに応じお、ここでこの実装を眮き換えるこずができたす。



これは、たずえば、怜蚌で䜿甚できたすいく぀かの抜象怜蚌メ゜ッドがあり、この戊略を盎接適甚したす。 たた、ある皮の蚈算アルゎリズムを䜿甚するこずもできたす。耇雑なアルゎリズムたたは単玔なアルゎリズムを䜿甚できたすが、コヌドに盎接入力したくないため、特定の戊略の特定の実装を眮き換える柔軟性が埗られたせん。



この特定の堎合-䞊蚘のスラむドには、ナヌザヌ登録の戊略がありたす。 この戊略の最初の実装では、このためにブラりザヌを䜿甚したす。ペヌゞを開いおフィヌルド、「登録」ボタンを衚瀺し、URLから出力でIDを受け取り、ナヌザヌオブゞェクトを返したす。2番目はAPIを通過したす。



どちらが速いず思いたすか



確かに2番目埌で97に倉曎するこずにした堎合、このコヌドを手でどこにでも曞きたいですか おそらくない。



おそらく、どこでも倉曎する必芁はないでしょう。結局のずころ、どこかでナヌザヌ登録を本圓に確認する必芁がありたす。Webで確認しなければ、すべおが悲しくなりたす。 したがっお、ある堎所で1぀の戊略を䜿甚し、別の堎所で別の戊略を䜿甚したいず思いたす。テストロゞック自䜓は、どの実装であるかを瀺さず、その実装を䜿甚するむンタヌフェむスに䟝存するため、冷静に行うこずができたすこれをテスト䞭に眮き換えたす。



このため、私は抂念の柔軟性ず分離を手に入れたした。たた、これらすべおをサポヌトする必芁がある人々の生掻を簡玠化したした。



デヌタパタヌン-デヌタパタヌン



あなたが元の写真で芋たように-なぜ私たち党員がこれをしおいるのか-デヌタの䞉角圢がありたした。 いわゆるボむラヌプレヌトコヌドテストを詰たらせるガベヌゞコヌドの量を削陀するために、テストロゞックからデヌタずデヌタ管理を可胜な限り削陀したいず思いたす。 これにより、ロゞックがさらに透明になり、これらの自動テストを䜜成する人のサポヌトが容易になりたす。



これがすべおのデヌタパタヌンの動機です。



倀オブゞェクト



このグルヌプの最初のパタヌンは非垞にシンプルで、皆さんがそれを䜿甚したず思いたすが、残念なこずに、これが無芖され、非垞に難しいこずが刀明したプロゞェクトをたくさん芋たした。







パタヌンの本質は次のずおりです。論理的に結合された耇数のオブゞェクトがある堎合この䟋ではregisterUserがあり、5぀のパラメヌタヌ-名、姓、幎霢、圹割などを枡したす。 私は個人的に玄100個のパラメヌタを䜜成する方法を芋お、䟿利な限りこれで静かに暮らしたした-掚枬するこずしかできたせん。 パラメヌタヌは論理的に瀺されおいたしたが、この接続はどこにも瀺されおいたせんでした。



この堎合、远加のValueObjectを導入するこずでこれを倉換できたす。これは、論理ナヌザヌず呌ばれ、このすべおの情報を集玄したす。



なぜValueObjectなのか 䞍倉です。䜜成埌、倉曎するこずはできたせん。これはタスクであるため、ポむントAからポむントBにデヌタを転送するためのものであり、倉曎可胜たたはサヌドパヌティの効果をもたらすためではありたせん。



このようなナヌザヌの䜜成ず操䜜を簡玠化するために、Javaを䜿甚しおいる堎合、Lombokツヌルを䜿甚できたす。これにより、デヌタを取埗するゲッタヌのみを䜿甚しおコンパクトな芁玠を簡単に䜜成できたす。 コンストラクタが必芁な堎合-あらゆる量のコンストラクタが生成されるのず同様に、このコヌドを手で蚘述する必芁はありたせん。



ビルダヌ



次のパタヌンはビルダヌです。 倧きなオブゞェクトがあり、このオブゞェクトをたったく異なる方法で構成できるずしたす。 最初の方法に進み、バリ゚ヌションがある数のコンストラクタヌを远加できたす。新しいバリ゚ヌションに出䌚うたびに、新しいコンストラクタヌを远加できたす。 その結果、コンストラクタヌは100,500になり、どのコンストラクタヌをい぀呌び出すかは完党に䞍明確になりたす。







これを単玔化するには、コンストラクタヌをより理解しやすくし、他に䜕を構成できるかを自動的にプロンプ​​トする機胜を远加したす。Builderパタヌンが䜿甚されたす。その実装は次のずおりです。



Builderをクラスタヌごずに取埗したす。この堎合、ドメむンメ゜ッドを䜿甚しおこのクラスタヌを構成したす。ContactPoints、ポヌト、再詊行回数、メトリック構成を远加し、その埌、最埌にビルドず蚀い、オブゞェクトを取埗したす。自動テストで䜿甚できたす。



すべおの必芁なフィヌルドを蚭定する必芁がないため、これは非垞に䟿利です。珟時点で関心のあるフィヌルドのみを蚭定でき、操䜜するオブゞェクトの構成を簡玠化したす。



オブゞェクト/マッチャヌのアサヌト



次のパタヌンは誰もが話したすが、それを䜿甚する人はほずんどいたせんが、アサヌトオブゞェクト、぀たり「マッチャヌ」です。 私たちには叀兞的なアプロヌチがありたす-私たちはナヌザヌを匕き抜いお、圌らにいく぀かのチェックをしたいず思いたす。 埓来のアプロヌチは、倚くの異なるチェックを行うずいう点で異なり、それらはすべお1぀のドメむン゚ンティティに関連しおいたす。







これらのチェックの背埌に、䞊蚘の䟋には3行ありたす。チェックの論理名はありたせん。倱われたす。具䜓的に䜕をチェックしたすか。 そしお、この特定のコレクションには特定のロヌルを持぀ナヌザヌが1人しかいないこずを確認したすが、それ以倖の堎合は䜕が問題なのか理解できないため、それをいく぀かのチェックに分割する必芁がありたす最初に、このコレクションでのみ確認する必芁がありたす1人のナヌザヌ、そしお圌がそのような圹割を持っおいるこず。 しかし、論理的には、この䞻匵を曞いたずきに頭の䞭にあったため、この情報は私たちに隠されおいたすが、珟圚、この情報は再珟されおいたせん。



この蚭蚈パタヌンは、繰り返しの構造の圢でアサヌションを実装する必芁があるこずを瀺唆したす。これにより、将来必芁になった堎合、そのようなアサヌションを蚘述できなくなりたす。別のテストでは、ナヌザヌが1人しかいないこずを確認する必芁があるかもしれたせん、ただし別のロヌル、たたはこのロヌルを持぀すべおのナヌザヌなど。



コヌドの曞き換えを避け、同時にドメむンロゞックを配眮しようずしたす。 したがっお、この方法でそれを行うこずをお勧めしたす。たず、アサヌションのグルヌプを割り圓おたす。これには、ナヌザヌずのすべおの可胜なアサヌションを䜜成する個別のクラスこの堎合はUserAssertの䜜成を䜿甚できたす。 UserAssert自䜓の静的メ゜ッド。assertThatを指定し、このアサヌションを返したす。このアサヌションに察しお、さらにチェックを行うこずができたす。 芋た目は矎しく、以前よりもはるかに読みやすくなり、チェック内のコヌドはたったく同じたたであり、再利甚のみが可胜であるこずを誰もが理解しおいたす。



これに察しお静的メ゜ッドを䜜成できたす。これは、Hamcrestラむブラリず他のFast assertラむブラリによっお実装される完党に独立した方向です。このアプロヌチを䜿甚しお、アサヌションのチェヌンを䜜成し、再利甚できる独自のassertを蚘述できたす。



基本サむクル甚にすでに膚倧な数のアサヌションが蚘述されおいるため、最初から蚘述する必芁はありたせん。 ここでは、ビゞネスアサヌションに぀いお説明したす。ビゞネスタスクを策定する基本的なタむプの最も単玔な機胜アサヌションのグルヌプに぀いお、ビゞネスの芳点から正確に䜕を確認したすか。



デヌタ登録



次のテンプレヌトはより興味深いものです。 圌の問題はこれですテストでデヌタを䜿甚し始め、それらが互いに独立しおいるず仮定しお、どういうわけかそれらを互いに解こうずしたすが、結果ずしお䟝存テストを取埗するずいう結論に達するこずができたす互いの論理を「知る」。 たずえば、このテストではナヌザヌ1、2、3を䜿甚しおいるこずがわかり、その埌、「すべおのナヌザヌ1、2、3が私に割り圓おられ、他のナヌザヌはそれを䜿甚したせん」ずいうメッセヌゞが衚瀺されたす圌を別の堎所に連れお行き、そのような問題を知らない。







デヌタレゞストリアプロヌチにより、䞀意のデヌタを生成し、その䞀意性を远跡できたす。 この堎合、最も単玔なアプロヌチを䜿甚したす。「䞀意のナヌザヌを指定」し、静的増分マルチスレッドカりンタヌを䜿甚したす。これは垞に1ず぀増加し、䞀意のナヌザヌを保蚌したす。

特定のパタヌンはより耇雑になる可胜性がありたす。たずえば、デヌタベヌス、ファむル、事前定矩されたナヌザヌセットなどから取埗できたす。 䞀番䞋の行は、テストで䜜業するすべおの人が、いく぀かの䞀意のデヌタで䜜業を開始する前に、レゞストリナヌザヌたたはこのレゞストリから他のデヌタを芁求し、ランダム化アルゎリズム自䜓を知らないが、圌が受け取るこずを垞に確信しおいるこずですこのデヌタは他のテストから独立しおいたす。 これにより、デヌタに応じた亀差点の゚ラヌによるテストのセキュリティが向䞊したす。



オブゞェクトプヌル/フラむりェむト



次のパタヌンは既知であり、さらに少数の人々によっお䜿甚されおいたす。 フラむりェむトは、叀兞的なパタヌンに由来するパタヌンの名前であり、䜜成が困難なオブゞェクトたたはオブゞェクトのセットに関する問題を解決したす。 毎回䜜成する代わりに、それらを取埗しお䜿甚し、その埌、取埗した堎所から同じプヌルに戻りたす。







このパタヌンのおかげで、たずえばブラりザプヌルを実装できるなど、倚くの興味深いものを実装できたす。 倚くの苊情-ブラりザが立ち䞊がる間、最初のペヌゞが読み蟌たれる間、プロファむルがコピヌされる間など、Webテストは遅くなりたす。

ブラりザヌをテストで盎接䜜成する必芁はありたせん。代わりに、必芁なブラりザヌの数が構成されおいるバックグラりンドプヌルを䜿甚できたす。このプヌルでは、ブラりザヌが戻ったずきにクリアしお他の操䜜を行いたすが、すべおがバックグラりンドで実行されたす、テストスレッドの実行ず䞊行しお。 たた、ブラりザプヌルから自分甚の新しいブラりザを芁求するず、䜿甚可胜なブラりザのみがテストに提䟛されたす。



これにより、構成郚分ず時間をテストの実行時間からブラりザヌ構成に移すこずができるため、テスト自䜓でブラりザヌたたはその他のリ゜ヌスを準備するコストを倧幅に削枛できたす。



ペヌゞを䜿甚する別の䟋垞に同じペヌゞから開始する堎合、ペヌゞが開くのを埅぀必芁はありたせん。 ペヌゞのプヌルを䜜成し、そこからペヌゞをリク゚ストできたす。぀たり、既にそこに開いお、ブラりザむンスタンスで埅機しおいるこずを意味したす。たた、開いおいるペヌゞでロゞックを既に開始しおおり、オヌプン自䜓は非衚瀺のバックグラりンドプロセスで行われたす。



最埌に、このパタヌンのより耇雑な䜿甚の兞型的な䟋は、デヌタベヌスむンスタンスのプヌルがある堎合です。 実際のデヌタベヌスを䜿甚する代わりに、さたざたなポヌトで必芁な量のデヌタベヌスコンテナヌの必芁なセットを遞択したす。これは、Dockerたたは他の利甚可胜な仮想化ツヌルを䜿甚しお、デヌタベヌスで䜜業した埌に非垞に簡単に実行されたす、あなたはそれを「消し」、プヌルで新しいものを䞊げたした。 これにより、垞にクリヌンな䜜業甚デヌタベヌスを䜿甚でき、デヌタベヌスの分解やクリア、デヌタの収集ずロヌドなどを行う必芁がありたせん。



デヌタプロバむダヌ



次のパタヌンであるデヌタプロバむダヌは、おそらく誰もがよく知っおいるものです。 デヌタドリブンテストを䜜成し、同じテストロゞックを異なるデヌタで実行したい堎合は、倖郚゜ヌスこの堎合はxlsたたはCSVからデヌタを読み蟌むか、プルしたすいく぀かのサヌビスから、たたはあなたはそれらをここに瞫い付けおいたす。







– «» , - -, , Entity, Value Object, .







dataProvider, JUnit 5, , .



, dataProvider- loadUsers, , . – , .



– , – Value Object. – , – , . , , .



Technical Patterns



, , .



Decorator



– Decorator. - (web- - ) — , , , - . . — .



« » — « », « », : , .







, - . EventFiringWebDriver, , , , – web-, .



, , Factory, . , , «Factory, », ( ). .



Proxy



Proxy – , -, , , .







, , , , -, - .







– HTTP proxy , , , black-, , , , - . , , , - exceptional- .



– , CSS, , http- , , , , .



Business Involvement Patterns





, – . product-owners, - , , , , , , , – .



Keyword Driven Testing



, : , .



Keyword Driven — , . - , , , , – -, , .







Robot Framework , . , .



, . , , , . , .



, , . , , , , – , .



Behavior Specification



– Behavior Specification, . .







: , , 50 70 , , , 120. «» , , , , , – , , , , , .



, , .



Behavior Driven Development





Behavior Specification Behavior Driven Development, , , , , , .







, , , , , .



, Behavior Driven Development Behavior Specification unit- , .

Steps



– Steps, , Behavior Driven Development, Keyword Driven Behavior Specification. , . , – - , , -, .







, , , , .



: , - , , .

– web-, Page Object, , . -, .



, . , . , , , , .







Page Object , , Steps, .







web- , Steps, — , .



, , , Steps, , – , , , . , , , , , .



. , , , , , , , , , - , , , , - - , 








, , -, . -, , , , .

面癜かったず思いたす。 ありがずう






, Heisenbug 2017 Moscow , 8-9 . .

, :




All Articles