تست های UI را خودکار کنید

آزمایش تعاملات کاربر کمک می کند تا اطمینان حاصل شود که کاربران هنگام تعامل با برنامه شما با نتایج غیرمنتظره مواجه نمی شوند یا تجربه ضعیفی ندارند. اگر نیاز به بررسی درستی عملکرد رابط کاربری برنامه خود دارید، باید عادت به ایجاد تست های رابط کاربری (UI) کنید.

یکی از روش‌های آزمایش UI این است که به سادگی از یک آزمایشگر انسانی بخواهیم مجموعه‌ای از عملیات کاربر را روی برنامه مورد نظر انجام دهد و تأیید کند که آیا درست عمل می‌کند. با این حال، این رویکرد دستی می تواند زمان بر و مستعد خطا باشد. یک رویکرد کارآمدتر این است که آزمایش‌های رابط کاربری خود را بنویسید تا اقدامات کاربر به روشی خودکار انجام شود. رویکرد خودکار به شما این امکان را می دهد که تست های خود را سریع و قابل اعتماد به روشی تکرار شونده اجرا کنید.

آزمایش‌های رابط کاربری یک برنامه (یا بخشی از آن) را راه‌اندازی می‌کنند، سپس تعاملات کاربر را شبیه‌سازی می‌کنند و در نهایت بررسی می‌کنند که آیا برنامه واکنش مناسبی نشان داده است. آن‌ها تست‌های یکپارچه‌سازی هستند که می‌توانند از تأیید رفتار یک مؤلفه کوچک تا یک آزمایش ناوبری بزرگ که یک جریان کاربر کامل را طی می‌کند، متغیر باشد. آنها برای بررسی رگرسیون ها و تأیید سازگاری با سطوح مختلف API و دستگاه های فیزیکی مفید هستند.

تست‌های رابط کاربری ابزاری در Android Studio

برای اجرای تست‌های UI ابزاردار با استفاده از Android Studio، کد آزمایشی خود را در یک پوشه تست Android جداگانه پیاده‌سازی می‌کنید - src/androidTest/java . افزونه Android برای Gradle یک برنامه آزمایشی را بر اساس کد آزمایشی شما می‌سازد، سپس برنامه آزمایشی را در همان دستگاهی که برنامه مورد نظر قرار دارد بارگیری می‌کند. در کد آزمایشی خود، می‌توانید از چارچوب‌های تست رابط کاربری برای شبیه‌سازی تعاملات کاربر در برنامه هدف استفاده کنید تا کارهای آزمایشی را که سناریوهای استفاده خاصی را پوشش می‌دهند، انجام دهید.

چارچوب های جت پک

Jetpack شامل چارچوب های مختلفی است که API هایی را برای نوشتن تست های UI ارائه می کند:

  • چارچوب تست اسپرسو (Android 4.0.1، API سطح 14 یا بالاتر) APIهایی را برای نوشتن تست‌های UI برای شبیه‌سازی تعاملات کاربر با Views در یک برنامه هدف فراهم می‌کند. یکی از مزایای کلیدی استفاده از اسپرسو این است که همگام سازی خودکار اقدامات آزمایشی با رابط کاربری برنامه ای که در حال آزمایش آن هستید را فراهم می کند. اسپرسو تشخیص می دهد که نخ اصلی بیکار است، بنابراین می تواند دستورات تست شما را در زمان مناسب اجرا کند و قابلیت اطمینان تست های شما را بهبود می بخشد.
  • Jetpack Compose (Android 5.0، API سطح 21 یا بالاتر) مجموعه‌ای از APIهای آزمایشی را برای راه‌اندازی و تعامل با صفحه‌ها و اجزای Compose ارائه می‌کند. تعامل با عناصر Compose با تست‌ها هماهنگ شده و کنترل کاملی بر زمان، انیمیشن‌ها و ترکیب‌بندی‌ها دارد.
  • UI Automator (اندروید 4.3، API سطح 18 یا بالاتر) یک چارچوب آزمایشی UI است که برای آزمایش UI کاربردی بین برنامه‌ای در سراسر سیستم و برنامه‌های نصب شده مناسب است. رابط های برنامه کاربردی UI Automator به شما امکان می دهد عملیات هایی مانند باز کردن منوی تنظیمات یا راه اندازی برنامه را در یک دستگاه آزمایشی انجام دهید.
  • Robolectric (اندروید 4.1، API سطح 16 یا بالاتر) به شما امکان می‌دهد به جای شبیه‌ساز یا دستگاه، آزمایش‌های محلی را ایجاد کنید که روی ایستگاه کاری یا محیط یکپارچه‌سازی مداوم شما در یک JVM معمولی اجرا شوند. می‌تواند از APIهای تست Espresso یا Compose برای تعامل با اجزای UI استفاده کند.

پوسته پوسته شدن و همگام سازی

ماهیت ناهمزمان برنامه‌ها و چارچوب‌های تلفن همراه اغلب نوشتن تست‌های قابل اعتماد و قابل تکرار را چالش‌برانگیز می‌کند. هنگامی که یک رویداد کاربر تزریق می شود، چارچوب آزمایشی باید منتظر بماند تا برنامه واکنش خود را به آن تمام کند، که می تواند از تغییر متن روی صفحه تا بازآفرینی کامل یک فعالیت متغیر باشد. وقتی تستی رفتار قطعی نداشته باشد، پوسته پوسته است.

چارچوب‌های مدرن مانند Compose یا Espresso با در نظر گرفتن آزمایش طراحی شده‌اند، بنابراین تضمین خاصی وجود دارد که UI قبل از اقدام یا ادعای آزمایشی بعدی بی‌کار باشد. این همگام سازی است.

تست همگام سازی

هنگام اجرای عملیات ناهمزمان یا پس‌زمینه ناشناخته برای آزمایش، مانند بارگیری داده‌ها از پایگاه داده یا نمایش انیمیشن‌های بی‌نهایت، ممکن است مشکلات همچنان پیش بیاید.

نمودار جریان حلقه ای را نشان می دهد که بررسی می کند که آیا برنامه قبل از قبولی آزمایشی غیرفعال است یا خیر
شکل 1 : همگام سازی تست.

برای افزایش قابلیت اطمینان مجموعه آزمایشی خود، می‌توانید راهی برای ردیابی عملیات پس‌زمینه نصب کنید، مانند Espresso Idling Resources . همچنین، می‌توانید ماژول‌هایی را برای نسخه‌های آزمایشی جایگزین کنید که می‌توانید برای بی‌کاری جستجو کنید یا همگام‌سازی را بهبود می‌بخشند، مانند TestDispatcher برای کوروتین‌ها یا RxIdler برای RxJava.

نمودار نشان دهنده شکست تست زمانی که همگام سازی بر اساس انتظار برای یک زمان ثابت است
شکل 2 : استفاده از خواب در تست ها منجر به آهسته یا پوسته پوسته شدن تست ها می شود.

معماری و راه اندازی تست

معماری برنامه شما باید به تست‌ها اجازه دهد بخش‌هایی از آن را برای آزمایش دوتایی جایگزین کنند و باید از کتابخانه‌هایی استفاده کنید که ابزارهای کمکی را برای کمک به آزمایش ارائه می‌دهند. برای مثال، می‌توانید یک ماژول مخزن داده را با یک نسخه درون حافظه آن جایگزین کنید که داده‌های جعلی و قطعی را برای آزمایش فراهم می‌کند.

تولید و آزمایش نمودارهای معماری. نمودار تولید، منابع داده محلی و راه دور را نشان می دهد که داده ها را به مخزن ارائه می دهند، که به نوبه خود آن را به صورت ناهمزمان در UI ارائه می کند. نمودار تست یک مخزن جعلی را نشان می دهد که داده های خود را به طور همزمان در UI ارائه می دهد.
شکل 3 : آزمایش یک UI با جایگزینی وابستگی های آن با جعلی.

رویکرد توصیه شده برای فعال کردن این عملکرد، استفاده از تزریق وابستگی است. شما می توانید سیستم خود را به صورت دستی ایجاد کنید، اما توصیه می کنیم از یک چارچوب DI مانند Hilt برای این کار استفاده کنید.

چرا تست خودکار؟

یک برنامه Android می‌تواند هزاران دستگاه مختلف را در بسیاری از سطوح API و فاکتورهای شکل مورد هدف قرار دهد، و سطح بالای سفارشی‌سازی که سیستم‌عامل برای کاربر به ارمغان می‌آورد به این معنی است که برنامه شما ممکن است نادرست رندر شود یا حتی در برخی دستگاه‌ها خراب شود.

تست UI به شما امکان می‌دهد تست سازگاری انجام دهید و رفتار یک برنامه را در زمینه‌های مختلف تأیید کنید. ممکن است بخواهید آزمایش‌های رابط کاربری خود را روی دستگاه‌هایی اجرا کنید که به روش‌های زیر متفاوت هستند:

  • سطح API : 21، 25، و 30.
  • محل : انگلیسی، عربی، و چینی.
  • جهت : پرتره، منظره.

علاوه بر این، برنامه ها باید رفتار فراتر از تلفن ها را بررسی کنند. باید روی تبلت ها، تاشوها و سایر دستگاه ها تست کنید.

منابع اضافی

برای اطلاعات بیشتر در مورد ایجاد تست های رابط کاربری، به منابع زیر مراجعه کنید.

مستندات

Codelabs