ইনস্ট্রুমেন্টেশন টেস্ট শুরু করা

Firebase Test Lab ব্যবহার করে কীভাবে ইনস্ট্রুমেন্টেশন টেস্ট প্রস্তুত ও রান করতে হয় তা এই নির্দেশিকায় বর্ণনা করা হয়েছে। এই নির্দেশিকা ব্যবহার করতে, আপনার একটি ইনস্ট্রুমেন্টেশন টেস্ট (আপনার বা আপনার টিমের দ্বারা লিখিত) প্রয়োজন হবে যা Espresso বা UI Automator Android টেস্ট ফ্রেমওয়ার্ক ব্যবহার করে। ইনস্ট্রুমেন্টেশন টেস্ট ফিজিক্যাল ডিভাইসে ৪৫ মিনিট পর্যন্ত এবং ভার্চুয়াল ডিভাইসে ৬০ মিনিট পর্যন্ত রান করতে পারে।

পরবর্তী ধাপে, আপনি Firebase-এ আপনার অ্যাপের APK এবং আপনার টেস্টের APK আপলোড করবেন।

(ঐচ্ছিক) আপনার অ্যাপে স্ক্রিনশট লাইব্রেরি যোগ করুন

Firebase Test Lab-এ একটি লাইব্রেরি (testlab-instr-lib) অন্তর্ভুক্ত থাকে যা আপনি AndroidX-এর ScreenCapture-এর মাধ্যমে নেওয়া যেকোনও স্ক্রিনশট প্রসেস করতে ব্যবহার করতে পারেন, যেমন Espresso টেস্ট ফ্রেমওয়ার্ক ব্যবহার করে লেখা টেস্টের মতো ইনস্ট্রুমেন্টেশন টেস্ট চালানোর সময়। এই বিভাগে AndroidX লাইব্রেরির সাহায্যে কীভাবে ScreenCapture অবজেক্ট তৈরি করতে হয় এবং testlab-instr-lib ব্যবহার করে কীভাবে সেগুলি প্রসেস করতে হয় তা বর্ণনা করা হয়েছে।

আপনার ইন্সট্রুমেন্টেশন টেস্ট রান করার পরে, আপনি Firebase কনসোলে ক্যাপচার করা স্ক্রিনশট দেখতে পারবেন।

স্যাম্পেল অ্যাপ ব্যবহার করে দেখুন

এই কার্যকারিতা ব্যবহার করে দেখতে NotePad স্যাম্পেল অ্যাপ ডাউনলোড করুন। স্ক্রিনশট নেওয়ার ক্ষমতা আগে থেকেই NotePad প্রোজেক্টে অন্তর্ভুক্ত করা আছে।

ধাপ ১. আপনার প্রোজেক্টে স্ক্রিনশট লাইব্রেরি যোগ করুন

  1. আপনার টেস্ট প্রোজেক্টের রুট-লেভেল সেটিংস Gradle ফাইলে (settings.gradle.kts অথবা settings.gradle), প্রতিটি repositories বিভাগে Google-এর Maven রিপোজিটরি যোগ করুন:

    pluginManagement {
        repositories {
            // Add the following line:
            google() // Google's Maven repository
            mavenCentral()
            gradlePluginPortal()
        }
    }
    dependencyResolutionManagement {
        repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
        repositories {
            // Add the following line:
            google() // Google's Maven repository
            mavenCentral()
        }
    }
    // ...
  2. আপনার মডিউল (অ্যাপ-লেভেল) Gradle ফাইলে (সাধারণত <project>/<app-module>/build.gradle.kts বা <project>/<app-module>/build.gradle), Test Lab স্ক্রিনশট লাইব্রেরির জন্য ডিপেন্ডেন্সি যোগ করুন।

    dependencies {
      // ...
      // Add Test Lab's instrumentation test screenshot library:
      androidTestImplementation("com.google.firebase:testlab-instr-lib:0.2")
      // ...
  3. আপনার পরীক্ষার AndroidManifest.xml ফাইলে, <instrumentation> এলিমেন্টের মধ্যে মেটা-ডেটা ট্যাগে FirebaseScreenCaptureProcessor রেজিস্টার করুন। এছাড়াও, আপনি AndroidJUnitRunner-এ আর্গুমেন্ট হিসেবে প্রসেসর উল্লেখ করতে পারেন (কীভাবে করবেন সেই সংক্রান্ত নির্দেশাবলীর জন্য AndroidJUnitRunner রেফারেন্স ডকুমেন্টেশন দেখুন)।

    <instrumentation
      // Check that you have the following line (if not, add it):
      android:name="androidx.test.runner.AndroidJUnitRunner" // Specifies AndroidJUnitRunner as the test runner
      android:targetPackage="com.your.package.name">
    
    // Add the following:
    <meta-data
      android:name="screenCaptureProcessors"
      android:value="com.google.firebase.testlab.screenshot.FirebaseScreenCaptureProcessor" />
    </instrumentation>
    ...
    
  4. আপনার অ্যাপের AndroidManifest.xml ফাইলে, <manifest> এলিমেন্টের মধ্যে নিম্নলিখিত লাইনগুলি যোগ করুন:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. আপনার AndroidManifest.xml ফাইলে, <manifest> ট্যাগের মধ্যে নিম্নলিখিত লাইনগুলি যোগ করে আপনার অ্যাপের জন্য সিস্টেমের অনুমতি নির্দিষ্ট করুন। আপনি যদি Android 10 (API লেভেল 29) বা তার পরবর্তী কোনও ভার্সনে টেস্ট করেন, তাহলে WRITE_EXTERNAL_STORAGE অনুমতি বাদ দিন (ডিভাইসে স্ক্রিনশট রিড ও রাইট করার জন্য আপনার অ্যাপের এই অনুমতির প্রয়োজন নেই)।

    <manifest ... >
        <!-- WRITE_EXTERNAL_STORAGE is not needed on Android 10 (API level 29) or higher. -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.INTERNET"/>
        ...
    </manifest>

ধাপ ২. আপনার টেস্ট চলাকালীন স্ক্রিনশট নিন

আপনার টেস্টের যেকোনও পয়েন্টে স্ক্রিনশট নিতে চাইলে, AndroidX লাইব্রেরি থেকে Screenshot.capture() মেথড কল করুন। এর ফলে ScreenCapture অবজেক্ট তৈরি হয়। আপনি ScreenCapture অবজেক্টে process() কল করলে, আপনার AndroidManifest.xml-এ রেজিস্টার করা ScreenCaptureProcessor ব্যবহার করে এটি প্রসেস করা হয়। মনে রাখবেন যে কোনও প্রসেসর রেজিস্টার করা না থাকলে BasicScreenCaptureProcessor ব্যবহার করা হয়। আপনি FirebaseScreenCaptureProcessor রেজিস্টার করেছেন বলে, আপনার স্ক্রিনশট FirebaseScreenCaptureProcessor-এর মাধ্যমে প্রসেস করা হবে এবং Firebase Test Lab-এর মাধ্যমে টেস্ট রান করার সময় ফলাফলের সাথে আপনার জন্য উপলভ্য হবে।

ScreenCapture তৈরি করার জন্য ব্যবহারের উদাহরণ:

  • API Build.VERSION_CODES.JELLY_BEAN_MR2 এবং তার পরবর্তী ভার্সনে সম্পূর্ণ ScreenCapture নিন:

    Screenshot.capture()
    
  • যেকোনও API লেভেলে অ্যাক্টিভিটির ScreenCapture নিন। মনে রাখবেন, Build.VERSION_CODES.JELLY_BEAN_MR2-এর থেকে পুরনো ভার্সনের ডিভাইসের জন্য এটিই একমাত্র বিকল্প।

    @Rule
      public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class);
    ...
    Screenshot.capture(activityRule.getActivity());
    ...
    

ScreenCapture প্রসেস করার জন্য ব্যবহারের উদাহরণ

  • FirebaseScreenCaptureProcessor-এর মাধ্যমে ScreenCapture প্রসেস করুন:

    Screenshot.capture().process();
    
  • নির্দিষ্ট ScreenCaptureProcessor-এর মাধ্যমে ScreenCapture প্রসেস করা (এটি আপনাকে প্রসেসর রেজিস্টার করার ধাপটি এড়িয়ে যেতে দেয়):

    Set<ScreenCaptureProcessor> processors = new HashSet<>();
    processors.add(new FirebaseScreenCaptureProcessor());
    Screenshot.capture().process(processors);
    
  • ScreenCapture-এর নাম ও ফর্ম্যাট সেট করুন এবং রেজিস্টার করা প্রসেসর ব্যবহার করে এটি প্রসেস করুন:

    Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
    

ধাপ ৩. আপনার টেস্ট তৈরি করে রান করুন

  1. আপনার অ্যাপ তৈরি করুন এবং APK টেস্ট করুন (নির্দেশের জন্য আপনার অ্যাপ টেস্ট করুন দেখুন)।

  2. Firebase কনসোলে, DevOps ও এনগেজমেন্ট > Test Lab বিকল্পে যান, তারপর APK ফাইল আপলোড করুন।

  3. শেষে, আপনার টেস্ট রান করুন।

ধাপ ৪. আপনার টেস্ট স্ক্রিনশট দেখুন

আপনার পরীক্ষা সম্পূর্ণ হওয়ার পরে, আপনি যেকোনও স্ক্রিনশট দেখতে পারবেন যা নেওয়া হয়েছে:

  1. Firebase কনসোলে, DevOps ও এনগেজমেন্ট > Test Lab বিকল্পে যান।

  2. টেস্ট ট্যাবে, আপনার সম্পূর্ণ করা টেস্ট বেছে নিন, তারপর ফলাফল ট্যাবে ক্লিক করুন।

  3. আপনার টেস্ট আবার বেছে নিন, তারপর যে স্ক্রিনশট ট্যাবটি দেখতে পাবেন সেটিতে ক্লিক করুন।

(ঐচ্ছিক) অতিরিক্ত টেস্ট ফিচার চালু করুন

Test Lab-এর সাথে টেস্ট চালানোর আগে আপনি টেস্টে নিম্নলিখিত ফিচার চালু করতে পারবেন:

Orchestrator চালু করুন

Android Test Orchestrator হল এমন একটি টুল যা আপনার অ্যাপের প্রতিটি ইন্সট্রুমেন্টেশন টেস্ট স্বাধীনভাবে রান করে। Test Lab সবসময় Orchestrator-এর লেটেস্ট ভার্সন ব্যবহার করে।

Test Lab-এর জন্য Orchestrator চালু করতে, ইনস্ট্রুমেন্টেশন টেস্ট সেট-আপে, অতিরিক্ত বিকল্প > Orchestrator-এর মাধ্যমে রান করুন বিকল্পে ক্লিক করুন।

Orchestrator ব্যবহার করলে, আপনি নিম্নলিখিত সুবিধা পাবেন:

  • শেয়ার করা কোনও স্ট্যাটাস নেই। প্রতিটি টেস্ট তার নিজস্ব ইন্সট্রুমেন্টেশন ইনস্ট্যান্সে চলে, তাই শেয়ার করা স্টেট টেস্ট জুড়ে জমা হয় না।
  • বিচ্ছিন্ন ক্র্যাশ। কোনও টেস্ট ক্র্যাশ করলে, শুধুমাত্র সেই ইনস্ট্রুমেন্টেশন বন্ধ হয়ে যায় এবং আপনার সুইটের অন্যান্য টেস্ট এখনও রান করতে পারে।

মনে রাখবেন যে আপনি Orchestrator ব্যবহার করলে, প্রতিটি টেস্ট তার নিজস্ব ইনস্ট্রুমেন্টেশন ইনস্ট্যান্স রান করে, যার অর্থ হল প্রতিটি টেস্ট কেসের পরে অ্যাপ প্রসেস রিস্টার্ট করা হয়। এর ফলে রান টাইম বেড়ে গেলে আপনার কোটা ব্যবহার বা বিল করা সময় প্রভাবিত হতে পারে এবং আপনার ডিভাইসের টাইমআউট সীমা পেরিয়ে যেতে পারে। আপনার অ্যাপের স্টার্ট-আপ টাইম কমালে, এই ওভারহেড কমে যাবে।

Orchestrator-এর জন্য অতিরিক্ত বিকল্প সেট করতে, environmentVariables ফিল্ড-এর মাধ্যমে সেগুলি উল্লেখ করুন। যেমন, clearPackageData ব্যবহার করতে, gcloud-এ এই বিকল্প ব্যবহার করুন:

--environment-variables clearPackageData=true

শার্ডিং চালু করুন

টেস্ট শার্ডিং, টেস্টের একটি সেটকে সাব-গ্রুপে (শার্ড) ভাগ করে যা আলাদাভাবে রান করে। Test Lab একাধিক ডিভাইস ব্যবহার করে সমান্তরালভাবে প্রতিটি শার্ড অটোমেটিক রান করে এবং কম সময়ে টেস্টের সম্পূর্ণ সেট শেষ করে।

যেমন, আপনি N শার্ড তৈরি করলে, আপনার বেছে নেওয়া প্রতিটি ডিভাইসের জন্য, Test Lab N সংখ্যক একই ধরনের ডিভাইস চালু করে এবং প্রতিটি ডিভাইসে টেস্টের সাবসেট রান করে। এর অর্থ হল শার্ড করা টেস্ট কেসের ফলে প্রতিটি ডিভাইসে একাধিক টেস্ট এক্সিকিউশন হতে পারে। তবে, নন-শার্ডেড টেস্ট কেসের ক্ষেত্রে, প্রতিটি ডিভাইসে একটি করে টেস্ট এক্সিকিউশন হয়। Test Lab-এর ধারণা সম্পর্কে জানতে, মূল ধারণা দেখুন।

Firebase কনসোলে টেস্ট শার্ডিং চালু করতে, এই ধাপগুলি অনুসরণ করুন:

  1. ইনস্ট্রুমেন্টেশন টেস্ট সেট-আপে, অতিরিক্ত বিকল্প-এ ক্লিক করুন।

  2. শার্ডিং বিভাগে, আপনি যতগুলি শার্ড চালাতে চান সেই সংখ্যা লিখুন।

টেস্ট শার্ডের জন্য বিলিং

Test Lab AndroidJUnitRunner-এর বিল্ট-ইন শার্ডিং মেকানিজম ব্যবহার করে আপনার শার্ড প্রয়োগ করে। খালি শার্ড (অ্যাসাইন করা টেস্ট কেস ছাড়া শার্ড) স্পিন আপ করার জন্য চার্জ এড়াতে, আপনার তৈরি করা শার্ডের সংখ্যা মোট টেস্ট কেসের সংখ্যার চেয়ে কম হওয়া উচিত। প্রতিটি টেস্ট কেস রান করতে কত সময় লাগে তার উপর নির্ভর করে, সাধারণত প্রতিটি শার্ডে ২-১০টি টেস্ট কেস অ্যাসাইন করা ভালো।

বিলিং সম্পর্কে আরও তথ্যের জন্য, ব্যবহার, কোটা এবং বিলিং পড়ুন।