フラッタヌアプリケヌションのテストツヌル、利点、課題

こんにちは私の名前はMariaLeshchinskayaです。SurfのQAスペシャリストです。圓瀟は2011幎からネむティブアプリケヌションを開発しおおり、2018幎からはFlutter甚にも開発を行っおいたす。



この蚘事では、ネむティブアプリケヌションずクロスプラットフォヌムアプリケヌションのテスト機胜を比范したす。Flutterを䜿甚したずきの感想を共有し、テスト時にSurfで䜿甚するツヌル、Flutterが䟿利な理由、発生した問題に぀いお説明したす。







Flutterのテスト機胜は、ネむティブのテスト機胜ず同等です。



䌁業が開発ぞのアプロヌチを倉曎したり、新しいテクノロゞヌが出珟したりした堎合、テスト機胜に深刻な圱響を䞎えないこずが重芁です。理想的には、新しい蚀語たたはフレヌムワヌクを䜿甚する堎合、QAスペシャリストは、最良の方法で実蚌された䜿い慣れたツヌルずテクノロゞヌのスタックを匕き続き䜿甚したす。



ネむティブアプリをテストするずき、Surfでは自動テストを䜿甚し、パッケヌゞを読み取っお眮き換えたす。自動テストがなければ、特に回垰があり、プロキシの助けがなければ、アプリケヌションの倉動性ず倚くのケヌスのカバレッゞが枛少したす。 



Flutterアプリケヌションをテストするずきは、䜿い慣れた機胜を維持するこずが重芁でした。



自動テスト



Surfは、CalabashおよびRubyフレヌムワヌクず連携しお、ネむティブアプリを自動テストしたす。 Flutterが登堎したずき、私たちが最初に疑問に思ったのは、Calabashを䜿甚しないこずは可胜であるず同時に、私たちが慣れおいる方法で、たたはさらにクヌルな方法で自動テストを完党に機胜させるこずです。 



それは可胜であるだけでなく、サヌドパヌティのサヌビスがなくおも可胜であるこずが刀明したした。Flutterでは、統合テストずコン゜ヌルでのりィゞェットのテストをすぐに利甚できたす。 Flutterの開発者は、Flutterの自動テストに関する蚘事でこれに぀いお詳しく説明しおいたす。



Flutterの自動テストは、クロスプラットフォヌムであるず同時にネむティブでもありたす。アプリケヌションプロゞェクト内でテストを䜜成でき、䞡方のプラットフォヌムで機胜したす。プロゞェクト党䜓が目の前にある堎合は、䞍足しおいるid-schnickを远加したり、バグを芋぀けお修正したりできたす。これは、アプリケヌションの品質を向䞊させるもう1぀の機䌚です。



Flutterは、Behavior Driven DevelopmentBDDアプロヌチもサポヌトしおいたす。 UIテストに䜿甚したす。蚀語ずしおGherkinを遞択したした。機胜ファむルを䜿甚したり、英語ずロシア語でスクリプトを蚘述したりできたす。それは理解できたす、それはそれらの䞭にたたはそれらず䞀緒に远加の匕数なしでスクリプトステップの実装、自動テストの起動をカスタマむズする機胜を持っおいたす䟋えば、タグによっおいく぀かのスクリプトを実行し、党䜓ずしおすべおの曞かれたテストではありたせん。 



FlutterアプリケヌションをテストするずきにGherkinを䜿甚するために、flutter_gherkinオヌプン゜ヌスフレヌムワヌクを接続したした。 



Flutterに自動テストがあるこずに気付いたずき、CalabashずDart + Gherkinのテクノロゞヌの違いは䜕でしょうか。どちらのアプロヌチが優れおいるのでしょうか。それらを䞀緒に比范しおみたしょう。



1.機胜ファむルは䞡方のアプロヌチで完党に同䞀です。



たずえば、ピンコヌドによる認蚌甚のスクリプトは、Calabashを䜿甚しおDartずRubyの䞡方で正しく解釈されたす。



:        ( )
       
          
         
        


どちらのテクノロゞヌも、ロシア語、英語、その他の蚀語をサポヌトしおいたす。



2.手順は実装が異なりたす。
ダヌト+ flutter_gherkin

カラバッシュ

class TapAnErrorButtonOnPinCodeScreen extends ThenWithWorld<FlutterWorld> {
  @override
  Future<void> executeStep() async {
    final elemFromReportAnErrorScreen = find.byValueKey('reportAnErrorButton');
    await FlutterDriverUtils.tap(world.driver, elemFromReportAnErrorScreen);
  }
  @override
  RegExp get pattern => RegExp(r"       -");
}


When(/^       -$/) do
wait_element("* id:'reportAnErrorButton'")
tap_on("* id:'reportAnErrorButton'")
end


これはどちらが䟿利かずいうこずではありたせん。特定のテクノロゞヌ内の構造は倉わらず、これは良いこずです。 



3. Flutterは、远加の.dartファむルを䜿甚しお、テストを構成および操䜜したす。 Calabashでは、そのような単䞀のファむルは存圚したせん。



私たちの意芋では、これがFlutterたたはCalabash内のフラッタヌであるずは蚀えたせん。これは、特定のツヌルやテクノロゞヌを䜿甚する際の詳现にすぎたせん。



4.4。アプリケヌションで芁玠を操䜜するのに䟿利なように、各芁玠には独自のIDが必芁です。Calabashで自動テストを行う堎合は、テストするアプリケヌションで䞡方のプラットフォヌムにIDが含たれおいるこずに事前に泚意する必芁がありたす。Dartでは、iOSアプリケヌションずAndroidアプリケヌションのファむルを個別にリロヌドせずに、自動テストを䜜成するプロセスでIDを远加できたす。これは䟿利で時間を節玄できたす。 



私たちの結論Dartでの自動テストは、Calabashフレヌムワヌクを䜿甚した自動テストより劣っおいたせん。

 

プロキシ



ケヌスごずにアプリケヌションのカバレッゞを拡倧するために、Surfは、Charlesなどのトラフィックを読み取っおスプヌフィングするプログラムを䜿甚したす。クラむアントずサヌバヌの盞互䜜甚の分析により、次のこずが可胜になりたす。



  1. バック゚ンドず実際に盞互䜜甚しおいるかどうかを刀断したす。
  2. 問題がどちら偎にあるかを調べたすクラむアントたたはサヌバヌ。
  3. , .
  4. : , , . Charles , , , .


Dartには、ネットワヌクを操䜜するための独自のクラむアントがありたす。すべおのリク゚ストはそれを通過するため、プロキシを操䜜するために必芁な蚭定をアプリケヌション内に入力する必芁がありたす。テスタヌの䟿宜のために、必芁なすべおの蚭定は別の画面に配眮されたす。Surfでは、独自に開発したデバッグ画面を䜿甚したす。



デバッグ画面は、デバッグビルドからのみ䜿甚できる远加の蚭定画面であり、テストに圹立ちたす。その䞭で、必芁なサヌバヌを遞択したり、アプリケヌションでhttpリク゚ストの読み取りず保存を䜿甚したり、デバむスのfcmトヌクンを衚瀺したりできたす。テストする機䌚はたくさんありたす。 



デバッグ画面はカスタムです。開発者は、テスタヌの芁求に応じお芁玠を远加したす。たずえば、アプリケヌションからプロキシを構成するためのフィヌルドです。したがっお、Charlesず連携する十分な機䌚がありたす。アプリケヌションを再起動せずにプロキシサヌバヌをDebugScreenに接続できたす。



ご芧のずおり、Flutterアプリケヌションをテストする可胜性は制限されおいたせん。ネむティブが䟿利で䜿いやすいずきに私たちが䜿甚するこずに慣れおいるすべおのもの。これは良い知らせです。



問題フレヌムワヌクのバグ、サヌドパヌティラむブラリの欠陥、予想されるネむティブ動䜜



Flutterアプリケヌションをテストするずきに盎面する問題もネむティブです。これらがFlutterの特定の欠点であるずは蚀えたせん。どのテクノロゞヌでも、問題解決は必ずしも明癜で単玔であるずは限りたせん。 



Flutterアプリケヌションをテストするずきに䜕を探すべきかを教えおください。事前譊告は事前に譊告されおいたす。



フラッタヌフレヌムワヌクのバグ



テスト䞭に、iOSでのフォントの衚瀺ずフォヌマットで問題が発生したした。぀たり、iOSプラットフォヌムの文字間隔がAndroidよりも著しく広くなっおいたす。これにより、倚くの芖芚的なバグが発生したした。 



問題はフレヌムワヌク自䜓にあるこずが刀明したした。私たちのモバむルアプリ開発者がFlutterフレヌムワヌク開発者コミュニティの人々にそのような䞍快なバグを修正するように䟝頌したずき、フレヌムワヌクはすぐに曎新され、iOSでのテキスト衚瀺が修正されたした。



きっずそのような状況が繰り返されるでしょう。しかし、これは倧きな問題ずは蚀えたせん。Flutterコミュニティのメンバヌは、問題に迅速に察応し、フレヌムワヌクをサポヌトおよび開発したす。



サヌドパヌティラむブラリの



欠陥iOSバヌゞョン10および11では、サヌドパヌティラむブラリで実装䞊の欠陥が発生したした。たずえば、技術仕様ず蚭蚈で蚈画されおいるように、通知ぞのアクセス蚱可がボタンではなく、アプリケヌションの起動時にすぐにポップアップするバグを修正したした。



このような問題は、クロスプラットフォヌムずネむティブの䞡方で発生する可胜性がありたす。これらは、プロゞェクト内の修正によっお、たたはラむブラリ開発者ず䞀緒に解決されたす。



予想されるネむティブ動䜜ぞの察凊



iOSおよびAndroidでのネむティブアプリケヌションの長期䜿甚ずテストにより、さたざたなアプリケヌション動䜜からのナヌザヌの期埅を簡単に予枬できたす。したがっお、たずえば、iOSでバックワむプを䜿甚しお戻るのは暙準的なゞェスチャヌです。そしおAndroidでは、それは必芁ありたせん。



䞡方のプラットフォヌムのシステムダむアログは異なりたす。iOSでは、通知にアクセスするためのアクセス蚱可を芁求する必芁があり、Androidでは、このアクセスはデフォルトで䞎えられたす。 



倚くの堎合、手動で終了する必芁があるのは、OS固有のこれらの郚分です。たた、バックワむプの堎合のように、iOSプラットフォヌムで予想される動䜜が突然Androidに移行した堎合は、削枛するこずもありたす。



ネむティブアプリケヌションでは、画面の曎新、䞍適切なアプリケヌションの最小化、珟圚のOSで異垞なアプリケヌション操䜜などの問題はたれです。特定のプラットフォヌム甚のアプリケヌションを開発するためのツヌルずテクノロゞは、特定のシステムのすべおのバヌゞョンず機胜をカバヌするこずを目的ずしおいたす。 



Flutterアプリケヌションの1぀をテストしたずき、興味深い状況に盎面したした。画面を曎新する機胜は、iPhoneX以降のiOSデバむスでは利甚できたせんでした。同時に、匷打のないiOSデバむスずAndroidは正しく機胜したした。 



Androidバヌゞョン6で別のバグが発生したした。最小化するず、アプリケヌションがメモリから完党にアンロヌドされたした。



このようなバグは、プロゞェクト内の開発者によっお修正されたした。


iOSは、デバむスずシステム、新しいバヌゞョンのOSでリリヌスするチップ、以前のバヌゞョンでは機胜しなくなるチップ、同じSwiftを曎新するずきに䜕に焊点を合わせるかを完党に認識しおいたす。Androidは、倚数のデバむスず完党に異なる画面サむズをタヌゲットにする必芁があるこずを理解しおおり、その詳现も知っおいたす。 



クロスプラットフォヌムに、ネむティブ開発からの実装のすべおの埮劙な点を含めたいず思いたす。もちろん、Flutterを䜿甚する堎合、いく぀かの欠点がありたすが、これは問題ではありたせん。クロスプラットフォヌムぞの独自のアプロヌチが必芁なだけです。



利点1぀のコヌドベヌス、1぀の開発チヌム



単䞀のコヌドベヌスにより、テスト時間が短瞮されたす。



バグの原因ずしおは、技術仕様のあいたいさ、デザむンのレンダリング状態の欠劂、バック゚ンドの曎新時の䞋䜍互換性などがありたす。半分の数のタスクを䜜成する必芁があるため、このようなバグを䜜成する方が簡単です。これにより、すでに時間を節玄できたす。 



1぀のプラットフォヌムでバグを怜玢しお機胜を確認できたす。高い確率で、䞡方のプラットフォヌムで繰り返されたす。結局のずころ、実装は1぀です。 



同じコヌドが蚘述されおいるため、䞡方のプラットフォヌムの新機胜のロゞックも同じです。アプリケヌション内の耇雑なプロセスのテストは、あるプラットフォヌムでのテストず別のプラットフォヌムでの確認に垰着したす。 1぀のプラットフォヌムでアクティビティの完党なサむクルを実行したす。探玢的テスト、機胜の実行、煙/正気/完党、フィヌドバックの分析を行いたす。その埌、別のプラットフォヌムでの探玢的テストによっお品質を確認するだけです。このアプロヌチにより、ロゞックテストの時間が玄1.3倍節玄されたす。





, , , : , . , .



, (, iOS), , (Android), event .


䞡方のプラットフォヌムのアセンブリを同じ日に顧客に玍品する必芁があり、それらが同時に出お、プロゞェクトにQA゚ンゞニアが1人しかいない堎合、ネむティブ開発で怜蚌するための十分な時間がない可胜性がありたす。テストサむクルは䞡方のプラットフォヌムで別々に実行する必芁がありたす。クロスプラットフォヌムアプリケヌションをテストするこずで時間を節玄したす。䞡方のプラットフォヌムの回垰テストが単䞀のサむクル内で実行されたす。 



2぀の類䌌したプロゞェクト1぀はネむティブAndroidずiOS、もう1぀はFlutterのテストを倧たかに評䟡し、それらを頂点で比范したした。 



分析ずテストは、1぀のiOSデバむスず1぀のAndroidプラットフォヌムデバむスで実行されたした。実際に芋るこずができるように、Flutterは、2回ではありたせんが、実際に時間の増加をもたらしたす。これは理解できたす。2぀のプラットフォヌムのいずれかでテストを完党に削陀するこずはできたせん。䜕ず蚀っおも、それらは異なる特異性を持ち、ナヌザヌに焊点を合わせおいたす。

 

ネむティブiOS

ネむティブAndroid

フラッタヌAndroid + iOS

パスワヌドの埩元

2時間

2時間

3時間20分

承認

1時間30分

1時間30分

2時間20分

プッシュ通知

2時間

2時間

4時間



オペレヌティングシステムの詳现に完党には圱響せず、プラットフォヌムごずに個別にカスタム䜜成されおいない既補の機胜をテストする堎合、䞡方のプラットフォヌムでFlutterアプリケヌションをチェックする時間が玄1.3〜1.5倍短瞮されたす。たずえば、異なるプラットフォヌムで特定の動䜜を行わない認蚌およびパスワヌド回埩機胜により、Flutterバヌゞョンのテスト時間が1.3分の1に短瞮されたす。



各プラットフォヌムからのカスタム動䜜を必芁ずする機胜に぀いおは、時間の短瞮を期埅するべきではありたせん。 iOSずAndroidの動䜜は異なるず予想されたす。぀たり、䞡方のプラットフォヌムを完党に個別にテストする必芁がありたす。たずえば、ナヌザヌの通垞の通知䜜業を維持するために、暩限の違い、通知接続の操䜜、iOSずAndroidで通知を送信するためのプッシャヌ蚭定、およびその他の実装の埮劙さのために、䞡方のプラットフォヌムでプッシュ通知をフルサむクルでテストする必芁があるこずがよくありたす。 TKずデザむンが尊重されたした。



チヌム内のコミュニケヌションを敎理する方が簡単です



プロゞェクトに倚くの人がいる堎合、小さな埮劙な点でも通過しないようにプロセスを敎理するこずは困難です。特に、倚くの改善が先にある堎合は、新機胜の実装ず䞀般的な倉曎。問題のほずんどは、開発チヌムが1人の堎合に解決されたす。 



たず、2぀のプラットフォヌムで2぀の異なる実装を操䜜するよりも、1぀のコマンドを実装しおアプリケヌションをテストする方が簡単です。もちろん、品質保蚌の専門家は、iOSプラットフォヌムずAndroidプラットフォヌムの䞡方で、アプリケヌションのステヌタスに関する完党な情報を入手するこずに関心がありたす。 Flutterを䜿甚する方が簡単です。



第二に、ネむティブ開発には重芁なポむントがありたす。䞀方のプラットフォヌムが孊習しお受け入れた倉曎に぀いおは、もう䞀方のプラットフォヌムに通知する必芁がありたす。これは、倧芏暡で集䞭的な倉曎の過皋で忘れられたり倱われたりするこずがありたす。Flutterアプリケヌションを開発する堎合、このような問題はありたせん。チヌムは1぀だけです。぀たり、改蚂のための1぀のタスクが䞡方のプラットフォヌムに適甚されたす。



Flutterアプリのテストが倧奜きです 



クヌルなコミュニティの䞀員である



こず私たちにずっお、新しいフレヌムワヌクはプラスです。非暙準の問題を解決するこずで、芖野を広げたす。アプリケヌションをテストするずきにスキルず機胜を開発する、倚くの興味深いナニヌクなバグを芋぀けたした。



同時に、Flutter-frameworkコミュニティの開発者は、特定された問題に぀いお迅速にフィヌドバックを提䟛し、ラむブラリを改善しお、プロゞェクトに貢献できるようにしたす。私たちは䞀緒に前進しおおり、それは玠晎らしいこずです。 



スペシャリストになる



クロスプラットフォヌムアプリケヌションを䜿甚する堎合は、オペレヌティングシステムの違いに留意し、プラットフォヌムの特異性に焊点を合わせるこずを忘れないこずが重芁です。理論的には最小限にすべき違いを探しお芋お、これたでに遭遇したこずのないこずを孊びたす。そのような䜜業はプロ意識を高めたす。 



ネむティブアプリを開発およびテストする堎合、AndroidStudioやVisualStudioCodeなどからiOSアプリを構築するこずはできたせん。Flutterを䜿甚する堎合、IDEはAndroidずiOSの䞡方で同じです。カッコいい。


独立



するFlutterを䜿甚する堎合、Surfでは、eコマヌスからバンキングたで非垞に異なるプロゞェクトに盎面したす。実践により、QA゚ンゞニアは䞡方のプラットフォヌムを片手でテストできるこずが瀺されおいたす。䜜業のペヌスが速くなり、タスクを完了する時間がなくなったずきに、リリヌスの近くでのみ別のスペシャリストを接続する必芁がありたす。 



フラッタヌ-䞀歩前進



クロスプラットフォヌムアプリのテストは難しくありたせん。ネむティブのものを䜿甚するよりもさらに高速で䟿利な堎合がありたす。盎面する可胜性のあるすべおの困難は、利䟿性ず利点に重なるものではありたせん。



Flutterアプリケヌションの開発ずテストの経隓から、Surfはこのフレヌムワヌクが倧きな前進であるこずを瀺しおいたす。 



All Articles