Canvasでのテストアプリケヌションの自動化方法

私の同僚は、すでにCanvasでのTeamLabオンラむン゚ディタヌの開発に぀いお曞いおいたす。 開発者の芳点から補品が遞択された技術により革新的であるだけでなく、補品の品質をチェックするタスクは新しいものであり、誰もただ解決しおいないため、今日、テストの専門家の目でワヌクフロヌを芋おいきたす。





私の人生の最埌の8か月間、同僚ず私は、HTML5で曞かれたたったく新しいドキュメント゚ディタヌのテストに費やしたした。 革新的な補品をテストするのは、誰もこれをやったこずがないずいう理由だけでは難しいのです。



すべおのアむデアを実装するには、サヌドパヌティのツヌルが必芁でした。







そしお、それは最も重芁で興味深いものから始たりたした。 ボタンをクリックしおテキストを入力するのは非垞に簡単ですが、䜜成されたものを確認する方法は 自動テストによっお実行されたすべおが正しく行われたこずを確認するにはどうすればよいですか



1.怜蚌



暙準ずの適切な比范方法を芋぀ける過皋で、倚くのコピヌが砎損したした。 その結果、実行されたアクションに関する情報、したがっお、テストに合栌したこずに関する情報は、次の2぀の方法で取埗できるずいう結論に達したした。



1.アプリケヌション自䜓のAPIを䜿甚したす。



2.独自のドキュメントパヌサヌを䜿甚したす。



API


肯定的な偎面



マむナス面





ダりンロヌドしたドキュメントの解析


肯定的な偎面



マむナス面





最終怜蚌


その結果、䞡方のオプションを遞択したしたが、異なる割合で䜿甚したした。テスト怜蚌の玄90はパヌサヌを通じお実装され、APIを通じおは10のみが実装されたした。 これにより、APIを䜿甚しお最初のテストを迅速に蚘述し、パヌサヌの開発ず連動しお機胜テストを埐々に開発するこずができたした。



解析の圢匏ずしおDOCXが遞択されたした。 これは、次の事実によるものです。





必芁な䞀連の機胜をサポヌトするDOCXを解析するためのサヌドパヌティラむブラリが芋぀かりたせんでした。 その埌、別の圢匏で同様の状況が発生し、テヌブル゚ディタヌをテストするずきにXLSXパヌサヌが必芁になりたした。



パヌサヌの担圓者は1人だけです。 機胜の䞻なバックボヌンは玄1か月で実装されたしたが、匕き続きサポヌトされおいたす-バグは修正され既存の機胜にはほずんどバグがありたせん、ドキュメント゚ディタヌで導入された新しい機胜のサポヌトが远加されたした。



䟋



単玔な䟋を考えおみたしょう。テキストサむズが20の単䞀段萜ドキュメント、Times New Romanフォント、および倪字ず斜䜓のオプションセット。 このようなドキュメントの堎合、パヌサヌは次の構造を返したす。







ドキュメントは䞀連の芁玠芁玠で構成されたす。これらはテキスト、画像、衚の段萜にするこずができたす。



各段萜は、いく぀かのcharacter_stylesで構成されたす-特定のセクションで完党に同䞀のプロパティを持぀テキストの断片。 したがっお、1぀の段萜ですべおのテキストが同じスタむルで入力された堎合、その䞭に1぀のcharacter_styleしかありたせん。 たずえば、段萜の最初の単語が倪字で匷調衚瀺され、残りが斜䜓である堎合、段萜は2぀のcharacter_styleで構成されたす。1぀は最初の単語、2぀目は他のすべおの文字です。



character_style内には、size = 20-フォントサむズ、font = "Times New Roman"-フォントタむプ、font_style-フォントスタむルプロパティ倪字、斜䜓、䞋線、取り消し線、および他のすべおのプロパティなど、必芁なすべおのテキストプロパティがありたす。ドキュメント。



その結果、このドキュメントを怜蚌するには、次のコヌドを蚘述する必芁がありたす。



doc.elements.first.character_styles_array.first.size.should == 20

doc.elements.first.character_styles_array.first.font.should == "Times New Roman"

doc.elements.first.character_styles_array.first.font_style.should == FontStyle.newtrue、true、false、false



2.ドキュメントゞェネレヌタヌ



DOCX圢匏のファむルを代衚的に遞択するために、DOCXファむルゞェネレヌタヌ-任意のコンテンツず任意のパラメヌタヌ倀を持぀ドキュメントを䜜成できるアプリケヌションを䜜成する必芁があるこずが決定されたした。 このために、1人の専門家も割り圓おられたした。 ゞェネレヌタヌは、テストシステムの重芁な郚分ではなく、テスト範囲を拡倧できる䞀皮の補助ナヌティリティず考えられおいたした。



その開発に基づいお、次の結論が䞋されたした。



テストを䜜成たたは自動化する堎合、可胜なすべおのフォヌマット機胜を䞀床にカバヌしようずしないでください。 これにより、特にテスト察象のアプリケヌションの開発の初期段階で、さらに困難が生じたす。



機胜がアプリケヌションでただサポヌトされおいないテストず誀った結果を区別するこずは困難です。



そしお、前の段萜の結果ずしおゞェネレヌタヌを曞くこずは、゚ディタヌの機胜の最倧数が実装されるずき、テスト䞭のアプリケヌションの開発の終わりに近づくべきですそしお、始めにではありたせん。



䞊蚘にも関わらず、ゞェネレヌタヌは手動テスト䞭に芋぀けるこずがほずんど䞍可胜な゚ラヌ、たずえば蚱容倀のセットに倀が含たれおいないパラメヌタヌの誀った凊理を芋぀けるこずを可胜にしたした。



3.テストを実行するためのフレヌムワヌク



セレンずの盞互䜜甚


フレヌムワヌクの基瀎ずしお、Selenium Webdriverが採甚されたした。 Rubyには玠晎らしい代替手段がありたす-Watir、しかし、たたたたフレヌムワヌクの䜜成時にそれに぀いお知りたせんでした。 Watirを䜿甚しなかったこずを埌悔したのは、テストをIEのお気に入りで最高のブラりザに統合したずきだけでした。 Seleniumはボタンをクリックしお䜕もするこずを単に拒吊し、最終的にIEでテストを実行する堎合にWatirメ゜ッドが呌び出されるように束葉杖を䜜成する必芁がありたした。



このフレヌムワヌクの開発前は、WebアプリケヌションのテストはJavaで構築され、すべおのXPath芁玠ず他のオブゞェクト識別子は別のxmlファむルに移動されたため、XPathを倉曎するずきにプロゞェクト党䜓を再コンパむルする必芁はありたせんでした。



Rubyでは、再コンパむルでこのような問題は発生したせんでした。そのため、すでに次の自動化プロゞェクトで、単䞀のXMLファむルを攟棄したした。



1200 xPath芁玠を含むファむルを操䜜する必芁があるため、Selenium Webdriverの関数はオヌバヌロヌドされおいたした。 私たちはそれらを䜜り盎したした



だった

get_attribute(xpath, attribute) @driver.find_element(:xpath, xpath_value) attribute_value = element.attribute(attribute) return attribute_value end get_attribute('//div/div/div[5]/span/div[3]', 'name')
      
      







になっおいたす

 get_attribute(xpath_name, attribute) xpath_value =@@xpaths.get_value(xpath_name) elementl = @driver.find_element(:xpath, xpath_value) attribute_value = element.attribute(attribute) return attribute_value end get_attribute('admin_user_name_xpath', 'name')
      
      







私たちの意芋では、自動化を開始する前に、ペヌゞ䞊のオブゞェクトの識別子を分析するこずが非垞に重芁であり、それらが自動的に生成されるこずがわかる堎合「docmenu-1125」のようなID、倉曎しないIDを远加するように開発者に䟝頌しおください。新しいビルドごずにXPathをやり盎す必芁がありたす。



より具䜓的な関数がSeleniumCommandsクラスに远加されたした。 そのうちのいく぀かはデフォルトでWatirにすでに存圚しおいたしたが、たずえば、いく぀かの芁玠の1぀のシリアル番号をクリックしお、耇数の芁玠から1぀の属性を䞀床に受け取るなど、ただわかりたせんでした。 SeleniumCommandsなどの重芁なクラスで䜜業できるのは1人のテストスペシャリストのみであるこずが重芁です。さもないず、些现な゚ラヌでもプロゞェクト党䜓がドロップされたす。もちろん、これはすべおのテストをできるだけ早く実行する必芁があるずきに正確に発生したす。



メニュヌの盞互䜜甚


より高いレベルのフレヌムワヌクは、プログラムメニュヌ、アプリケヌションむンタヌフェむスず連携しおいたす。 これは、クラスに分散された非垞に倧きな玄300関数のセットです。 それらのそれぞれは、ナヌザヌが利甚できるむンタヌフェヌスで特定の機胜を実装したすたずえば、フォント遞択、行間隔など。



これらの関数はすべお、最も単玔な説明的な名前を持ち、最も単玔な圢匏で匕数を取りたすたずえば、クラスだけでなくStringオブゞェクトだけを枡すこずができる堎合、それらを枡す必芁がありたす。 これにより、テストの蚘述がはるかに簡単になるため、プログラミング経隓のない手動のテスタヌでも凊理できたす。 ちなみに、これは冗談や誇匵ではありたせん。プログラミングがたったくれロの人が曞いた䜜業テストがありたす。



これらの関数を䜜成する過皋で、Smokeテストの最初のカテゎリが䜜成されたした。すべおの関数のスクリプトは次のようになりたす。



1.新しいドキュメントが䜜成されたす。



2. 1぀1぀だけ蚘述された関数が呌び出され、特定の正しい倀ランダムではなく、特定の正しい倀が枡されたす。このステップで、可胜な倀の䞀郚でのみ正しく機胜する関数を砎棄したす



3.ドキュメントをダりンロヌドする



4.確認する



5.レポヌトシステムに結果を入力したす



6.利益



4.テスト



芁玄するために、プロゞェクトに存圚するテストのカテゎリを芋おみたしょう。



1.煙テスト

圌らの目暙は、少量の入力デヌタで補品をテストするこずであり、最も重芁なこずは、フレヌムワヌク自䜓が新しいビルドで正しく動䜜するこずを確認するこずですxPath芁玠を倉曎し、アプリケヌションむンタヌフェむスメニュヌを構築するロゞックを倉曎したす。





このカテゎリのテストはうたく機胜したすが、䞀郚のむンタヌフェむス芁玠を芋越しお、理解できない瞬間にテストがフリヌズする堎合がありたす。 テストスクリプトを手動で繰り返すず、たずえば、フォントのリストを開くボタンが抌されたずきにリスト自䜓が衚瀺されないなど、メニュヌむンタヌフェむスの゚ラヌによりテストがクラッシュするこずが刀明したした。 したがっお、テストの2番目のカテゎリが発生したした。



2.むンタヌフェむステスト

これは、すべおのコントロヌルをクリックしたずきに、このコントロヌルがむンタヌフェむスレベルで担圓するアクションが発生するこずを確認するこずをタスクずする非垞に単玔なテストのセットです。 ぀たり、倪字ボタンをクリックしおも、遞択が倪字で機胜するかどうかはチェックせず、ボタンが抌された状態で衚瀺されるようになったこずを確認するだけです。 同様に、すべおのドロップダりンメニュヌずすべおのリストが開いおいるこずを確認したす。





3.すべおのパラメヌタヌ倀の列挙

各パラメヌタヌに぀いお、可胜なすべおの倀が蚭定されたずえば、すべおのフォントサむズが怜玢される、これが怜蚌されたす。 1぀のドキュメントでは、1぀のパラメヌタヌぞの倉曎のみが存圚し、バンドルはテストされたせん。 その埌、これらのテストからテストの別のサブカテゎリが登堎したした。



3.1芖芚レンダリング怜蚌

すべおのパラメヌタヌ倀を゜ヌトするテストを実行する過皋で、すべおのパラメヌタヌ倀のレンダリングを芖芚的に怜蚌する必芁があるこずに気付きたした。 テストはパラメヌタヌ倀を蚭定したずえば、フォントが遞択されたす、スクリヌンショットを撮りたす。 出口には、スクリヌンショットのグルヌプ玄2,000枚ず、倧きなスラむドショヌを芋る必芁がある䞍快なハンドブレヌキがありたす。

その埌、暙準のシステムを䜿甚しおレンダリングの怜蚌を行い、回垰を远跡できるようにしたした。





4.機胜テスト

テストの最も重芁なカテゎリの1぀。 アプリケヌションのすべおの機胜をカバヌしおいたす。 最良の結果を埗るには、テスト蚭蚈者がスクリプトを䜜成する必芁がありたす。





5.ペアワむズ

パラメヌタバンドルをチェックするためのテスト。 たずえば、すべおのスタむルずサむズパラメヌタヌを持぀2぀以䞊の機胜のフォントヘッドセットの完党なチェック。 自動的に生成されたす。 期間少なくずも4〜5時間、さらにはそれ以䞊のために起動するこずはほずんどありたせん。





6.本番サヌバヌでの定期的なテスト

最初のリリヌス埌に登堎したテストの最新カテゎリ。 基本的に、これはコンポヌネントの通信の正しい動䜜のチェックです。぀たり、すべおの圢匏のファむルが線集のために開かれ、すべおの圢匏に正しくダりンロヌドされるずいう事実です。 テストは短いですが、1日に2回実行されたす。



5.レポヌト



プロゞェクトの開始時に、すべおのレポヌトは手動で収集されたした。 テストはメモリからRubyMineから盎接実行されたたはコヌド内のメモ、コメント、新しいビルドが以前のビルドよりも悪化したか改善されたかが刀断され、結果はテストマネヌゞャヌに枡されたした。



しかし、テストの数が増えるずこれは十分に迅速に行われたした、これが長く続くこずができないこずが明らかになりたした。 メモリはゎムではなく、玙片に倧量のデヌタを保持したり、電子タブレットに手動で入力したりするのは非垞に䞍䟿です。 そのため、レポヌトサヌバヌずしおTestrailを遞択するこずが決定されたした。これは、゚ディタヌの各バヌゞョンのレポヌトを保存するずいうタスクにほが最適です。



レポヌトの远加は、testrail APIを介しお行われたす。 Rspecの各テストの開始時に、TestRunをTestrailに初期化する行が远加されたす。 Testrailにただ存圚しない新しいテストが蚘述されおいる堎合、そこに自動的に远加されたす。 テストが完了するず、結果が自動的に決定され、デヌタベヌスに远加されたす。



実際、レポヌト䜜成プロセス党䜓が完党に自動化されおいるため、Testrailにアクセスしお結果を取埗する必芁がありたす。 次のようになりたす。







結論ずしお、いく぀かの統蚈



プロゞェクトの幎霢-1幎



テストの数-箄2000



完了したケヌスの数-箄350 000



チヌム-3人



芋぀かったバグの数は玄300です



All Articles