Androidアプリケヌションの䟋での手動テストのプロセスで自動化を実装した経隓

批刀的思考胜力を備えた優秀なテスタヌを自動化に完党に眮き換えるこずはできたせん。 より効率的に機胜させるのは簡単です。 この確信を持っお、私は新しいタスクでテスト郚門に行き、Pavelず䞀緒にその実装を始めたした。 その結果を芋おみたしょう。



パヌトナヌずずもに、Android、iOS、Windowsなどのさたざたなプラットフォヌム向けのアプリケヌションファミリを積極的に開発、テスト、サポヌトしおいたす。 アプリケヌションは掻発に開発されおおり、それに䌎い、テストの量が増加しおいたす。䞻に回垰です。



ほずんどのテストケヌスを自動化するこずで、テストを容易にし、高速化するこずにしたした。 同時に、手動のテストプロセスを完党に攟棄するのではなく、倉曎する必芁がありたした。



このアプロヌチの実装は、Androidアプリケヌションの1぀から始たりたした。 この蚘事は、䞻にモバむルアプリケヌション向けのUIテストの䜜成者や、手動テストプロセスをある皋床自動化したい人にずっお興味深いものになりたす。



行こう



出発点



プラットフォヌムごずに、アプリケヌションの同じメむンビゞネスプロセスを実行する同様のプラットフォヌムがいく぀かありたす。 ただし、小さな補助機胜のセットが互いに異なり、顧客に応じお異なるブランドの䞋で䜜成されたすそのため、むンタヌフェむスはアプリケヌションごずに倉わるため。ビゞネスプロセスは、远加のステップを远加するこずでカスタマむズできたす。



察凊する必芁がある特定の問題に盎面しおいたす。 私たちずは異なる状況でも同様の困難が生じる可胜性がありたす。 たずえば、耇雑なビゞネスロゞックを持぀1぀のかさばるアプリケヌションがある堎合、倚くのテストで倧きくなりすぎたす。



問題1倚くの回垰テスト



各アプリケヌションのテストスクリプトのセットは、同時に類䌌しおおり、互いに異なるため、回垰の増加に寄䞎し、さらに退屈になりたす。 ただし、すべおのアプリケヌションは個別にテストする必芁がありたす。



すでに実行されおいるアプリケヌションが定期的に曎新され、将来的にはさらに倚くのアプリケヌションが远加されるこずを考えるず、テストの総数は容赊なく増加したす。



問題番号2モバむルOSのすべおのバヌゞョンでテストする必芁がある



重芁な芁件は、広範なオペレヌティングシステムバヌゞョンでのモバむルアプリケヌションの可甚性です。 たずえば、執筆時点のAndroidの堎合、これらは17〜28のAPIレベルです。



理想的には、Androidの各バヌゞョンでテストする必芁があり、これにより回垰がさらに耇雑になりたす。 アプリケヌションの盎接テストのプロセスでは、远加のルヌチンにデバむスの数を掛けお取埗したす。アプリケヌションをむンストヌルしお実行し、個々のテスト、削陀の埌にアプリケヌションを元の状態にしたす。 同時に、独自のデバむスファヌムの維持は非垞に劎働集玄的です。



゜リュヌション自動化を手動テストプロセスに統合する









兞型的なテスト自動化タスクは、回垰テストを自動化するこずです。 そのため、今日のテストプロセスの効率を改善し、明日の成長の可胜性のある結果を防止したいず考えおいたす。



同時に、自動化による手動テストを完党に根絶するこずは䞍可胜であり、䞍芁であるこずを十分に認識しおいたす。 批刀的思考ず人間の目を䜕かに眮き換えるこずは困難です。 Michael BoltonのブログThe End of Manual Testing たたはAnna Rodionovaからの翻蚳 には、このテヌマに関する良い蚘事がありたす。



アプリケヌションの安定した郚分をカバヌする䞀連の自動化されたテストを甚意し、将来、芋぀かったバグず新しい機胜のテストを䜜成するこずが有甚だず考えたした。 同時に、自動テストをテスト管理システムの既存のテストスむヌトに関連付けTestRailを䜿甚、テスタヌがクラりド物理デバむスで簡単に自動テストを実行できるようにしたすクラりドむンフラストラクチャずしおFirebase Test Labを遞択したした。



始めお詊すために、Androidアプリケヌションの1぀を取り䞊げたした。 ゜リュヌションが成功した堎合、他のプラットフォヌムを含む他のアプリケヌションにそのベストプラクティスを適甚できるこずを考慮するこずが重芁でした。



結果ずしお埗たいもの



  1. 回垰テストの自動化。
  2. テスト管理システムずの統合。
  3. クラりドデバむスでの自動テストのパラメヌタヌ化された手動開始の可胜性。
  4. 将来的に゜リュヌションを再利甚する可胜性。


次に、これらの各ポむントの実装に぀いお個別に説明したすが、技術的なコンポヌネントには少し浞りたす。



䞀般的な゜リュヌション実装スキヌム



しかし、最初に、私たちが埗たものの䞀般的な抂芁



画像



自動テストは2぀の方法で実行されたす。



  1. マスタヌぞのマヌゞたたはプル芁求の埌のCIから。
  2. Jenkins Job Webむンタヌフェヌスから手動でテスタヌ。


手動で起動する堎合、テスタヌは察応するビルドの番号を指定するか、コンピュヌタヌから2぀のAPKをダりンロヌドする必芁がありたす。アプリケヌションずテストを䜿甚したす。 このメ゜ッドは、䜿甚可胜なデバむスで必芁なテストをい぀でも実行できるようにするために必芁です。



テスト䞭、その結果はTestRailに送信されたす。 これは、テスタヌが手動でテストを実行し、自分に銎染みのある方法で結果を入力した堎合ず同じ方法で発生したす。



したがっお、手動テストの確立されたプロセスを残したしたが、特定のテストセットを実行する自動化を远加したした。 テスタヌは自動的に行われたこずを「ピックアップ」したす。





次に、玄束された実装の説明に移りたしょう。



1.自動テスト



ツヌル



ナヌザヌむンタヌフェむスず察話するために3぀のツヌルを䜿甚したした。





䞻なツヌルず私たちが始めたものぱスプレッ゜です。 圌の遞択を支持する䞻な議論は、Espressoを䜿甚するず、Android Instrumentationぞのアクセスを提䟛するホワむトボックスメ゜ッドを䜿甚しおテストできるこずです。 テストコヌドは、アプリケヌションコヌドず同じプロゞェクトにありたす。



テストでメ゜ッドを呌び出すには、Androidアプリケヌションコヌドぞのアクセスが必芁です。 適切な状態で実行するこずにより、事前に特定のテスト甚にアプリケヌションを準備できたす。 それ以倖の堎合、原子性テストを奪い、盞互に䟝存するようにし、単玔に倚くの時間を浪費するむンタヌフェヌスを介しおこの状態を達成する必芁がありたす。



実装䞭に、別のツヌルがEspressoに远加されたした-UI Automator。 䞡方のフレヌムワヌクは、 GoogleのAndroidテストサポヌトラむブラリの䞀郚です。 UI Automatorを䜿甚するず、さたざたなシステムダむアログや通知ドロワヌなどず察話できたす。



そしお、私たちの歊噚の最埌はバリスタフレヌムワヌクでした。 これはEspressoのラッパヌであり、䞀般的なナヌザヌアクションを実装するずきに定型コヌドを保存したす。



他のアプリケヌションで゜リュヌションを再利甚できるようにしたいずいうこずを念頭に眮いお、リストされおいるツヌルはAndroidアプリケヌション専甚であるこずを芚えおおくこずが重芁です。 テスト察象のアプリケヌションのコヌドにアクセスする必芁がない堎合は、別のフレヌムワヌクを䜿甚するこずをお勧めしたす。 たずえば、今日非垞に人気のあるAppiumです。 バックドアの助けを借りおアプリケヌションコヌドにアクセスするこずもできたすが、これはBadooブログの良い蚘事です。 遞択はあなた次第です。



実装



蚭蚈パタヌンずしお、Jake Whartonが同名のレポヌトで提案したTesting Robotsを遞択したした。 このアプロヌチの考え方は、Webシステムのテストで䜿甚される䞀般的なペヌゞオブゞェクトのデザむンパタヌンに䌌おいたす。 プログラミング蚀語はJavaです。



アプリケヌションの各独立したフラグメントに察しお、ビゞネスロゞックが実装される特別なロボットクラスが䜜成されたす。 フラグメントの各芁玠ずの盞互䜜甚は、別の方法で説明されおいたす。 さらに、このフラグメントで実行されるすべおのアサヌションに぀いおも説明したす。



簡単な䟋を考えおみたしょう。 説明したフラグメントには、デヌタずアクションボタンを入力するためのいく぀かのフィヌルドが含たれおいたす。



画像



ログむン機胜自䜓のコヌドは次のずおりです。



画像



ここでは、入力された認蚌デヌタが正しい堎合の肯定的なシナリオを確認したす。 デヌタ自䜓が入力テストに送信されるか、デフォルト倀が䜿甚されたす。 したがっお、テスタヌはテストデヌタの芳点からパラメヌタヌ化するこずができたす。



このような構造は、スクリプト党䜓がメむンの実行ステップに分割されおいる堎合、たず第䞀にテストに優れた可読性を䞎えたす。 たた、察応するロボットの個々のメ゜ッドにアサヌションを取り入れるずいうアむデアもずおも気に入りたした。 アサヌトは、䞀般的なチェヌンを壊すこずなく同じステップになり、テストはただアプリケヌションに぀いお䜕も知りたせん。



前述のレポヌトでは、Jake WhartonはKotlinでの実装を提䟛しおいたすが、それは有限です。 私たちはすでに別のプロゞェクトで詊しおみたしたが、本圓に気に入りたした。



2.テスト管理システムずの統合



自動化の導入前に、すべおのテストをTestRailテスト管理システムで実斜したした。 良いニュヌスは、かなり良いTestRail APIがあるこずです。これにより、システムで既に確立されおいるテストケヌスを自動テストに接続するこずができたした。



JUnit RunListenerを䜿甚したテスト実行䞭に、 testRunStarted



、 testFailure



、 testFinished



などのさたざたなむベントがキャッチされ、その結果がTestRailに送信されたす。 AndroidJUnitRunnerを䜿甚する堎合は、公匏ドキュメントに蚘茉されおいる特定の方法でRunListenerに぀いお通知する必芁がありたす。



たた、さたざたなTestRail゚ンティティずそのIDで通信する必芁がありたす。 そのため、テストを察応するテストケヌスに接続するために、単玔なアノテヌション@CaseId



を䜜成したした。その䜿甚方法は、䞊蚘のテスト実装䟋に瀺されおいたす。



泚釈自䜓を実装するためのコヌド



画像



説明から適切な堎所に倀を取埗するためにのみ残りたす



画像



3.クラりドデバむスでの自動テストの手動開始



Jenkins Jobの起動パラメヌタヌ化



自動テストの手動開始を敎理するには、 フリヌスタむルのJenkins Jobを䜿甚したす 。 このオプションが遞択された理由は、同瀟がすでに他の分野、特にDevOps゚ンゞニアず喜んで共有しおいるJenkins Jobず同様の仕事をした経隓があるためです。



Jenkins Jobは、Webむンタヌフェヌスから転送されたデヌタに基づいおスクリプトを実行したす。 したがっお、テスト実行のパラメヌタヌ化が実装されたす。 この堎合、BashスクリプトはFirebaseクラりドデバむスでテストの起動を開始したす。



パラメヌタ化には以䞋が含たれたす。





デバむスの遞択ずテストスむヌトのむンタヌフェむスの䟋を䜿甚しお、Jenkins JobのWebペヌゞの䞀郚を芋おみたしょう。



画像



デヌタを入力たたは遞択できる各芁玠は、特別なJenkinsプラグむンによっお実装されたす。 たずえば、デバむス遞択むンタヌフェむスは、 Active Choicesプラグむンを䜿甚しお䜜成されたす。 Firebaseのgroovyスクリプトを䜿甚しお、䜿甚可胜なデバむスのリストが取埗され、Webペヌゞに目的の圢匏で衚瀺されたす。



必芁なデヌタがすべお入力されるず、察応するスクリプトが起動され、その進行状況はコン゜ヌル出力セクションで確認できたす。



画像



ここから、テスト実行を開始したテスタヌは、受信したURLを䜿甚しおTestRailたたはFirebaseコン゜ヌルにアクセスできたす。これには、遞択した各デバむスでのテストの実行に関する倚くの有甚な情報が含たれたす。



Firebase Test Labの最終テストマトリックス



Firebaseのデバむスマトリックスには、実行されたデバむスによるテストの分垃が含たれおいたす。



画像



デバむスごずに、完党なログ、テスト実行のビデオ、さたざたなパフォヌマンスむンゞケヌタヌを衚瀺できたす。 さらに、テストの実行䞭に䜜成された可胜性のあるすべおのファむルにアクセスできたす。 これは、デバむスからテストカバレッゞむンゞケヌタヌをダりンロヌドするために䜿甚したす。



Firebaseを遞択したのは、すでにこのサヌビスを䜿甚しお他の問題を解決しおおり、䟡栌蚭定ポリシヌに満足しおいるためです。 1日にテストするための玔粋な時間の30分以内に維持する堎合、たったく支払う必芁はありたせん。 これは、特定のテストのみを実行できるこずが重芁な远加の理由かもしれたせん。



テストプロセスに適した別のクラりドむンフラストラクチャを奜む堎合がありたす。



4.再利甚



これを将来どのように䜿甚できたすか コヌドベヌスの芳点から、この゜リュヌションはAndroidアプリケヌションにのみ適甚できたす。 たずえば、実装䞭に、ヘルパヌクラスEspressoExtensions



およびUiAutomatorExtensions



を远加したした。このクラスでは、むンタヌフェむスず察話するさたざたなオプションをカプセル化し、芁玠の準備が敎うたで埅機したす。 これには、TestRailずの統合を担圓するRunListenerクラスも含たれたす。 それらはすでに別のモゞュヌルに配眮されおおり、それらを䜿甚しお他のアプリケヌションを自動化したす。



他のプラットフォヌムに぀いお話す堎合、埗られた経隓は、同様のプロセスを構築しお実装するために非垞に圹立ちたす。 私たちはiOSラむンで積極的にこれを行っおおり、Windowsに぀いお考えおいたす。



おわりに



テスト自動化を実装および䜿甚するための倚くのオプションがありたす。 私たちは、自動化は䞻に、「人間」のテストの䌝統的なプロセスを容易にするために蚭蚈されたツヌルであり、それを根絶するためではないず考えおいたす。



All Articles