টেস্ট সুইটের মাধ্যমে স্ক্রিনশট টেস্টিং

Android Gradle Plugin (AGP) 9.5.0-alpha03 এবং Compose প্রিভিউ স্ক্রিনশট টেস্টিং ইঞ্জিন 0.0.1-alpha16 থেকে শুরু করে, স্ক্রিনশট টেস্টিং AGP-এর নেটিভ টেস্ট স্যুট ফ্রেমওয়ার্কের সাথে ইন্টিগ্রেট করা হয়েছে।

এই পদ্ধতি স্ট্যান্ড-অ্যালোন স্ক্রিনশট প্লাগ-ইন (com.android.compose.screenshot) প্রতিস্থাপন করে। আমরা নিম্নলিখিত কারণে AGP টেস্ট স্যুট ব্যবহার করার সাজেশন দিই:

  • নেটিভ Gradle টাস্ক লাইফসাইকেল: স্ক্রিনশট টেস্ট সরাসরি স্ট্যান্ডার্ড Gradle এবং AGP টেস্টিং লাইফসাইকেলে ইন্টিগ্রেট করে, টাস্ক আইসোলেশন এবং টেস্ট এক্সিকিউশন নির্ভরযোগ্যতা উন্নত করে।
  • মাল্টি-ভেরিয়েন্ট ও কাস্টম স্যুট সাপোর্ট: আপনি একটি মডিউলের মধ্যে একাধিক আলাদা স্ক্রিনশট টেস্ট স্যুট (যেমন screenshotTest, uiTests বা smokeTests) তৈরি করতে এবং নির্দিষ্ট বিল্ড ভেরিয়েন্ট (যেমন demoDebug বা release) টার্গেট করতে পারবেন। এর ফলে, আপনাকে একটি আগে থেকে কনফিগার করা সোর্স সেটের মধ্যে সীমাবদ্ধ থাকতে হবে না।
  • বিল্ড পারফর্ম্যান্স ও আইসোলেশন উন্নত করা: AGP টেস্ট স্যুট বিল্ট-ইন আর্টিফ্যাক্ট ট্রান্সফর্ম (যেমন Layoutlib রানটাইম এক্সট্র্যাকশন) এবং আইসোলেটেড ক্লাসলোডিং ব্যবহার করে, যার সাথে Gradle কনফিগারেশন ক্যাশিং ও প্রোজেক্ট আইসোলেশনের জন্য সম্পূর্ণ সহায়তা প্রদান করা হয়।

প্রয়োজনীয়তা

টেস্ট স্যুটের সাথে কম্পোজ স্ক্রিনশট টেস্টিং ব্যবহার করতে, আপনার এনভায়রনমেন্ট নিম্নলিখিত প্রয়োজনীয়তা পূরণ করছে কিনা তা নিশ্চিত করুন:

  • Android Studio Rabbit 1 Canary 4 বা তার পরবর্তী যেকোনও ভার্সন।
  • Android Gradle প্লাগ-ইন (AGP) ভার্সন 9.5.0-alpha03 বা তার পরবর্তী যেকোনও ভার্সন।
  • Compose স্ক্রিনশট ইঞ্জিন ভার্সন 0.0.1-alpha16 বা তার পরবর্তী যেকোনও ভার্সন।
  • JDK ভার্সন ১৭ বা তার পরবর্তী যেকোনও ভার্সন।
  • আপনার প্রোজেক্টের জন্য Compose চালু করা হয়েছে। আমরা Compose Compiler Gradle প্লাগ-ইন ব্যবহার করে Compose চালু করার সাজেশন দিই।

সেট-আপ এবং কনফিগারেশন

টেস্ট স্যুটের সাথে কম্পোজ স্ক্রিনশট টেস্টিং কনফিগার করতে, নিম্নলিখিত ধাপগুলি সম্পূর্ণ করুন:

১. এক্সপেরিমেন্টাল ফ্ল্যাগ চালু করুন

আপনার প্রোজেক্টের রুট gradle.properties ফাইলে, স্ক্রিনশট টেস্টিং এবং টেস্ট স্যুট সাপোর্ট চালু করুন:

android.experimental.enableScreenshotTest=true
android.experimental.testSuiteSupport=true

২. build.gradle.kts ফাইলে টেস্ট স্যুট কনফিগার করুন

আপনার মডিউলের build.gradle.kts ফাইলে, testOptions ব্লকের মধ্যে একটি স্ক্রিনশট টেস্ট স্যুট সংজ্ঞায়িত করুন:

android {
    testOptions {
        screenshotTests.create("screenshotTest") { // suiteName can be customized (for example, "uiTests")
            engineVersion = "0.0.1-alpha16"
            targetVariants.add("demoDebug") // Add specific variants to test

            dependencies {
                implementation(libs.androidx.compose.ui.tooling)
                implementation("com.android.tools.screenshot:screenshot-validation-api:0.0.1-alpha16")
            }
        }
    }
}

৩. টেস্ট সোর্স সেট তৈরি করুন

আপনার সুইটের নামের সাথে ম্যাচ করে এমন একটি ডেডিকেটেড সোর্স সেট ডিরেক্টরি তৈরি করুন:

{module}/src/{suiteName}/kotlin/

যেমন, screenshotTest নামের স্যুটের জন্য:

feature/foryou/impl/src/screenshotTest/kotlin/com/example/app/ForYouScreenTest.kt

৪. কম্পোজেবল প্রিভিউ টেস্ট নির্ধারণ করা

@PreviewTest এবং স্ট্যান্ডার্ড @Preview বা মাল্টি-প্রিভিউ অ্যানোটেশন সহ কম্পোজেবল অ্যানোটেট করুন:

package com.example.app

import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
import com.android.tools.screenshot.PreviewTest
import com.example.app.ui.theme.AppTheme

@PreviewTest
@Preview(showBackground = true)
@Composable
fun ForYouScreenPreview() {
    AppTheme {
        ForYouScreen(isSyncing = false)
    }
}

স্ক্রিনশট টেস্ট রান করা

AGP টেস্ট স্যুট আপনার স্যুটের নাম, টার্গেট ও ভ্যারিয়েন্টের উপর ভিত্তি করে ডেডিকেটেড Gradle টাস্ক তৈরি করে।

১. রেফারেন্স ইমেজ জেনারেট বা আপডেট করুন

কম্পোজেবল প্রিভিউ রেন্ডার করুন এবং গোল্ডেন বেসলাইন রেফারেন্স ইমেজ স্টোর করুন:

  • Linux এবং macOS: ./gradlew update{SuiteName}{Target}{Variant}TestSuite (যেমন, ./gradlew updateScreenshotTestDefaultDemoDebugTestSuite)
  • Windows: gradlew updateScreenshotTestDefaultDemoDebugTestSuite

রেফারেন্স ছবি জেনারেট করে এখানে সেভ করা হয়েছে:

{module}/src/{suiteName}{Target}{Variant}/reference/

২. যাচাই করে টেস্ট রান করুন

নতুন স্ক্রিনশট রেন্ডার করুন এবং রেফারেন্স ইমেজের সাথে তুলনা করুন:

  • Linux এবং macOS: ./gradlew test{SuiteName}{Target}{Variant}TestSuite (যেমন, ./gradlew testScreenshotTestDefaultDemoDebugTestSuite)
  • Windows: gradlew testScreenshotTestDefaultDemoDebugTestSuite

পরীক্ষার রিপোর্ট খতিয়ে দেখুন

পার্থক্য শনাক্ত করা হলে বা টেস্ট ব্যর্থ হলে, AGP একটি HTML টেস্ট রিপোর্ট তৈরি করে।

  • লোকেশন সম্পর্কে অভিযোগ জানান: {module}/build/reports/tests/{taskName}/index.html (যেমন, app/build/reports/tests/testScreenshotTestDefaultDemoDebugTestSuite/index.html)

আপডেট করা রিপোর্টে এগুলি অন্তর্ভুক্ত:

  • হেডার মেটাডেটা কার্ড: পরীক্ষার নাম, প্রিভিউ পদ্ধতি, ভেরিয়েন্ট, সুইট ও স্ট্যাটাস ব্যাজ দেখায়।
  • সমস্যার বিভাগ: কপি করা যায় এমন স্ট্যাক ট্রেস সহ Reference Image Missing, Image Size Mismatch বা Pixel Mismatch স্পষ্টভাবে ফ্ল্যাগ করে।
  • ডায়নামিক ভিজ্যুয়াল ডিফারেন্স: নেস্টেড এলিমেন্ট যাতে হারিয়ে না যায়, তার জন্য কম ইনটেনসিটি সহ সূক্ষ্ম পরিবর্তন এবং হাই-কনট্রাস্ট সহ বড় পরিবর্তন হাইলাইট করে।

পুরনো স্ট্যান্ডঅ্যালোন প্লাগ-ইন থেকে মাইগ্রেট করা

পুরনো স্ট্যান্ডঅ্যালোন স্ক্রিনশট প্লাগ-ইন থেকে AGP টেস্ট স্যুটে মাইগ্রেট করতে, আপনার Gradle কনফিগারেশন এবং টাস্ক কমান্ড আপডেট করুন।

বিল্ড কনফিগারেশন DSL তুলনা

পুরনো স্ট্যান্ডঅ্যালোন প্লাগ-ইন (বন্ধ করা হয়েছে)

// In build.gradle.kts
plugins {
    alias(libs.plugins.screenshot)
}

dependencies {
    screenshotTestImplementation(libs.androidx.compose.ui.tooling)
    screenshotTestImplementation("com.android.tools.screenshot:screenshot-validation-api:0.0.1-alpha16")
}
// In build.gradle.kts
android {
    testOptions {
        screenshotTests.create("screenshotTest") {
            engineVersion = "0.0.1-alpha16"
            targetVariants.add("demoDebug")

            dependencies {
                implementation(libs.androidx.compose.ui.tooling)
                implementation("com.android.tools.screenshot:screenshot-validation-api:0.0.1-alpha16")
            }
        }
    }
}

টাস্ক ও পাথ ম্যাপিং

ধারণা পুরনো সেট-আপ (বন্ধ করা হয়েছে) AGP টেস্ট স্যুট (সাজেস্ট করা হয়েছে)
টাস্ক আপডেট করুন ./gradlew updateDebugScreenshotTest ./gradlew update{SuiteName}{Target}{Variant}TestSuite
পরীক্ষা করার টাস্ক ./gradlew validateDebugScreenshotTest ./gradlew test{SuiteName}{Target}{Variant}TestSuite
রেফারেন্স পাথ src/screenshotTestDebug/reference src/{suiteName}{Target}{Variant}/reference
রিপোর্ট পাথ build/reports/screenshotTest/debug/ build/reports/tests/{taskName}/