Colibri-ui-モバむルアプリケヌションテスト自動化゜リュヌション

チヌムの成長に䌎い、機胜の数は必然的に増加し、同時に、回垰テスト䞭に確認する必芁があるテストモデルずテストケヌスの数が増加したす。 さらに、チヌムの数は理由で成長しおいたす。この堎合、ビゞネスは品質を萜ずすこずなく、より頻繁にリリヌスしたいず考えおいたす。



アルファラボの方法は、速床、予算、品質のバランスを芋぀けるずいう問題を解決したした。今日はアルファモバむルの䟋で芋おいきたす。 今埌、泚意、ネタバレ!!! 私たちの゜リュヌションはgithubで利甚可胜です colibri-uiラむブラリヌずcolibri-ui-templateはクむックスタヌト甚です。



Pavel pvivanovずLilia Lidiyatullinaは蚘事の執筆に積極的に参加したした









どうした



2013幎には、回垰テストプロセスに䞡方のOSiOS / Androidの1人のテスタヌが1日かかっおいたため、テストの自動化に぀いお考えるこずすらありたせんでした。



ただし、アプリケヌションの積極的な成長、新しいサヌビスおよびサヌビスの远加により、手動テストのコストも急速に増加し始めたした。



ここに絶えず新しい機胜を生み出すチヌムの数を増やしたす1から6-そしお回垰テストはプロセスの血栓ずなり、生産を壊しお危険にさらす危険がありたす。



ある時点で、リリヌスのアプリケヌションを準備する時点で、6぀のチヌムすべおが「アむドル」であり、6人のテスタヌ党員が疲れずにリリヌス候補を「退行」させおいるずいう結論に達したした。 䞀時的には、回垰テストの期間が8営業日6人に増加したした。



この状況は、テスタヌ自身に動機付けを加えたせん。 ある時点で、「䌑日のように退行する」



どうする



問題は䜕らかの圢で解決する必芁があり、「bablishkoを接続する」には2぀の方法がありたした。





倫理的および経枈的な理由から、2番目のオプションを遞択したした。結局のずころ、自動化のコストは、ずにかくはるかに有益な投資です。



圌らは、モバむルアプリケヌションのテストを自動化するためのパむロットプロゞェクトで、遞択した方向ぞの動きを開始するこずにしたした。 その結果に基づいお、将来の機噚の芁件を䜜成したした。



  1. 自動化をテストするためのツヌルは、䜿甚を開始するために開発に入るための可胜な限り䜎いしきい倀である必芁がありたす。

    ツヌルの䞻なナヌザヌは自動化の経隓のない補品チヌムのテスタヌであるため、コヌドの蚘述を最小限に抑えたり、耇雑なロケヌタヌを蚘述する必芁がなくなりたす。
  2. テストスクリプトは、開発者以倖のナヌザヌが理解する必芁がありたす。
  3. ゜リュヌションはクロスプラットフォヌムであり、2぀のプラットフォヌムAndroidずiOSで同時に動䜜する必芁がありたす。
  4. 接続されたモバむルデバむスのセットを持぀ファヌムを圢成する必芁がありたす。
  5. ゜リュヌションは、銀行の他のモバむルアプリケヌションに察しおスケヌラブルでなければなりたせん。


受け取った芁件に基づいお、自動化ツヌルを遞択する必芁がありたした。

パむロットプロゞェクトの䞀環ずしお、以䞋を確認したした。





クロスプラットフォヌム゜リュヌションの芁件により、リストの最埌のペアに遞択が絞り蟌たれたした。 開発ずサポヌトに関䞎するより掻発なコミュニティのため、最終的な遞択はAppiumを支持しお行われたした。



開発に入るためのしきい倀を䞋げる



䞋䜍レベルのプロセスの自動化は、スクリプトずコヌドです。 ただし、誰もが開発ツヌルを理解したり、自分で䜕かを曞いたりするこずさえできたせん。 そのため、プロゞェクトでBDD方法論を䜿甚しお、この瞬間をできるだけ単玔化するこずにしたした。



私たちのフレヌムワヌクはいく぀かの抜象化レベルに分割され、䞊䜍レベルは人気のあるGherkinテスト蚘述蚀語で蚘述され、䞋䜍レベルは開発者がJavaプログラミング蚀語で蚘述したす。 JBehaveはスクリプト甚に遞択されたした。



では、ナヌザヌ偎の決定はどのように芋えるのでしょうか



Then   " " When   " "  "  " When    "  " Then   "  " When   "   "  " " When    " "
      
      





この䟋では、メむン画面からモバむル支払い画面ぞの移行に぀いお説明したす。 おそらく、誰かがビゞネスプロセスの芳点から、どの方法で目的の画面に到達するかは問題ではなく、圌は正しいず反察するでしょう。 実際、目的のセクションに移動するこずを劚げるものは䜕もありたせん。たずえば、次のように、前のスクリプトの最埌の5行を1行に眮き換えたす。



 When    " "
      
      





ただし、このような手順は原子的ではなく、iOSずAndroidの䞡方のプラットフォヌムで再利甚するのが難しくなりたす。 結局、開発に入るためのしきい倀を䞋げたい堎合、珟圚の手順を可胜な限り再利甚する必芁がありたす。そうしないず、テスタヌは垞に新しい手順を必芁ずし、その結果、その実装が必芁になりたす。 そしお、ここで思い出すように、テスタヌは必ずしも必芁な開発スキルを持っおいるずは限りたせん。



画面に぀いお説明したす



スクリプトですべおが非垞に明確な堎合、「シヌトから」読み取られ、アクションを説明したす。ロケヌタヌを明瀺的に䜿甚しないで、どのように指定できたすか



゚ントリのしきい倀を䞋げるずいう目暙を達成する1぀の方法は、耇雑なロケヌタヌの蚘述を単玔化し、プロゞェクトのすべおをより深く隠すこずです。 そのため、説明でロケヌタヌを䜜成し、怜玢に䜿甚できるようにする2぀の工堎が誕生したした。 残念ながら、ロケヌタヌを䜜成せずに実行できるずは限らないため、たれに䜜成する必芁がありたす。 このような状況では、XPathで芁玠を芋぀ける機䌚を残したした。



画面䞊の芁玠の説明は、4぀のコンポヌネントで構成できたす。 4぀のコンポヌネントはすべお䜿甚されるこずはありたせんが、たずえば、最初に芁玠たでスクロヌルしおからクリックする必芁がある堎合など、2぀を䜿甚できたす。



芁玠のセットずしおのペヌゞ蚘述のコンポヌネント







スクリプトで芁玠の名前ストヌリヌ内の名前を䜿甚し、そこからコンテンツの説明/ ResourceId / AccessabilityIdeitificator / Text / XPathを取埗したす。



すべおの説明を.csvファむルに収集したす。衚圢匏で簡単に線集できたす。 䞀方では、これは通垞のPageObjectであり、他方では、テスタヌはコヌド内のロケヌタヌを線集する必芁がありたせん。







それははるかに簡単です 画面に぀いお説明し、スクリプトを䜜成し、自動テストを開始したしたが、重芁なタスクに぀いお少しお話しし、内郚からcolibri-uiフレヌムワヌクを芋おみたしょう。



環境をカスタマむズする



Appiumを䜿甚する堎合、䜿甚するモバむルデバむスを垞に瀺す必芁がありたす。 この゜リュヌションでは、デバむスudid䞀意の識別子ずその名前をプロゞェクトに転送する必芁がありたす。 名前は、䜕か問題が発生した堎合にもログに蚘録されたす。 udidを䜿甚するず、ファヌム党䜓があり、すべおが同じMacに接続されおいるため、プロゞェクトは目的のモバむルデバむスで動䜜したす。



珟圚、モバむルデバむスの説明は䞀連のフォルダヌの圢匏で保存され、各フォルダヌには.propertyおよびjson-objectタむプの蚭定ファむルが含たれおいたす。 .propertyファむルタむプにはudidずデバむス名が含たれ、jsonオブゞェクトにはクラスタヌモヌドで動䜜するためのノヌド蚭定の説明が含たれたすcolibri-ui-templateを参照。



小さなオフトピック、たたはudd接続デバむスを取埗する方法



Androidでは、コン゜ヌルで「adbデバむス」、iOSでは「instruments -s devices | grep -vシミュレヌタヌ| $id -un」を実行し、接続されたデバむスのリストを取埗したす。 Androidの堎合、リストには実際のデバむスず゚ミュレヌタヌの䞡方が含たれ、iOSの堎合は実際のデバむスのみをフィルタヌ凊理したす。 誰かが゚ミュレヌタヌだけを取埗する必芁がある堎合は、別のフィルタリングが必芁です。「instruments -s devices | grepシミュレヌタヌ」。



このフォルダヌのセットをデヌタベヌスたたは別のストレヌゞに転送するか、環境を䜜成するプロセスで䞊蚘のコマンドを実行しおリストを動的に受信するこずが蚈画されおいたす。 珟圚、このような改善の必芁はありたせん。



さらに、䞊蚘のコマンドをMacで動䜜させるには、ADBドラむバヌずXcodeをそれぞれむンストヌルする必芁があるこずに泚意しおください。 ゚ミュレヌタで䜜業するずきは、むメヌゞを収瞮させるこずを忘れないでください。



ナヌザヌを説明したす



これたで、プロゞェクトを最も単玔なモヌドで起動するために必芁なすべおを考慮に入れおきたした。 スクリプト、画面の説明、デバむスの説明がありたす。 ただし、テストしおいるアプリケヌションでは、これだけでは䞍十分です。 このアプリケヌションでは、䞀郚のナヌザヌがテストベンチにログむンし、電話番号、ログむン、パスワヌド、アカりント番号などの資栌情報を䜿甚する必芁がありたす。



ナヌザヌ資栌情報を持぀ファむルもプロゞェクト内の別のフォルダヌにありたす。 将来的には、デバむスずずもに、それらをデヌタベヌスたたは䞭倮ストレヌゞに転送したす。

スクリプトずペヌゞの説明では、userNameずいう圢匏のマヌカヌを䜿甚したす。これにより、ナヌザヌファむルからプロパティ倀を取埗し、実行䞭にこれらのマヌカヌを眮き換えたす。



したがっお、異なるナヌザヌで同じスクリプトセットを同時に远跡できたす。



ペヌゞの説明では次のように衚瀺されたす。







これは、user.propertyファむルでの衚瀺方法です。



 paymentAccountRur=··0278 beneficiarAccountRur=··0163 beneficiarAccountUsd=··0889 beneficiarAccountEur=··0038
      
      





キヌず倀を指定する必芁がありたす。



Uberステップずいく぀かの副䜜甚を圢成したす



テキストを入力したり、䜕かをクリックしたりするなど、かなり小さなステップの説明から開発を開始したした。 時間が経぀に぀れお、小さなステップでスクリプトを蚘述したり、メむン画面に戻るなどの耇雑なステップを蚘述したりしおも、コヌドを耇補できないこずに気付きたした。 そこで、小さなステップを倧きなステップに再利甚する゜リュヌションの怜玢を開始したした。

最初の詊みは、DIの線成のためにプロゞェクトにguieを远加するこずでしたが、その実装により、プロゞェクトのほが党䜓のコアの凊理が行われたした。 たた、appium-java-clientの䟝存関係には既にSpringが含たれおいるため、゜リュヌションが明らかになり、次のステップはSpringを実装するこずでした。



Spingをプロゞェクトに導入したずき、倉曎の量は最小限でした。 プロゞェクトの非垞に奥深くでは、JBeHaveステップファクトリず、アリュヌルレポヌト接続の2、3行のみが倉曎されたした。 ほがすべおのクラスがコンポヌネントずしお宣蚀され、ほずんどの䟝存関係が削陀されたした。



実装の効果は、より小さなアクションを再利甚できるステップ蚭蚈者だけでなく、ラむブラリで䞀般的な決定を䞋す胜力でもありたしたgithubぞのリンクは最初にありたした。 この゜リュヌションはいく぀かのモバむルプロゞェクトで䜿甚しおいるため、これは私たちにずっお重芁です。



さお、最も珍しい効果は、テスト甚のテストを䜜成できるこずです。 これがどんなに面癜くお厄介であっおも、それは楜噚の品質に倧きく䟝存するので、メンテナンスず開発も必芁です。 珟圚、カバレッゞはただ進行䞭です。 プロゞェクトのコアに倉曎を加えお、ラむブラリ内のテストカバレッゞを拡倧したす。



プロゞェクトを開始したす



既に述べたように、特定のデバむスセットでプロゞェクトを䞊行しお実行したす。

コン゜ヌルからプロゞェクトを開始する䟋



 ./gradlew --info clean test --tests "*AndroidStories*" -Dorg.gradle.project.platform=Nexus6p_android6 -Dorg.gradle.project.user=6056789 -Dorg.gradle.project.testType=smokeNewReg -Dorg.gradle.project.buildVersion=9.0.0.7,development
      
      





䟋からわかるように、テストはAndroidで実行されたす--tests "* AndroidStories *"。 パラメヌタヌずしおも枡されたす



テスト実行が開始されるデバむスはNexus6p_android6です。 プロゞェクトでデバむスを説明するこずを忘れないでください。これに぀いおは䞊で曞きたした。 それが私たちのやり方です。



device.propertiesファむルには次が含たれたす。



 UDID=ENU14008659 deviceName=Nexus6p
      
      





ファむルtest_node.jsonには、ノヌドを実行するためのデヌタが含たれおいたす。



デヌタを䜿甚するテストナヌザヌ6056789。 プロゞェクトには、テストを実行するために䜿甚するテストナヌザヌのセットがありたす。 ナヌザヌはuser.propertiesに蚘述されおいる必芁がありたす。



テストの皮類smokeNewReg、フレヌムワヌクは、メタタグのテストスクリプトを遞択するためのロゞックを実装したす。 Metaブロックの各スクリプトには、ラベルのセットがありたす。



 Meta: @regressCycle @smokeCycle
      
      





testCycle.propertiesファむルには、キヌずラベル倀が含たれおいたす。



 smoke=+smokeCycle,+oldRegistration,-skip smokeNewReg=+smokeCycle,+newRegistrationCardNumber,-skip smokeNewAccountReg=+smokeCycle,+newRegistrationAccountNumber,-skip regress=+regressCycle,+oldRegistration,-skip regressNewReg=+regressCycle,+newRegistrationCardNumber,-skip
      
      





したがっお、JBehaveにMeta Matcherが存圚するおかげで、特定のテストサむクル甚の䞀連のテストスクリプトを䜜成できたす。



䞭倮リポゞトリから汲み䞊げおいるアセンブリの番号、およびアセンブリの汲み出し元のブランチ。 この堎合、environmentAndroid.propertiesファむルにはワむルドカヌドリンクが含たれおいたす。ワむルドカヌドリンクはパラメヌタヌに基づいお圢成され、コン゜ヌルから入力に送信されたす。



 remoteFilePathReleaseAndDevelopment=http://mobile/android/mobile-%2$s/%1$s/mobile-%2$s-%1$s.apk
      
      





これで、コン゜ヌルからプロゞェクトを開始する方法がわかったので、プロゞェクトをJenkinsに簡単に統合できたす。 私たちのプロゞェクトにはこのような統合があり、テスト担圓者がJenkinsでゞョブを䜜成しお自動テストを実行するだけで十分です。



モバむルデバむスを備えたファヌムも圢成されたした。 これはMac Proであり、玄10台のモバむルデバむスが接続されおいたす。



レポヌトを生成したす



このプロゞェクトでは、アリュヌルレポヌトを䜿甚しおレポヌトが生成されたす。 したがっお、テストが完了したら、「結果を䌎うディレクトリを生成」を実行するだけで十分です。



レポヌトでは、各シナリオのステヌタスを確認できたす。 レポヌト内のスクリプトを開き始めるず、各メ゜ッドを呌び出す前に、テストが実行したステップを芋぀けるこずができたす。 䜕かがバラバラになった堎合、内郚に゚ラヌがあるステップで画面のスクリヌンショットが衚瀺されたす。



以前は、スクリヌンショットはすべおのステップにありたしたが、それは無意味であるず考え、画面は折りたたたれたスクリプトでのみ行われたす。 さらに、自動化されたスクリプトの数が増えるず、レポヌトはより倚くのスペヌスを占有し始めたす。



埗られた結果



自分のために蚭定したタスクを芁玄したす。



  1. 開発に入るためのしきい倀をかなり䜎くしお、自動化をテストするためのツヌルを䜜成するこずができたした。 平均しお、実践が瀺しおいるように、テスタヌは自信を持っお自動テストの䜜成ず実行を開始するのに2週間しかかかりたせん。 テスタヌに​​ずっおの最倧の困難は、appiumを構成する環境に関連しおいたす。
  2. テストスクリプトはすべおのチヌムメンバヌに明確です。これは、プロゞェクトでBDD方法論を䜿甚する堎合に特に重芁です。
  3. 私たちのフレヌムワヌクは、iOSずAndroidの2぀のプラットフォヌムで同時に動䜜できたす。
  4. 珟圚、10台のモバむルデバむスずMac Proのファヌムを圢成しおいたす。 このプロゞェクトはJenkinsず統合されおおり、すべおのテスタヌが10台すべおのデバむスで自動テストを䞊行しお実行できたす。
  5. 私たちの゜リュヌションはスケヌラブルであり、いく぀かのモバむルプロゞェクトはすでにフレヌムワヌクで積極的に䜜業しおおり、自動テストを実行しおいたす。


ボヌナスずしお



  1. モバむルプロゞェクトの1぀では、自動化により、機胜テスタヌがバック゚ンドずの埌方互換性のためにフロントをテストするこずを完党に省きたした。 自動化の導入埌、この堎合のテスト時間は8倍に短瞮されたした8時間から1時間に。
  2. 新しい自動テストは、モバむルアプリケヌションの新しい機胜の開発ずずもに、スプリントでテスタヌに​​よっお䜜成されたす。
  3. その結果、回垰テストの䞀郚はすでに自動化されおおり、回垰の時間が8日間から1日間に短瞮されたした。 これにより、より頻繁にリリヌスでき、テスタヌは回垰テストの期間䞭にチヌムから脱萜するこずを止めたした。 たあ、圌らは少し幞せになりたした:)


結果は私たちの期埅を満たし、自動化ぞの移行の決定が正しいこずを確認したした。



私たちは、githubで利甚可胜な゜リュヌションを開発し続けおいたす コリブリUIラむブラリずコリブリUIテンプレヌトは、クむックスタヌト甚です。 さらにもっず



Alpha Labのテスタヌ たたはテスタヌだけではないの1人になりたい堎合は、 空垭がありたす。



All Articles