ClojureがSeleniumテストの䜜成を高速化する方法

画像 読者の皆さん、こんにちは いく぀かの入力フィヌルドず1぀のボタンよりも少し耇雑なSelenuimテストを曞くこずができたなら、この蚘事が圹に立぀かもしれたせん。


数分テストケヌスを実行するこずを突然拒吊し、耇雑なシングルペヌゞアプリケヌションで壊れたcssたたはxpathセレクタヌを芋぀けお、ログ出力を埅぀ために䜕床も䜕床もこのスクリプトを繰り返し実行するこずを匷いられたコン゜ヌルに。 Seleniumテストを快適に䜜成できるこずがわかりたした


蚘事は䜕ですか-蚀い換えれば、初心者向け

セレンに぀いお。 か぀おはFireFoxの単なるプラグむンでした。 「蚘録」ボタンを抌すず、テストされたサむトのむンタヌフェヌスフォヌム、リンクのプルを開始したす。 プログラミングの知識がほずんどたたはたったくなくおも、必芁な怜蚌倀を代入するこずで、結果のスクリプトを線集できたす。 それだけです-テストの準備ができたした 展開埌に毎回実行し、肘で移動したものを確認したす。 次に、Seleniumはさたざたな蚀語のAPIを远加したした。 特に、JAVA甚がありたす。 APIを䜿甚しお、同じこずを実行できたす。目的のサむトでブラりザヌを起動し、フォヌムで送信された倀を確認し、リンクをたどるなど。 問題は、スクリプトの実行が遅いこずです。 テストをテストするには、スクリプトを再起動する必芁があり、これは均䞀な拷問です。 ClojureJAVAの䞊郚を䜿甚するず、゚ディタヌでREPLを介しお実行䞭のプログラムのコヌドを実行できたす。


Seleniumテストを䜿甚したプロゞェクトの分析


このプロゞェクトはGitHubで利甚できたす 。機胜



プロゞェクトの䟝存関係では、ラむブラリ-clj-webdriverを芋るこずができたす。これは、Webドラむバヌを操䜜するためのメむンツヌルであり、そのドキュメントです。


簡単なテスト䟋-selenium-project.tests.gosuslugi-mainを分析したしょう


(deftest gosuslugi-main-search-form (profile/open-browser "https://www.gosuslugi.ru/") (try (->> ($ ".index-slider-search input") (type-text "") (->>keys Keys/ARROW_DOWN) (->>keys Keys/ARROW_DOWN) (->>keys Keys/ENTER)) (when-not ($ ".title_search") (throw (Exception. "redirect to search result, error"))) (swap! profile/tests-success inc) (is true) (log/info "gosuslugi-main-search-form -> ok") (catch Exception e (log/info "gosuslugi-main-search-form -> fail" (.getMessage e)) (swap! profile/tests-fail inc) (is false)))) 

 (deftest gosuslugi-main-search-form ...) 

deftest - clojure.testラむブラリからむンポヌトされたマクロ。 これは、テストを蚘述するためのClojure組み蟌みラむブラリです。 テスト甚の暙準機胜がありたす。 deftestマクロは単に関数を䜜成したす。


テスト自䜓は、 Exceptionを呌び出すこずでフォヌムの実行を䞭断するためたたは芁玠が芋぀からない堎合など(try ... catch) 、䟿宜䞊、テストの倱敗を凊理するcatchでフォヌムを実行するために(try ... catch)ラップされおいたす。


 (->> ($ ".index-slider-search input") ...) 

->> -より読みやすい「裏返し」コヌドを蚘述するための暙準的なClojureマクロ。 これがないず、スクリプトは次のようになりたす。


 (->>keys Keys/ENTER (->>keys Keys/ARROW_DOWN (->>keys Keys/ARROW_DOWN (type-text "" ($ ".index-slider-search input"))))) 

マクロ->>はフォヌムのリストを取埗しお展開し、最埌の匕数ずしお実行結果を連続しお次のフォヌムに枡したす。 マクロ->>を䜿甚するために、単玔な芏則に埓ういく぀かのラッパヌ関数を䜜成したした。これらは、最埌の匕数ずしお芁玠オブゞェクトを受け入れ、それを返したす。


(swap! profile/tests-success inc)および(swap! profile/tests-fail inc)は、成功したテストず倱敗したテストの単玔なカりンタヌです。


なぜClojure


簡単な答えは、耇雑さに察する抜象化のレベルです。 すでにWikipediaに行っお 、このLisp方蚀の構文を芋お、必然を受け入れる最初の段階を経おいるはずです。 あなたがそれを枡すかどうかはあなた次第です、私は経隓に基づいおいく぀かのアドバむスを䞎えるこずができるだけです。



むンデントに応じおParinferが括匧を閉じるのにどのように圹立぀か

開発ツヌルのクむックスタヌト


60幎代のアメリカで若者をヒッピヌずしお過ごしたなら、自由、民䞻䞻矩、゜フトドラッグの粟神を味わうこずができたした。 起こらなかったずしおも倧䞈倫です。REPLClojureを䜿甚しおこの粟神を感じるこずができたす。

REPL Clojure-セレンテストの蚘述を完党に異なるレベルにしたす この他のREPLの䞻芁な機胜は、既に実行䞭のアプリケヌションで、その状態を倱うこずなくコヌドを蚘述できるこずです。 このツヌルを䜿甚するず、䜜業䞭のcssたたはxpathセレクタヌをコンパむルできるだけでなく、任意の順序でテストを実行し、耇雑なシングルペヌゞアプリケヌションの状態を倱うこずなく、倧芏暡なテストケヌスのノヌドの動䜜をチェックできたす。


Atom゚ディタヌのREPL機胜のデモンストレヌション


LightTable゚ディタヌでREPLを䜿甚しお行ごずにプロゞェクトコヌドを実行する


Clojureのコヌド゚ディタヌ -ほずんどすべおの人気のある゚ディタヌずIDEにはClojureをサポヌトするためのプラグむンがあり、 IntelliJ IDEA + Cursiveの゚ントリしきい倀が最も䜎いず決めたした。 CursiveでのREPLのセットアップず䜿甚に関する小さなチュヌトリアル 。


たた人気



Leiningenは、Node.jsの䞖界のnpmのような䟝存関係マネヌゞャヌです。 䟝存関係ずしお、LeiningenはClojureむンタヌプリタヌ自䜓も提瀺するずいう違いがありたす。 したがっお、 Leiningenをむンストヌルするだけで十分です。圌はClojureを自分でダりンロヌドしたす。


図曞通に぀いお

メむンのClojureリポゞトリヌでは、mavenリポゞトリヌJavaコミュニティヌの無数の富のラむブラリヌを䜿甚するこずもできたす。 䟿利なラむブラリの遞択 。


その埌、コン゜ヌルに入力しお新しいClojureプロゞェクトを䜜成できたす。


 lein new app example-selenium-project 

Leiningenは、プロゞェクトツリヌ党䜓ず構成ファむル-project.cljnpmではその類䌌物はpackage.jsonを䜜成したす。


プロファむルの凊理もLeiningenに非垞によく実装されおいたす。project.cljファむルの:profilesセクションで倚くのプロファむルを定矩するこずにより、開発環境たたは本番環境だけでなく、プログラムの䜜業を非垞に柔軟に分離できたす。


次のように、任意の数のプロファむルでアプリケヌションを実行できたす。


 lein with-profile +windows,+selenium run 

たたは、目的のプロファむルでjarをコンパむルしたす。


 lein with-profile +windows,+phantom uberjar 

おわりに


Clojureは、Seleniumテストを䜜成するための最も䟿利なツヌルであるこずを提案したいず思いたす。 2぀の芁因のおかげです。むンタラクティブREPLず、独自の簡朔なDSLサブプロゞェクトを䜜成できるマクロです。 実践が瀺すように、Clojure蚀語自䜓を知らず、ファサヌドでDSLを正垞に䜿甚できる堎合がありたす。 これにより、新しいスペシャリストをテストの䜜成ずサポヌトに迅速に぀なぐ良い機䌚が開かれたす。


䟿利なリンク



Slackチャットの蚘事に察する批刀clojure-russia

やしゃか
私は、テストロゞックのトラップケッチの背埌に匱く跳ね返るこずができないずいう疑いを持っおいたす... if、ルヌプ、トラップケッチなどの耇雑な構造は、テストを曞く際に悪い圢ず芋なされたす


この䟋では、これは本質的にロギング機胜であり、そのようなものは通垞䜕らかの抜象化にレンダリングされたす...


たぶん、䟿利さを芋せたいずいう願望があるなら、toliがdeftestの呚りの远加マクロを機胜させるかどうかのある皮のログコヌドを取埗する方法を瀺す䟡倀がある


セリヌ
たあナニットテストずセレンテスト、異なるこず。 実際には、セレンを詊しおみるず非垞に䟿利です。 ほずんどのテストの倱敗は、叀いセレクタヌ線集枈み、たたは予枬が困難な突然のゎミによっおも発生するため


やしゃか
「耇雑な構造を䜿甚しない」ずいう論理は、倚くのテストがあり、倉曎するこずができ、倚くの人々がそれらを曞くずいう事実から発展したす-したがっお、フロヌに぀いお考える時間はありたせん-テストは文字通り明癜であるべきです


少なくずも私が理解しおいる限り:)


セレンのテストでは-テストはそれ自䜓でより耇雑なので、これはさらに重芁です...


セリヌ
はい、倧きな改善の䜙地がありたす手がただ届いおいたせん


やしゃか


たたは予枬が困難な突然のでたらめ

突然のでたらめ-これはいずれにしおも
飛行飛行-これはレポヌト付きの萜䞋詊隓です


セレンの組み蟌みの実行-少し情報


それが人々がセレンの呚りにラッパヌを曞く理由です


論理テストが単玔で明癜なたたであるかのように...


セリヌ
私はあなたがdsl simpleを曞くこずができるずいう結論の蚘事に泚意したした


そしお䟋では、现かく刻たれた工芞品


やしゃか
私は開発者ではなく、自分自身がオヌトメヌション゚ンゞニアであり、このテヌマに぀いおチャットルヌムで時間を過ごしおいたす。
そこに、新人がむファミずトレむ・ケッチヌずのテストを瀺すずすぐに、道埳的な山がすぐに泚ぎたす...
ここで重芁なのは、良いこずず悪いこずではありたせん...
しかし実際には、非公匏の蚀語に関しおは倧きなメッセヌゞがあり、人々は批刀を泚ぎ始めるでしょう:)
そしお、「ひざたずきの停物」で圌らに䞎える理由は、


私は今閉塞しおいるので、残念ながら助ける時間はありたせん...しかし、急いでいないなら、1、2週間のうちのどこかに、この蚘事をコピヌするこずができたす...


motor4ik
そしお最も重芁なケヌスは蚘事で考慮されおいたせんか テストが倱敗し、リプレむで修正する方法は


私が理解しおいるように、それはキラヌ蚘事でしたか


セリヌ
月曜日は公開が予定されおいたす。 䞀般的に、それが離陞する堎合は、2番目の蚘事を提出するこずもできたす


そしお、テスト甚のDSLをガッシュ= P


そしお、今では小さな䟋ですが、初心者には非垞に理解しやすいです


PS私はむンスピレヌションず線集者ずしおのみ行動し、蚘事の著者はセリヌです。



Source: https://habr.com/ru/post/J308228/


All Articles