آزمایش نماگرفت

آزمایش نماگرفت روش بسیار مؤثری برای درستی‌سنجی میانای کاربر برنامه شما است. آزمایش‌های نماگرفت می‌تواند در آزمایش‌های «جزء»، «ویژگی»، و «برنامه» وجود داشته باشد.

می‌توانید از ابزارهای طرف سوم برای ایجاد آزمایش‌های نماگرفت محلی و ابزاری استفاده کنید. اگر از «نگارش» استفاده می‌کنید، می‌توانید از ابزار آزمایش رسمی «نماگرفت پیش‌نمایش نگارش» استفاده کنید.

تعریف

آزمایش‌های نماگرفت از رابط کاربری نماگرفت می‌گیرند و آن را با تصویر قبلاً تأییدشده‌ای که «مرجع» یا «طلایی» نامیده می‌شود مقایسه می‌کنند:

آزمایش نماگرفت دو تصویر را مقایسه می‌کند، یک نماگرفت جدید و یک تصویر مرجع.
شکل ۱. آزمایش نماگرفت دو تصویر را مقایسه می‌کند

اگر تصاویر یکسان باشند، آزمایش موفق است. اگر بین آن‌ها تفاوتی وجود داشته باشد، ابزار گزارشی ایجاد می‌کند:

گزارش آزمایش نماگرفت، که نماگرفت مرجع و جدید را در دو طرف و تفاوت را در وسط نشان می‌دهد.
شکل ۲. گزارش آزمایش نماگرفت که نماگرفت مرجع و جدید را در دو طرف و تفاوت را در وسط نشان می‌دهد.

با این گزارش، دو پاسخ احتمالی دارید:

  • متوجه شوید که کد جدید خطا دارد و آن را اصلاح کنید.
  • نماگرفت جدید را تأیید کنید و تصویر مرجع را با تصویر جدید جایگزین کنید.

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

مزایا

مزایای آزمایش‌های نماگرفت یا آزمایش‌های خودکار عبارت‌اند از:

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

معایب

بااین‌حال، آزمایش‌های نماگرفت می‌تواند معایبی نیز داشته باشد:

  • کار با تصاویر مرجع می‌تواند دشوار باشد، زیرا یک پروژه بزرگ ممکن است با هزاران فایل PNG به پایان برسد.
  • پلاتفرم‌های مختلف (Linux،‏ Max، و Windows) نماگرفت‌های کمی متفاوت تولید می‌کنند.
  • این آزمایش‌ها کندتر از آزمایش‌های رفتار معادل هستند.
  • داشتن تعداد زیادی آزمایش نماگرفت می‌تواند مشکلاتی ایجاد کند، برای مثال وقتی یک تغییر واحد روی هزاران نماگرفت تأثیر می‌گذارد.

بخش‌های زیر توصیه‌هایی درباره رسیدگی به این مشکلات ارائه می‌دهند.

آزمایش‌های نماگرفت را به حداقل برسانید

باید تعداد آزمایش‌های نماگرفت را به حداقل برسانید و درعین‌حال بازخورد و پوشش را برای پسرفت‌ها به حداکثر برسانید.

ترکیب‌های مختلف وضعیت‌های میانای کاربر می‌تواند تعداد آزمایش‌ها را خیلی سریع افزایش دهد. در اینجا چند روش برای درستی‌سنجی بخشی از «میانای کاربری» برنامه شما ارائه شده است:

  • درباره زمینه‌های مختلف
  • استفاده از اندازه‌های قلم متفاوت
  • در اندازه‌ها یا محدوده‌های مختلف صفحه‌نمایش

اگر این کار را برای هر عنصر، چیدمان، و صفحه برنامه‌تان انجام دهید، هزاران فایل نماگرفت خواهید داشت که بیشتر آن‌ها هیچ بازخورد اضافه‌ای به شما نمی‌دهند.

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

می‌توانید برخی‌از ترکیب‌های دارایی‌های رابط کاربری را حذف کنید.
شکل ۳. می‌توانید برخی‌از ترکیب‌های دارایی‌های واسط کاربر را حذف کنید.

ذخیره کردن تصاویر مرجع

تصاویر مرجع (یا طلایی) معمولاً فایل‌های PNG هستند که می‌توانند در کنترل منبع شما بررسی شوند. بااین‌حال، Git و اکثر مدیران کنترل منبع برای فایل‌های نوشتاری بهینه‌سازی شده‌اند، نه فایل‌های باینری بزرگ.

برای مدیریت این فایل‌ها ۳ گزینه دارید:

  • به استفاده از git ادامه دهید، اما سعی کنید استفاده از فضای ذخیره‌سازی را به حداقل برسانید.
  • از Git LFS استفاده کنید.
  • برای مدیریت نماگرفت‌ها، از سرویس ابری استفاده کنید.

تفاوت‌های پلاتفرم

آزمایش‌های نماگرفت به میاناهای برنامه‌سازی کاربردی پلاتفرم سطح پایین برای رسم ویژگی‌های خاصی مثل نوشتار یا سایه‌ها متکی هستند و پلاتفرم‌ها می‌توانند آن‌ها را به روش‌های مختلفی پیاده‌سازی کنند. اگر در Mac توسعه می‌دهید و نماگرفت‌های جدیدی را که به‌صورت محلی گرفته شده است ذخیره می‌کنید، ممکن است آزمایش‌های خراب را در ماشین Linux CI ببینید.

‫۲ راه برای دور زدن این مشکل وجود دارد:

  • تغییرات کوچک را تحمل کنید
  • گرفتن نماگرفت در سرور

تغییرات کوچک را تحمل کنید

می‌توانید اکثر کتابخانه‌های آزمایش نماگرفت را پیکربندی کنید تا هنگام مقایسه دو نماگرفت، تفاوت‌های کوچک را مجاز کند.

دو رویکرد برای این کار وجود دارد:

  • تفاوت مجاز را براساس درصد پیکسل‌های اصلاح‌شده یا درصد کل تفاوت در مقادیر پیکسل پیکربندی کنید.
  • از یک تفاوت هوشمند—الگوریتمی که نماگرفت‌ها را مقایسه می‌کند—برای تأیید شباهت ساختاری و معنایی به‌جای پیکسل‌ها استفاده کنید.

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

گرفتن نماگرفت در سرور

برای استفاده از مقایسه‌گر نماگرفت دقیق پیکسلی، باید مطمئن شوید که آزمایش‌هایتان در شرایط یکسان نماگرفت می‌گیرند. برای انجام این کار، می‌توانید از سیستم «ادغام مداوم» (CI) خود استفاده کنید یا از خدمات ابری بهره ببرید.

برای مثال، می‌توانید گامی در گردش کار CI خود ایجاد کنید که کارهای زیر را انجام دهد:

  1. آزمایش‌های نماگرفت را اجرا می‌کند (فقط زمانی لازم است که از مطابقت دقیق پیکسلی استفاده نمی‌شود).
  2. اگر مرحله قبلی ناموفق بود، نماگرفت‌های جدیدی ضبط می‌کند.
  3. فایل‌های جدید را در شاخه تعهد می‌کند.
نوشتار جایگزین: نموداری که نحوه گرفتن نماگرفت در CI را نشان می‌دهد
شکل ۴. نموداری که نحوه گرفتن نماگرفت در CI را نشان می‌دهد

بااستفاده از این رویکرد، آزمایش‌های نماگرفت هرگز در CI ناموفق نمی‌شوند، اما تغییر را برای شما اصلاح می‌کند. به این ترتیب شما و بازبینان تغییر می‌توانید با ادغام کردن تغییر، نماگرفت‌های جدید را بپذیرید.

ابزارهای آزمایش نماگرفت

تفاوت‌های کلیدی زیر را بین ابزارها و کتابخانه‌های دردسترس برای آزمایش نماگرفت درنظر بگیرید:

  • محیط: آزمایش‌های محلی که روی میزبان اجرا می‌شوند، یا آزمایش‌های ابزاری که روی شبیه‌ساز یا دستگاه اجرا می‌شوند.
  • موتور پردازش: راه‌حل‌های نماگرفت میزبان می‌توانند از Layoutlib—موتور پردازش Android Studio برای پیش‌نمایش‌ها—یا Robolectric Native Graphics (RNG) استفاده کنند.
    • چارچوب‌های مبتنی بر Layoutlib بر ارائه عناصر ایستا تمرکز دارند و از وضعیت‌های مختلف برای نشان دادن عملکرد متفاوت استفاده می‌کنند. معمولاً استفاده از آن‌ها آسان‌تر است.
    • چارچوب‌هایی که با RNG ادغام می‌شوند می‌توانند از همه ویژگی‌های Robolectric استفاده کنند و امکان آزمایش با دامنه بزرگ‌تر را فراهم کنند.