RubyずWATIRを䜿甚したテスト自動化

画像

リ゜ヌスhabrahabr.ruの芪愛なる蚪問者 テスト自動化゚ンゞニアのJeremy Suarezによる蚘事を玹介したす。 RubyおよびWATIR蚀語を䜿甚しおプロゞェクトの自動テストを敎理する予定がある堎合は、この蚘事が圹立ちたす。 Jeremyは、基本的な䟋を䜿甚しお、すべおを簡単な蚀語で説明したす。 蚘事を読んだ埌、プロセスの最初のステップから最終段階たで、プロセスを明確に理解できたす。



資料に盎接進む前に、著者にいく぀かの蚀葉を捧げたいず思いたす。 ゞェレミヌはテストで豊富な経隓を持っおいたす。 圌の倚くのプロゞェクトで、開発者からテスタヌ、プロゞェクトマネヌゞャヌたで、さたざたな圹割を果たしたした。 珟圚、ThoughtWorksで働いおいたす。



それでは始めたしょう



察象読者

この資料は、䞻に自動化されたテストスクリプトの䜜成を蚈画しおいるテスト゚ンゞニア、たたは既補のフレヌムワヌクをサポヌトする予定のある゚ンゞニアに圹立ちたす。 読者はRuby構文の基本的な知識を持ち、Webアプリケヌション開発の基本原則に粟通しおいるこずを前提ずしおいたす「リンク」、「フォヌム」、「JavaScript」などの甚語はパニック攻撃を匕き起こしたせん。



Rubyは比范的孊習しやすい蚀語です。 Python、C ++、Java、たたはCでコヌドを蚘述した経隓がある堎合は、すぐに習埗できたす。



前提条件ず制限

WebアプリケヌションのテストにWATIRを䜿甚するための前提条件の䞀郚を以䞋に瀺したす。 おそらく䞻なものは、モゞュヌルがIE 5.5以䞋でのみ動䜜するこずです。 残念ながら、Netscape、Opera、Firefox、たたはその他のブラりザヌで動䜜するようには蚭蚈されおいたせん。 これは、WATIRを䜿甚したクロスブラりザテストが䞍可胜であるこずを意味したす。 2番目の重芁な詳现は、WATIRには独自のレコヌダヌがないこずです。 抂しお、WATIRは、スクリプトを手動で蚘述するずきに䜿甚できるIEメ゜ッドずオブゞェクトのラむブラリです。 最埌に、3぀目-WATIRには、ペヌゞにあるオブゞェクト、およびそのタむプず䜿甚可胜なメ゜ッドを識別する手段がありたせん。 すべおのリンク、画像、フォヌムなどを収集する方法を提䟛したす。 したがっお、スクリプト開発プロセスは、詊行錯誀の方法に埓うこずがよくありたすが、偶然、必ずしも悪いわけではありたせん。



準備する

自動化されたテストスクリプトを蚘述するプロセスの前に、準備プロセスが必芁です。 この堎合の最も重芁な点は、おそらく、すべおの自動テストが実際には既補の手動テストスクリプトから論理的に埓うこずです。 テストフレヌムワヌクを開発するための努力のほずんどは、誀っお蚘述された手動テストのために無駄になりたす。 理解するこずが重芁です-これは、手動テストず自動テストの䞡方をさらにサポヌトするための䞻芁なポむントです。 アプリケヌションを䜿甚しお実装されたビゞネスプロセスの盞互䜜甚の党䜓像を確認し、タスクの範囲党䜓をカバヌする説明にアプロヌチする必芁がありたす。



テスト察象のアプリケヌションの詳现を理解する

機胜芁件のコレクションある堎合

手動たたは自動テストの蚭蚈に盎接進む前に、アプリケヌションが䜕であるかを理解する必芁がありたす。 最も簡単な方法は、開発芁件に慣れるこずです。 珟圚、芁件の文曞化はほが普遍的です。 そしお、明確で完党か぀䞀貫した芁件が明確にある堎合、これは良い出発点です。



専門家の調査

機胜芁件の調査に加えお、そうでない堎合は、補品の開発者ず゚ンドナヌザヌから情報を盎接取埗できたす。 通垞、建築家、ビゞネスアナリストなどもこのプロセスに参加できたす。 開発者は通垞、アプリケヌションがどのように機胜するかに぀いお独自のアむデアを持っおいるため、できるだけ倚くの異なる分野の専門家がディスカッションに参加するこずが重芁です。 そしお、原則ずしお、圌らの芖点はクラむアントの期埅ずは異なりたす。



テストケヌスによるビゞネスプロセスのプレれンテヌション

すべおのテストアクティビティは、手動たたは自動にかかわらず、詳现なステップバむステップのテストシナリオに基づいおいる必芁がありたす。 これがないず、テストの進捗状況、コヌドカバレッゞの割合、およびその他のメトリックを远跡するこずが問題になりたす。 自動テストが独自のドキュメントであるず考えるのは間違っおいたす。 圌らは絶えず倉化し、線集されおいたす。 このようなアプロヌチは、倚倧な時間コストず゚ラヌの増加に぀ながりたす。



デヌタ準備プロセスの䜜成

倚くのアプリケヌションは、䜜業䞭にデヌタを䜿甚たたは䜜成したす。 手動ず自動の䞡方のテスト目的で、システム内のデヌタの状態はサむクルごずに同じでなければなりたせん。 この特定のケヌスでプログラムが䜕をすべきかによっお、収集、䜜成、たたはその䞡方のために、デヌタ準備スクリプトずクリヌニングスクリプトを準備する必芁がありたす。 デヌタの準備ず粟補のためのテストは、通垞のスクリプトず同様に発行し、埌者の前提条件ずしお䜿甚する必芁がありたす。



自動化に適したケヌスを特定する

有名な広告スロヌガンにあるように、「すべおのペヌグルトが同じように圹立぀わけではありたせん。」 同じこずがテストケヌスにも圓おはたりたす。 すべおを自動化する必芁はありたせん。 最も単玔で、最も頻繁に繰り返されるものだけが良い候補です。 UIで機胜するケヌスから始めお、デヌタを䜜成および削陀する必芁のあるケヌスに泚意を払っおください。 最埌に、最も重芁な機胜セグメント最も䞀般的に䜿甚される機胜をカバヌする䞀連のスクリプトを䜜成しおみおください。



自動化されたスクリプトフレヌムワヌクの䜜成

正確にテストする必芁があるものの明確なビゞョンが埗られたら、必芁な機胜をステップバむステップのケヌスずしお文曞化した埌、自動テストスクリプト自䜓の開発を安党に開始できたす。 手動テストケヌスを空のRubyスクリプトファむルにコピヌしたす。 スクリプト内のステップをコメント化し、別々のセクションに分割したす。 分割する堎合、ある堎所でデヌタを䜜成し、別の堎所で䜿甚するずいう原則に埓うこずもできたす。 スクリプトの䜜業䞭にデヌタが生成されたが、䜕らかの理由でケヌス自䜓が最埌に到達しなかった堎合、このデヌタを削陀しおスクリプトを埩元しようずする方が合理的です。



実装

䞀般に、RubyずWATIRを䜿甚したテストスクリプト自動化プロセスの実装は、いく぀かの簡単な手順になりたす。

•テストケヌスが遞択され、䞀連の機胜を䜿甚しおプログラムできたす。

•IEオブゞェクトの初期化たたは既存のブラりザヌりィンドりぞの接続

•アプリケヌションの開始リンクに移動したす

•さらなるアクションに必芁なすべおのリンク、画像、フォヌムの収集

•収集された情報、リンクの名前、フォヌムに関する情報、画像の名前などから

•リンク、フォヌム、画像でアクションを実行する

•必芁になるたで手順3〜6を繰り返したす。 各ステップの最埌に、実行されたアクションが正垞に終了したこずを確認する必芁がありたす。



最倧の効率を達成するには、各ステップに怜蚌を䌎うこずが非垞に重芁です。 そのようなチェックが実行されない堎合-可胜-スクリヌンショットを撮ったり、ログをコピヌしたり、少なくずもわかりやすい゚ラヌメッセヌゞを発行したりできたす。 そうしないず、「リンクが芋぀かりたせん」たたは「フォヌムxxxが利甚できたせん」などのリスクが発生したす。



スクリプト開発者のみが、䜕かがうたくいかなかった堎合に゚ラヌメッセヌゞがどの皋床有益であるかに䟝存したす。 䜎品質のスクリプトを手動で実行しお、䜕が起こったのかを理解する必芁がありたす。正しくコンパむルされたスクリプトは、障害自䜓に関するすべおの必芁な情報を生成できたす。



実装の技術的偎面

IEオブゞェクトの初期化

新しいブラりザヌIEオブゞェクトを䜜成するか、既存のIEオブゞェクトに接続するこずから始めたす。



$ ie = IE.new



たたは



$ ie = IE.attachtitle、“ ...”



開始リンクをたどる



指定されたリンクをクリックしお、アプリケヌションのテストを開始したす。 すべおのケヌスはこれで始たりたす。 たた、スクリプト自䜓の実行䞭にリンクをたどる必芁がある堎合がありたす。



$ ie.goto“ http// ....”



コンテンツ怜蚌



コンテンツを確認する最も簡単な方法は、assertコマンドを䜿甚するこずです。 フォヌムが存圚するこず、ボタンが䜿甚可胜であるこず、ペヌゞにテキストが含たれおいるこずなどを確認しおください。RubyにはTRYルヌプがないため、rescueキヌワヌドを䜿甚したす。



始める

assert$ ie.pageContainsText「ログアりト成功」

assert$ ie.formname、“ Login”。exists

$ log.info「テストステップ5に合栌したした」

救助

$ log.error「テストステップ5に倱敗したした」

$ log.info「゚ラヌテキストは」、぀たり.text

終わり



必芁なリンク、画像、フォヌムのコレクション



スクリプトを蚘述する過皋で、リンクたたは画像の正確な名前、URL圢匏、フィヌルド名などを決定するこずは必ずしも容易ではありたせん。 このような堎合、ダンプをログファむルたたは画面にアップロヌドできたす。 この情報は、テストの䜜成時たたはデバッグ時に圹立ちたすが、ケヌスの最終バヌゞョンでは無効にする必芁がありたす。 出力は、ファむルおよび暙準出力デバむスにも出力できたす。



$ log.info、$ log.error、$ log.warninglog4jログファむルぞのすべおの出力。



すべおのリンクを衚瀺



puts $ ie.show_links



すべおのフォヌムを衚瀺



puts $ ie.show_forms



すべおの画像を衚瀺



puts $ ie.show_images



すべおのオブゞェクトを衚瀺



puts $ ie.show_all_objects



すべおのフレヌムを含むペヌゞ党䜓を衚瀺したす。



puts $ ie.html



リンクをクリックしおください



リンクのアクティブ化は、名前たたは盎接URLを䜿甚しお実行できたす。 JavaScriptを䜿甚する堎合、リンクはURLによっおのみアクティブ化できたす。リンクが画像リンクの堎合は、そのむメヌゞタグsrc、imageタグによっおアクティブ化できたす。 クリック方匏は、リンクをアクティブにするための暙準のWATIR方匏の1぀です。



$ ie.linktext、“ Portfolio”。クリック



リンクテキストが時間ずずもに倉化する可胜性があるが、その堎所は倉わらない堎合、リンクむンデックスを䜿甚する方が安党ですさたざたなリンクのむンデックスを怜玢するには、$ ie.show_linksを䜿甚したす。

$ ie.linkむンデックス、20.click



JavaScriptを䜿甚する堎合、URLたたはhrefタグを䜿甚できたす。

$ ie.linkurl、/ javascriptdeleteClient \\ d ,. * /。クリック



URLぱンコヌドする必芁があるこずに泚意しおくださいスペヌスは20などで衚されたす。 䞊蚘の䟋のように、正芏衚珟を䜿甚できたす。



画像をクリック

远加のタグscrおよびaltが存圚するこずを陀いお、画像をクリックするこずは、リンクをクリックするこずず倧差ありたせん。

$ ie.imagename、“ login.gif”。クリック



フォヌム送信

フォヌムぞの入力ず送信は、おそらくサむトナビゲヌション段階で完了するのが最も難しい手順です。 これを行うには、すべおのテキストフィヌルド、遞択リスト、たたはフォヌムに存圚するその他の芁玠の名前を知る必芁がありたす。 これらの目的にはie.show_all_objectsを䜿甚したす。

$ ie.textFieldname、“ username”。set“ testuser”

$ ie.textFieldname、“ password”。set“ testpass”



送信は、察応するオブゞェクトを「クリック」するこずで実行されたす。

$ ie.buttonvalue、“ Login”。クリック



共有斜蚭の短いツアヌ

ポップアップを䜿甚する



アクション

新芏、戻る、進む、send_keys、goto、閉じる、曎新、最小化、最倧化、埩元



$ ie.back

$ ie.forwards

$ ie.send_keys“ {TAB} {TAB} {ENTER}”

$ ie.close

$ ie.goto「http://www.google.com」

$ ie = IE.new



衚瀺機胜

showFrames、show_frames、showForms、show_forms、showImages、show_images、showActive、show_active、showLinks、show_links、showAllObjects、show_all_objects、show_tables、ボタン、show_spans、show_labels



$ ie.show_tables

$ ie.buttons.each {| m | mを眮く}



継承オブゞェクト

frame、textField、span、row、selectBox、radio、select_list、text_field、

チェックボックス、ボタン、チェックボックス、リンク、セル、フォヌム、テヌブル



$ ie.frameむンデックス、1

$ ie.textFieldname、“ q”。set“ Test”

$ ie.buttonvalue、“ OK”。クリック

$ ie.linktext、“ Happy link”。クリック

$ ie.select_listname、“ Day”。select_value“ today”



オブゞェクトリスト

チェックボックス、ラベル、画像、スパン、ラゞオ、select_lists、text_fields、ボタン、テヌブル、リンク



$ ie.checkboxes.each {| m | mを眮く}

$ ie.radios.each {| m | mを眮く}

$ ie.links.each {| m | mを眮く}



チェック

getText、text、getStatus、status、getHTML、html、pageContainsText、contains_text、title



if$ ie.text.match“ Hallo”= nil

「合栌」

他に

「倱敗したした」

$ ie.contains_text「Google」

戻り倀True



その他の機胜

getImage、getIE、enable_spinner、set_fast_speed、enable_spinner =、wait、popup、down_load_time、getLink、set_slow_speed、getTablePart、focus、url



テキストフィヌルド

説明

テキスト名=質問ID =倀= alt = src =



オブゞェクト

textField、text_field



認識方法

$ ie.show_all_objects

$ ie.show_active

$ ie.textfields.each {| textfield | テキストフィヌルドを眮く}



その他の方法

value、value =、clear、click、send、set、enabled、flash、html、append、getContents、focus、verify_contains



最も䜿甚される方法

倀、蚭定、远加、verify_contains。



䟋

$ ie.textFieldname、“ q”。value =” Sam”

$ ie.textFieldname、“ q”。append“ I am”

$ ie.textFieldname、“ q”。value

戻り倀「Sam I am」

$ ie.textFieldname、“ q”。getContents

戻り倀「Sam I am」

$ ie.textFieldname、“ q”。set“ Happy”

$ ie.textFieldname、“ q”。verify_contains“ app”

戻り倀true



ボタン

説明

送信名= btnG id =倀= Google怜玢alt = src =



オブゞェクト

ボタン



認識方法

$ ie.show_all_objects

$ ie.show_active

$ ie.buttons.each {|ボタン| ボタンを眮く}



その他の方法

倀、衚瀺、クリック、送信、有効、フラッシュ、html、無効、フリヌズ、フォヌカス



最も䜿甚される方法

クリックしお



䟋

$ ie.buttonname、“ btnG”。クリック

$ ie.button名前、“ btnG”倀

戻り倀「Google怜玢」



参照資料

説明

「name = id = innerText = Business Solutions href = http//www.google.com/services/」



オブゞェクト

リンク



認識方法

$ ie.show_links

$ ie.show_active

$ ie.links.each {| link | リンクを眮く}



その他の方法

倀、タむトル、クリック、link_has_image、有効、flash、html、href、src、text、focus、name、innerText、equal



最も䜿甚される方法

クリックしお



䟋

$ ie.linkテキスト、「ビゞネス゜リュヌション」。クリック

$ ie.linktext、“ Business Solutions”。enabled

戻り倀true

$ ie.linkテキスト、「ビゞネス゜リュヌション」。link_has_image

戻り倀false



備考show_activeたたはshow_all_objectsメ゜ッドが䜿甚されおいる堎合、リンクはタむプなしで返されたす。



遞択リスト

説明

select-one name = logonForm_idJsp150質問ID = logonForm_idJsp150質問倀=猫の名前は䜕ですか



オブゞェクト

select_list



認識方法

$ ie.show_all_objects

$ ie.show_active



その他の方法

オプション、遞択、倀、getSelectedItems、クリック、有効、フラッシュ、select_item_in_select_list、html、getAllContents、select_value、clearSelection



最も䜿甚される方法

select、getSelectedItems、getAllContents、select_value、clearSelection



䟋

$ ie.select_listname、/Question/).value

戻り倀「あなたの猫の名前は」

$ ie.select_listname、/Question/).getAllContents

配列を返したす[「奜きな色は䜕ですか」、「あなたの猫の名前は䜕ですか」]

$ ie.select_listname、/Question/).select_value「あなたの猫の名前は」



チェックボックス

説明

チェックボックス名= option1 id =倀= Milk alt = src =



オブゞェクト

チェックボックス

チェックボックス



認識方法

$ ie.show_all_objects

$ ie.show_active

$ ie.checkboxes.each {|チェックボックス| チェックボックスを眮く}



その他の方法

倀、クリア、クリック、蚭定、有効化、チェック、フラッシュ、html、isSet、getState



最も䜿甚される方法

クリック、蚭定、クリア、チェック



䟋

$ ie.checkboxname、“ Milk”。セット

$ ie.checkboxname、“ Milk”。isSet

戻り倀true

$ ie.checkboxname、“ Milk”。クリック

$ ie.checkboxname、“ Milk”。isSet

戻り倀false

$ ie.checkbox名前、「牛乳」。

$ ie.checkboxname、“ Milk”。isSet

戻り倀false



ラゞオボタン

説明

ラゞオ名= group1 id =倀=バタヌalt = src =



オブゞェクト

ラゞオ



認識方法

$ ie.show_all_objects

$ ie.show_active

$ ie.radios.each {| radio | ラゞオを眮く}



その他の方法

倀、クリア、クリック、蚭定、有効、チェック、html、isSet、getState



最も䜿甚される方法

セット、チェック 明確、慎重に



䟋

$ ie.radio倀、「バタヌ」。 セット

$ ie.radiovalue、“ Butter”。isSet

戻り倀true



泚ラゞオボタンの明確な方法は䜿甚しないこずをお勧めしたす。 別のボタンを抌しおラゞオボタンをリセットするこずをお勧めしたす

$ ie.radio倀、「バタヌ」。 クリア



フレヌムレむダヌです

説明

HTMLドキュメント名=メッセヌゞID = src = frameshop-intro.html



オブゞェクト

フレヌム



認識方法

$ ie.show_all_objects

$ ie.show_frames



その他の方法

泚フレヌムは通垞のIEりィンドりのように動䜜したす。 むンデックスだけでなく、名姓でもアクセスできたす。通垞は、アクセスするために別の倉数が䜜成されたす。 たた、倚くの堎合、フレヌムは他のフレヌムにネストされたす。



最も䜿甚される方法

䟋

$ f1 = $ ie.frame名前、「メッセヌゞ」

$ f2 = $ ie.frameむンデックス、1

$ f1.show_all_objects

最埌の行は、通垞のオブゞェクトのように、すべおのフレヌムオブゞェクトを返したす。



テクニック

ポップアップ凊理

JavaScriptやその他の技術を䜿甚したクラむアント偎の怜蚌スキヌムが広く普及しおいるため、Webアプリケヌションのテストではポップアップが頻繁に発生したす。



これらは、IEブラりザによっお生成されるものず、アプリケヌション自䜓によっお生成されるものの2぀のタむプに分けられたす。



IEは通垞、䞀床だけ衚瀺されるポップアップを生成したす。 少なくずも、暗号化されおいないデヌタを転送したり、フォヌムを送信したり、パスワヌドの蚘憶に぀いお尋ねたりするずきに衚瀺されるWindows譊告りィンドりを確認しおください。 IE蚭定でこのようなりィンドりの衚瀺をブロックし、スクリプトで凊理しないこずをお勧めしたす。 JavaScriptずActiveXはりィンドりを圢成し、ナヌザヌにこのアクションたたはそのアクションの確認を芁求し、誀ったデヌタを衚瀺するなど。 IEは、javascriptダむアログが閉じられるたでペヌゞが完党にロヌドされたずは認識しないため、Rubyスクリプトはダむアログが閉じられるたで䜜業を完了したせん。



これは問題を匕き起こす可胜性がありたす。りィンドりを閉じるには前の手順を実行する必芁があるためですが、ダむアログボックスのために完了できたせん。



このような状況を防ぐには、javascriptポップアップの衚瀺をトリガヌする可胜性のあるアクションを別のスレッドで実行するこずをお勧めしたす。 これにより、別のスレッドがりィンドりが閉じるのを埅っおいる間、メむンスクリプトが動䜜し続けるこずができたす。

スレッド



確認ボタンをクリックしお、ダむアログを閉じたす。

クリッカヌ= WinClicker.new

Clicker.clickJavaScriptDialog「OK」



非衚瀺のフレヌム

堎合によっおは、show_frames関数が0を返したすが、ペヌゞ䞊のフレヌムの倚くたたはすべおが非衚瀺フレヌムの䞀郚になる堎合がありたす。 ペヌゞにオブゞェクトが芖芚的に含たれおいるが空のリストが返される状況に盎面しおいる堎合は、それらが非衚瀺のフレヌムにあるかどうかを確認しおください。 次のコマンドを䜿甚したす。

$ ie.frameむンデックス、1...

これにより、むンデックスによっおフレヌムにアクセスできたす。 メむンフレヌムのむンデックスは0、2番目の行はそれぞれ1です。



むンタラクティブスクリプト

RubyずWATIRでスクリプトを蚘述するプロセスに慣れるず、独自のレコヌダが䞍足しおいるため、おそらく非垞に時間ず手間がかかるこずに気付くでしょう。 憂鬱な憂鬱を打砎する1぀の方法は、ビルトむンのルビヌむンタヌプリタヌを時々䜿甚するこずです。



むンタヌプリタヌは、開いおいるブラりザヌでスクリプトを1行ず぀デバッグする機胜を提䟛したす。 最初からスクリプトを毎回実行する代わりに、show_links、show_all_objectsなどの䞊蚘のメ゜ッドを䜿甚しお、衚瀺されたペヌゞ䞊のオブゞェクトを認識できたす。



別の方法は、むンタラクティブなshow_active_method関数です。 珟圚フォヌカスされおいるオブゞェクトを認識するために䜿甚されたす。

puts $ ie.show_active



ヒントずコツ

組み蟌みのルックアップ

todaysDate倉数を月月幎04212006の圢匏で珟圚の日付に蚭定したす

$ todaysDate = Time.now.strftime "mdY"

文字列の日付を珟圚の日付倀に眮き換えたす

pimsSQL「name = '_ 1'およびprime_broker = 'Bobby Brown'のblotter_fundsから削陀」

たたは同じ、文字列連結のみを䜿甚

pimsSQL "名前= '" + $ todaysDate + "_1'およびprime_broker = 'Bobby Brown'のblotter_fundsから削陀"



元の蚘事ぞのリンク

www.thoughtworks.com/insights/blog/creating-automated-test-scripts-ruby-and-watir



All Articles