বিল্ড-ম্যানেজড ডিভাইসগুলির সাহায্যে আপনার পরীক্ষাগুলি স্কেল করুন

বিল্ড-ম্যানেজড ডিভাইস আপনার স্বয়ংক্রিয় ইন্সট্রুমেন্টেড টেস্টের সামঞ্জস্য, পারফরম্যান্স এবং নির্ভরযোগ্যতা উন্নত করে। এপিআই লেভেল ২৭ এবং তার উপরের সংস্করণগুলোর জন্য উপলব্ধ এই ফিচারটি আপনাকে আপনার প্রোজেক্টের গ্রেডল ফাইলগুলোতে ভার্চুয়াল বা রিমোট ফিজিক্যাল টেস্ট ডিভাইস কনফিগার করার সুযোগ দেয়। অ্যান্ড্রয়েড গ্রেডল প্লাগইনটি আপনার স্বয়ংক্রিয় টেস্টগুলো চালানোর সময় এই কনফিগারেশনগুলো ব্যবহার করে ডিভাইসগুলোকে সম্পূর্ণরূপে পরিচালনা করে—অর্থাৎ, তৈরি, ডেপ্লয় এবং টিয়ার ডাউন করে।

এই ফিচারটি অ্যান্ড্রয়েড গ্রেডল প্লাগইনকে শুধু আপনার চালানো টেস্টগুলোই নয়, বরং ডিভাইসগুলোর লাইফসাইকেলও দেখার সুযোগ করে দেয়, যার ফলে এটি নিম্নলিখিত উপায়ে আপনার টেস্টিং অভিজ্ঞতার মান উন্নত করে:

  • আপনার টেস্টগুলো যাতে সঠিকভাবে সম্পন্ন হয়, তা নিশ্চিত করার জন্য ডিভাইস-সম্পর্কিত সমস্যাগুলো সমাধান করে।
  • ভার্চুয়াল ডিভাইসগুলোর ক্ষেত্রে, ডিভাইসের স্টার্টআপ টাইম ও মেমরি ব্যবহার উন্নত করতে এবং পরীক্ষাগুলোর মাঝে ডিভাইসগুলোকে একটি পরিষ্কার অবস্থায় পুনরুদ্ধার করতে এমুলেটর স্ন্যাপশট ব্যবহার করা হয়।
  • পরীক্ষার ফলাফল ক্যাশ করে রাখে এবং শুধুমাত্র সেই পরীক্ষাগুলোই পুনরায় চালায় যেগুলোর ফলাফল ভিন্ন হওয়ার সম্ভাবনা রয়েছে।
  • স্থানীয় এবং দূরবর্তী টেস্ট রানের মধ্যে আপনার পরীক্ষাগুলো চালানোর জন্য একটি সামঞ্জস্যপূর্ণ পরিবেশ প্রদান করে।

একটি ভার্চুয়াল বিল্ড-পরিচালিত ডিভাইস তৈরি করুন

আপনার অ্যাপ পরীক্ষা করার জন্য যে ভার্চুয়াল ডিভাইসটি ব্যবহার করতে চান, তা আপনার মডিউল-স্তরের বিল্ড ফাইলে নির্দিষ্ট করে দিতে পারেন। নিম্নলিখিত কোড নমুনাটি এপিআই লেভেল ৩০ চালিত একটি পিক্সেল ২-কে বিল্ড-পরিচালিত ডিভাইস হিসেবে তৈরি করে।

কোটলিন

android {
  testOptions {
    managedDevices {
      localDevices {
        create("pixel2api30") {
          // Use device profiles you typically see in Android Studio.
          device = "Pixel 2"
          // Use only API levels 27 and higher.
          apiLevel = 30
          // To include Google services, use "google".
          systemImageSource = "aosp"
        }
      }
    }
  }
}

গ্রুভি

android {
  testOptions {
    managedDevices {
      localDevices {
        pixel2api30 {
          // Use device profiles you typically see in Android Studio.
          device = "Pixel 2"
          // Use only API levels 27 and higher.
          apiLevel = 30
          // To include Google services, use "google".
          systemImageSource = "aosp"
        }
      }
    }
  }
}

ডিভাইসগুলির গোষ্ঠী সংজ্ঞায়িত করুন

বিভিন্ন এপিআই লেভেল এবং ফর্ম ফ্যাক্টরের মতো একাধিক ডিভাইস কনফিগারেশনে আপনার টেস্টগুলো স্কেল করতে, আপনি একাধিক বিল্ড-ম্যানেজড ডিভাইস সংজ্ঞায়িত করে সেগুলোকে একটি নামযুক্ত গ্রুপে যুক্ত করতে পারেন। এরপর অ্যান্ড্রয়েড গ্রেডল প্লাগইনটি গ্রুপের সমস্ত ডিভাইসে আপনার টেস্টগুলো সমান্তরালভাবে চালাতে পারবে।

নিচের উদাহরণটিতে phoneAndTablet নামক একটি ডিভাইস গ্রুপে যুক্ত করা দুটি ডিভাইস দেখানো হয়েছে।

কোটলিন

testOptions {
  managedDevices {
    localDevices {
      create("pixel2api29") { ... }
      create("nexus9api30") { ... }
    }
    groups {
      create("phoneAndTablet") {
        targetDevices.add(devices["pixel2api29"])
        targetDevices.add(devices["nexus9api30"])
      }
    }
  }
}

গ্রুভি

testOptions {
  managedDevices {
    localDevices {
      pixel2api29 { ... }
      nexus9api30 { ... }
    }
    groups {
      phoneAndTablet {
        targetDevices.add(devices.pixel2api29)
        targetDevices.add(devices.nexus9api30)
      }
    }
  }
}

আপনার পরীক্ষাগুলো চালান

আপনার কনফিগার করা বিল্ড-ম্যানেজড ডিভাইসগুলো ব্যবহার করে টেস্টগুলো চালানোর জন্য, নিম্নলিখিত কমান্ডটি ব্যবহার করুন। device-name হলো আপনার Gradle বিল্ড স্ক্রিপ্টে কনফিগার করা ডিভাইসের নাম (যেমন pixel2api30 ), এবং BuildVariant হলো আপনার অ্যাপের বিল্ড ভ্যারিয়েন্ট যা আপনি টেস্ট করতে চান, যেমন Debug

লিনাক্স এবং ম্যাকওএস

./gradlew device-nameBuildVariantAndroidTest

উইন্ডোজ

gradlew device-nameBuildVariantAndroidTest

বিল্ড-পরিচালিত ডিভাইসগুলির একটি গ্রুপে আপনার পরীক্ষাগুলি চালানোর জন্য, নিম্নলিখিত কমান্ডটি ব্যবহার করুন।

লিনাক্স এবং ম্যাকওএস

./gradlew group-nameGroupBuildVariantAndroidTest
./gradlew group-nameGroupBuildVariantAndroidTest

উইন্ডোজ

gradlew group-nameGroupBuildVariantAndroidTest

টেস্ট আউটপুটে একটি HTML ফাইলের পাথ অন্তর্ভুক্ত থাকে, যেখানে টেস্ট রিপোর্টটি থাকে। এছাড়াও, IDE-তে Run > Test History-তে ক্লিক করে আপনি আরও বিশ্লেষণের জন্য Android Studio-তে টেস্টের ফলাফল ইম্পোর্ট করতে পারেন।

টেস্ট শার্ডিং সক্রিয় করুন

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

কোনো নির্দিষ্ট টেস্ট রানে আপনি কতগুলো শার্ড ব্যবহার করতে চান তা নির্ধারণ করতে, আপনার gradle.properties ফাইলে নিম্নলিখিত বিষয়গুলো সেট করুন:

android.experimental.androidTest.numManagedDeviceShards=<number_of_shards>

এই বিকল্পটি ব্যবহার করে আপনার টেস্ট চালানোর সময়, বিল্ড-ম্যানেজড ডিভাইসগুলো টেস্ট রানের প্রতিটি ডিভাইস প্রোফাইলের জন্য আপনার নির্দিষ্ট করা সংখ্যক শার্ড সরবরাহ করে। সুতরাং, উদাহরণস্বরূপ, যদি আপনি তিনটি ডিভাইসের একটি ডিভাইস গ্রুপে আপনার টেস্টগুলো ডেপ্লয় করেন এবং numManagedDeviceShards দুই-এ সেট করেন, তাহলে বিল্ড-ম্যানেজড ডিভাইসগুলো আপনার টেস্ট রানের জন্য মোট ছয়টি ভার্চুয়াল ডিভাইস সরবরাহ করবে।

আপনার পরীক্ষাগুলো সম্পন্ন হলে, গ্রেডল টেস্ট রানে ব্যবহৃত প্রতিটি শার্ডের জন্য একটি .proto ফাইলে পরীক্ষার ফলাফল আউটপুট করে।

স্বয়ংক্রিয় পরীক্ষার ডিভাইস ব্যবহার করুন

বিল্ড-ম্যানেজড ডিভাইসগুলো অটোমেটেড টেস্ট ডিভাইস (ATD) নামক এক ধরনের এমুলেটর ডিভাইস সমর্থন করে, যা আপনার ইন্সট্রুমেন্টেড টেস্টগুলো চালানোর সময় সিপিইউ এবং মেমরি রিসোর্স কমাতে অপ্টিমাইজ করা থাকে। ATD-গুলো কয়েকটি উপায়ে রানটাইম পারফরম্যান্স উন্নত করে:

  • আপনার অ্যাপ পরীক্ষা করার জন্য সাধারণত দরকারি নয় এমন আগে থেকে ইনস্টল করা অ্যাপগুলো সরিয়ে ফেলুন।
  • আপনার অ্যাপ পরীক্ষা করার জন্য সাধারণত দরকারি নয় এমন কিছু ব্যাকগ্রাউন্ড সার্ভিস নিষ্ক্রিয় করুন।
  • হার্ডওয়্যার রেন্ডারিং নিষ্ক্রিয় করুন

শুরু করার আগে, অ্যান্ড্রয়েড এমুলেটরটি সর্বশেষ উপলব্ধ সংস্করণে আপডেট করে নিন । তারপর, আপনার মডিউল-স্তরের বিল্ড ফাইলে একটি বিল্ড-ম্যানেজড ডিভাইস সংজ্ঞায়িত করার সময় একটি "-atd" ইমেজ নির্দিষ্ট করুন, যেমনটি নিচে দেখানো হয়েছে:

কোটলিন

android {
  testOptions {
    managedDevices {
      localDevices {
        create("pixel2api30") {
          // Use device profiles you typically see in Android Studio.
          device = "Pixel 2"
          // ATDs currently support only API level 30.
          apiLevel = 30
          // You can also specify "google-atd" if you require Google Play Services.
          systemImageSource = "aosp-atd"
        }
      }
    }
  }
}

গ্রুভি

android {
  testOptions {
    managedDevices {
      localDevices {
        pixel2api30 {
          // Use device profiles you typically see in Android Studio.
          device = "Pixel 2"
          // ATDs currently support only API level 30.
          apiLevel = 30
          // You can also specify "google-atd" if you require Google Play Services.
          systemImageSource = "aosp-atd"
        }
      }
    }
  }
}

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

ATD ইমেজগুলো থেকে কী কী সরানো হয়?

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

ATD ইমেজ থেকে কী সরানো হয়েছে স্বয়ংক্রিয় পরীক্ষা চালানোর সময় কেন আপনার এটির প্রয়োজন নাও হতে পারে
গুগল পণ্য অ্যাপস:
  • মেইল
  • মানচিত্র
  • ক্রোম
  • বার্তা
  • প্লে স্টোর, এবং অন্যান্য
আপনার স্বয়ংক্রিয় পরীক্ষাগুলো আপনার নিজের অ্যাপের লজিকের উপর দৃষ্টি নিবদ্ধ করবে এবং ধরে নেবে যে অন্যান্য অ্যাপ বা প্ল্যাটফর্মটি সঠিকভাবে কাজ করবে।

Espresso-Intents-এর মাধ্যমে, আপনি আপনার পাঠানো ইনটেন্টগুলো মেলাতে ও যাচাই করতে পারেন, অথবা আসল ইনটেন্ট প্রতিক্রিয়ার পরিবর্তে স্টাব প্রতিক্রিয়াও প্রদান করতে পারেন।

সেটিংস অ্যাপ এবং পরিষেবা:
  • ক্যারিয়ার কনফিগারেশন
  • জরুরি তথ্য
  • ওয়ানটাইম ইনিশিয়ালাইজার
  • ফটোটেবিল (স্ক্রিনসেভার)
  • বিধান
  • সেটিংস অ্যাপ
  • স্টোরেজম্যানেজার
  • টেলিফোনি এপিএন কনফিগারেশন
  • ওয়ালপেপারক্রপার
  • ওয়ালপেপারপিকার
এই অ্যাপগুলো ব্যবহারকারীদের জন্য একটি গ্রাফিক্যাল ইউজার ইন্টারফেস (GUI) প্রদান করে, যার মাধ্যমে তারা প্ল্যাটফর্ম সেটিংস পরিবর্তন করতে, তাদের ডিভাইস সেট আপ করতে বা ডিভাইসের স্টোরেজ পরিচালনা করতে পারেন। এটি সাধারণত অ্যাপ-স্তরের স্বয়ংক্রিয় পরীক্ষার আওতার বাইরে থাকে।


দ্রষ্টব্য: ATD ইমেজে সেটিংস প্রোভাইডার এখনও উপলব্ধ আছে।

সিস্টেমইউআই আপনার স্বয়ংক্রিয় পরীক্ষাগুলো আপনার নিজের অ্যাপের লজিকের উপর দৃষ্টি নিবদ্ধ করবে এবং ধরে নেবে যে অন্যান্য অ্যাপ বা প্ল্যাটফর্মটি সঠিকভাবে কাজ করবে।
AOSP অ্যাপ এবং পরিষেবা:
  • ব্রাউজার২
  • ক্যালেন্ডার
  • ক্যামেরা২
  • যোগাযোগ
  • ডায়ালার
  • ডেস্কক্লক
  • গ্যালারি২
  • ল্যাটিনআইএমই
  • লঞ্চার৩কুইকস্টেপ
  • সঙ্গীত
  • কুইকসার্চবক্স
  • সেটিংস ইন্টেলিজেন্স
এই অ্যাপ এবং পরিষেবাগুলি সাধারণত আপনার অ্যাপের কোডের স্বয়ংক্রিয় পরীক্ষার আওতার বাইরে থাকে।

ফায়ারবেস টেস্ট ল্যাব ডিভাইস ব্যবহার করুন

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

শুরু করুন

নিম্নলিখিত ধাপগুলিতে বিল্ড-ম্যানেজড ডিভাইসগুলির সাথে ফায়ারবেস টেস্ট ল্যাব ডিভাইস ব্যবহার শুরু করার পদ্ধতি বর্ণনা করা হয়েছে। এই ধাপগুলিতে ব্যবহারকারীর ক্রেডেনশিয়াল সরবরাহ করার জন্য gcloud CLI ব্যবহার করা হয়, যা সব ডেভেলপমেন্ট এনভায়রনমেন্টের জন্য প্রযোজ্য নাও হতে পারে। আপনার প্রয়োজনের জন্য কোন অথেনটিকেশন প্রক্রিয়া ব্যবহার করতে হবে সে সম্পর্কে আরও তথ্যের জন্য, "অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল কীভাবে কাজ করে" দেখুন।

  1. একটি Firebase প্রজেক্ট তৈরি করতে, Firebase কনসোলে যান। 'Add project'-এ ক্লিক করুন এবং প্রজেক্টটি তৈরি করার জন্য স্ক্রিনে দেওয়া নির্দেশাবলী অনুসরণ করুন। আপনার প্রজেক্ট আইডি মনে রাখবেন।

  2. Google Cloud CLI ইনস্টল করতে, Install the gcloud CLI -এর ধাপগুলো অনুসরণ করুন।

  3. আপনার স্থানীয় পরিবেশ কনফিগার করুন।

    1. gcloud-এ আপনার Firebase প্রোজেক্টের লিঙ্ক:

      gcloud config set project FIREBASE_PROJECT_ID
      
    2. এপিআই অ্যাক্সেসের জন্য আপনার ব্যবহারকারীর পরিচয়পত্র ব্যবহারের অনুমোদন দিন। আমরা মডিউল-স্তরের বিল্ড স্ক্রিপ্টে ডিএসএল (DSL) ব্যবহার করে গ্রেডল-এ (Gradle) একটি সার্ভিস অ্যাকাউন্ট JSON ফাইল পাস করার মাধ্যমে অনুমোদন দেওয়ার পরামর্শ দিই:

      কোটলিন

      firebaseTestLab {
        ...
        serviceAccountCredentials.set(file(SERVICE_ACCOUNT_JSON_FILE))
      }

      গ্রুভি

      firebaseTestLab {
        ...
        serviceAccountCredentials = file(SERVICE_ACCOUNT_JSON_FILE)
      }

      বিকল্পভাবে, আপনি নিম্নলিখিত টার্মিনাল কমান্ডটি ব্যবহার করে ম্যানুয়ালি অনুমোদন করতে পারেন:

      gcloud auth application-default login
      
    3. ঐচ্ছিক: আপনার ফায়ারবেস প্রজেক্টকে কোটা প্রজেক্ট হিসেবে যুক্ত করুন। এই ধাপটি শুধুমাত্র তখনই প্রয়োজন হবে, যদি আপনি টেস্ট ল্যাবের জন্য নির্ধারিত বিনামূল্যের কোটা অতিক্রম করেন।

      gcloud auth application-default set-quota-project FIREBASE_PROJECT_ID
      
  4. প্রয়োজনীয় এপিআইগুলো সক্রিয় করুন।

    Google Developers Console-এর API Library পৃষ্ঠায় , কনসোলের উপরের সার্চ বক্সে এই API-গুলোর নাম টাইপ করে এবং তারপর প্রতিটি API-এর ওভারভিউ পৃষ্ঠায় থাকা ‘Enable API’ বোতামে ক্লিক করে Cloud Testing API এবং Cloud Tool Results API সক্রিয় করুন।

  5. আপনার অ্যান্ড্রয়েড প্রজেক্টটি কনফিগার করুন।

    1. শীর্ষ-স্তরের বিল্ড স্ক্রিপ্টে Firebase Test Lab প্লাগইনটি যোগ করুন:

      কোটলিন

      plugins {
        ...
        id("com.google.firebase.testlab") version "0.0.1-alpha05" apply false
      }

      গ্রুভি

      plugins {
        ...
        id 'com.google.firebase.testlab' version '0.0.1-alpha05' apply false
      }
    2. gradle.properties ফাইলে কাস্টম ডিভাইস টাইপ সক্রিয় করুন:

      android.experimental.testOptions.managedDevices.customDevice=true
    3. মডিউল-স্তরের বিল্ড স্ক্রিপ্টে Firebase Test Lab প্লাগইনটি যোগ করুন:

      কোটলিন

      plugins {
       ...
       id "com.google.firebase.testlab"
      }

      গ্রুভি

      plugins {
       ...
       id 'com.google.firebase.testlab'
      }

একটি টেস্ট ল্যাব ডিভাইস নির্দিষ্ট করুন

আপনার অ্যাপ পরীক্ষা করার জন্য, আপনি মডিউল-স্তরের বিল্ড স্ক্রিপ্টে Gradle-কে ব্যবহার করার জন্য একটি Firebase Test Lab ডিভাইস নির্দিষ্ট করে দিতে পারেন। নিম্নলিখিত কোড নমুনাটি API লেভেল 30 চালিত একটি Pixel 3-কে ftlDevice নামক একটি বিল্ড-পরিচালিত Test Lab ডিভাইস হিসেবে তৈরি করে। আপনি যখন আপনার মডিউলে com.google.firebase.testlab প্লাগইনটি প্রয়োগ করেন, তখন firebaseTestLab {} ব্লকটি উপলব্ধ হয়।

কোটলিন

firebaseTestLab {
  managedDevices {
    create("ftlDevice") {
      device = "Pixel3"
      apiLevel = 30
    }
  }
  ...
}

গ্রুভি

firebaseTestLab {
  managedDevices {
    ftlDevice {
      device = "Pixel3"
      apiLevel = 30
    }
  }
  ...
}

Firebase Test Lab ডিভাইস সহ বিল্ড-পরিচালিত ডিভাইসগুলির একটি গ্রুপ সংজ্ঞায়িত করতে, "ডিভাইসের গ্রুপ সংজ্ঞায়িত করুন" দেখুন।

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

স্মার্ট শার্ডিং ব্যবহার করে টেস্ট রান অপ্টিমাইজ করুন

বিল্ড-ম্যানেজড টেস্ট ল্যাব ডিভাইসগুলিতে টেস্টিং স্মার্ট শার্ডিং সমর্থন করে। স্মার্ট শার্ডিং স্বয়ংক্রিয়ভাবে আপনার টেস্টগুলিকে শার্ডগুলির মধ্যে এমনভাবে বিতরণ করে যাতে প্রতিটি শার্ড প্রায় একই সময় ধরে চলে, যা ম্যানুয়াল অ্যালোকেশনের প্রচেষ্টা এবং সামগ্রিক টেস্ট রানের সময়কাল হ্রাস করে। স্মার্ট শার্ডিং আপনার টেস্টের ইতিহাস, অর্থাৎ পূর্বে আপনার টেস্টগুলি চলতে কত সময় নিয়েছে সেই তথ্য ব্যবহার করে টেস্টগুলিকে সর্বোত্তম উপায়ে বিতরণ করে। উল্লেখ্য যে, স্মার্ট শার্ডিং ব্যবহার করার জন্য আপনার ফায়ারবেস টেস্ট ল্যাবের জন্য গ্রেডল প্লাগইনের সংস্করণ 0.0.1-alpha05 প্রয়োজন।

স্মার্ট শার্ডিং সক্রিয় করতে, প্রতিটি শার্ডের মধ্যে পরীক্ষাগুলো সম্পন্ন হতে কত সময় লাগবে তা নির্দিষ্ট করুন। পরীক্ষা শেষ হওয়ার আগেই শার্ড বাতিল হয়ে যাওয়ার পরিস্থিতি এড়াতে, আপনার টার্গেট শার্ডের সময়কাল timeoutMinutes এর থেকে কমপক্ষে পাঁচ মিনিট কম নির্ধারণ করা উচিত।

firebaseTestLab {
  ...
  testOptions {
    targetedShardDurationMinutes = 2
  }
}

আরও জানতে, Firebase Test Lab ডিভাইসের DSL অপশনগুলো সম্পর্কে পড়ুন।

টেস্ট ল্যাব ডিভাইসগুলির জন্য আপডেট করা ডিএসএল

আপনার টেস্ট রান কাস্টমাইজ করতে অথবা আপনার ব্যবহৃত অন্যান্য সলিউশন থেকে মাইগ্রেট করার জন্য আরও অনেক ডিএসএল (DSL) অপশন কনফিগার করার সুযোগ রয়েছে। নিচের কোড স্নিপেটে বর্ণিত এই অপশনগুলোর কয়েকটি দেখুন।

firebaseTestLab {
  ...

  /**
   * A path to a JSON file that contains service account credentials to access to
   * a Firebase Test Lab project.
   */
  serviceAccountCredentials.set(file("your_service_account_credentials.json"))


  testOptions {
    fixture {
      /**
       * Whether to grant permissions on the device before tests begin.
       * Available options are "all" or "none".
       *
       * Default value is "all".
       */
      grantedPermissions = "all"

      /**
       * Map of files to push to the device before starting the test.
       *
       * The key is the location on the device.
       * The value is the location of the file, either local or in Google Cloud.
       */
      extraDeviceFiles["/sdcard/dir1/file1.txt"] = "local/file.txt"
      extraDeviceFiles["/sdcard/dir2/file2.txt"] = "gs://bucket/file.jpg"

      /**
       * The name of the network traffic profile.
       *
       * Specifies network conditions to emulate when running tests.
       *
       * Default value is empty.
       */
      networkProfile = "LTE"
    }

    execution {
      /**
       * The maximum time to run the test execution before cancellation,
       * measured in minutes. Does not include the setup or teardown of device,
       * and is handled server-side.
       *
       * The maximum possible testing time is 45 minutes on physical devices
       * and 60 minutes on virtual devices.
       *
       * Defaults to 15 minutes.
       */
       timeoutMinutes = 30

      /**
       * Number of times the test should be rerun if tests fail.
       * The number of times a test execution should be retried if one
       * or more of its test cases fail.
       *
       * The max number of times is 10.
       *
       * The default number of times is 0.
       */
      maxTestReruns = 2

      /**
       * Ensures only a single attempt is made for each execution if
       * an infrastructure issue occurs. This doesn't affect `maxTestReruns`.
       * Normally, two or more attempts are made by Firebase Test Lab if a
       * potential infrastructure issue is detected. This is best enabled for
       * latency sensitive workloads. The number of execution failures might be
       * significantly greater with `failFast` enabled.
       *
       * Defaults to false.
       */
      failFast = false

      /**
       * The number of shards to split the tests across.
       *
       * Default to 0 for no sharding.
       */
      numUniformShards = 20
    }

    /**
     * For smart sharding, the target length of time each shard should takes in
     * minutes. Maxes out at 50 shards for physical devices and 100 shards for
     * virtual devices.
     *
     * Only one of numUniformShards or targetedShardDurationMinutes can be set.
     *
     * Defaults to 0 for no smart sharding.
     */
     targetedShardDurationMinutes = 15
    }

    results {
      /**
       * The name of the Google storage bucket to store the test results in.
       *
       * If left unspecified, the default bucket is used.
       *
       * Please refer to Firebase Test Lab permissions for required permissions
       * for using the bucket.
       */
      cloudStorageBucket = "bucketLocationName"

      /**
       * Name of test results for the Firebase console history list.
       * All tests results with the same history name are grouped
       * together in the Firebase console in a time-ordered test history list.
       *
       * Defaults to the application label in the APK manifest.
       */
      resultsHistoryName = "application-history"

      /**
       * List of paths to copy from the test device's storage to the test
       * results folder. These must be absolute paths under /sdcard or
       * /data/local/tmp.
       */
      directoriesToPull.addAll(
        "/sdcard/path/to/something"
      )

      /**
       * Whether to enable video recording during the test.
       *
       * Disabled by default.
       */
      recordVideo = false

      /**
       * Whether to enable performance metrics. If enabled, monitors and records
       * performance metrics such as CPU, memory, and network usage.
       *
       * Defaults to false.
       */
      performanceMetrics = true
  }
}