গেম লুপ টেস্ট শুরু করা

বিভিন্ন UI ফ্রেমওয়ার্কে গেমিং অ্যাপ তৈরি করা হলে, গেম টেস্টিং অটোমেট করা কঠিন হতে পারে। Game Loop টেস্ট আপনাকে নেটিভ টেস্টকে Test Lab-এর সাথে ইন্টিগ্রেট করতে এবং আপনার বেছে নেওয়া ডিভাইসে সহজেই রান করতে দেয়। Game Loop টেস্ট আপনার টেস্টকে গেমিং অ্যাপের মাধ্যমে রান করায়, একই সাথে একজন আসল প্লেয়ারের অ্যাকশনকে সিমুলেট করে। এই নির্দেশিকা থেকে আপনি কীভাবে গেম লুপ টেস্ট চালাবেন, তারপর Firebase কনসোলে আপনার টেস্টের ফলাফল দেখবেন ও ম্যানেজ করবেন তা জানতে পারবেন।

গেম লুপ টেস্ট কী?

গেমিং অ্যাপ যেহেতু বিভিন্ন UI ফ্রেমওয়ার্ক ও ইঞ্জিন জুড়ে রেন্ডার করে, যেমন Unity, Unreal বা OpenGL/Vulkan C++ কোড, তাই স্ট্যান্ডার্ড অটোমেশন টুল UI এলিমেন্ট পরিদর্শন বা সেগুলির সাথে ইন্টার‍্যাক্ট করতে পারে না। গেম লুপ টেস্ট আপনাকে নির্দিষ্ট পরিস্থিতি নম্বর সহ ইনটেন্ট ব্যবহার করে গেম লঞ্চ করার মাধ্যমে Test Lab-এর সাথে আপনার নেটিভ ইঞ্জিন টেস্ট ইন্টিগ্রেট করতে দেয়। এই দৃশ্যকল্পের নম্বরটি আপনার অ্যাপকে প্রি-স্ক্রিপ্টেড লজিক, AI সিমুলেশন বা পারফর্ম্যান্স চেক সরাসরি আপনার গেম ইঞ্জিনের মধ্যে চালানোর জন্য প্রম্পট করে।

লঞ্চ করার পরে, Test Lab আপনার গেমের UI-এর সাথে আর ইন্টার‍্যাক্ট করে না। পরিবর্তে, Test Lab একটি টেস্ট ট্রান্সপোর্ট ও এনভায়রনমেন্ট হিসেবে কাজ করে: এটি নির্দিষ্ট সিনারিও লঞ্চ করে, ক্র্যাশ ও টাইম-আউট মনিটর করে এবং আপনার অ্যাপ লুপ চালানো শেষ করলে, কাস্টম ফলাফল লগ সংগ্রহ করে।

ইনস্ট্রুমেন্টেশন টেস্টের থেকে গেম লুপ কীভাবে আলাদা

  • ইনস্ট্রুমেন্টেশন টেস্ট (যেমন, Espresso বা UI Automator) UI ইন্টার‍্যাকশন, বোতামে ক্লিক করা এবং আপনার অ্যাপের বাইরে থেকে Android View হায়ারার্কি জুড়ে অ্যাপ্লিকেশন স্টেট অ্যাসার্ট করার জন্য এক্সটার্নাল ফ্রেমওয়ার্কের উপর নির্ভর করে।
  • গেম লুপ টেস্ট আপনার অ্যাপে টেস্ট লজিক ডেলিগেট করে। আপনার অ্যাপ এক্সটার্নাল UI ইন্টার‍্যাকশন ছাড়াই নিজস্ব ইন্টার্নাল টেস্টিং লুপ বা সিমুলেশন রান করে, যেখানে Test Lab আপনার পরিস্থিতি ট্রিগার করে এবং টেস্ট আউটপুট সংগ্রহ করে।

উদাহরণ

ধরে নিন, আপনি যাচাই করতে চান যে আপনার গেম বিভিন্ন ফিজিক্যাল ডিভাইসে কমপক্ষে ৬০ ফ্রেম পার সেকেন্ড বজায় রাখে কিনা। সবচেয়ে জটিল লেভেল লোড করতে এবং কোনও AI প্লেয়ার বা অটোমেটেড স্ক্রিপ্টকে সেটি দুই মিনিট ধরে খেলতে দিতে, আপনার গেম কোডের মধ্যে আপনি সিনারিও 1 প্রয়োগ করতে পারেন।

Test Lab পরিস্থিতি ট্রিগার করলে 1, আপনার গেম AI প্লেথ্রু শুরু করে, ফ্রেম রেন্ডার করার সময় ও মেমরি ব্যবহার মনিটর করে, সেইসব মেট্রিককে কাস্টম আউটপুট লগ ফাইলে (logFile) স্ট্রিম করে এবং সম্পূর্ণ হলে finish() কল করে। Test Lab তারপরে লগ ফাইল ক্যাপচার করে এবং Cloud Storage ও Firebase কনসোলে আপনার জন্য উপলভ্য করে তোলে।

যেসব ক্ষেত্রে ব্যবহার করা যাবে

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

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

আপনি একটি টেস্ট ডিভাইস, টেস্ট ডিভাইসের একটি সেট বা Test Lab-এ গেম লুপ টেস্ট চালাতে পারবেন। তবে, আমরা ভার্চুয়াল ডিভাইসে Game Loop টেস্ট চালানোর জন্য সাজেস্ট করি না কারণ সেগুলির গ্রাফিক্স ফ্রেম রেট ফিজিক্যাল ডিভাইসের তুলনায় কম হয়।

শুরু করার আগে

টেস্ট প্রয়োগ করতে, আপনাকে প্রথমে গেম লুপ টেস্টের জন্য অ্যাপ কনফিগার করতে হবে।

  1. আপনার অ্যাপ ম্যানিফেস্টে, অ্যাক্টিভিটিতে একটি নতুন ইনটেন্ট ফিল্টার যোগ করুন:

    <activity android:name=".MyActivity">
       <intent-filter>
           <action android:name="com.google.intent.action.TEST_LOOP"/>
           <category android:name="android.intent.category.DEFAULT"/>
           <data android:mimeType="application/javascript"/>
       </intent-filter>
       <intent-filter>
          ... (other intent filters here)
       </intent-filter>
    </activity>

    এটি Test Lab-কে নির্দিষ্ট ইনটেন্ট ট্রিগার করার মাধ্যমে আপনার গেম লঞ্চ করার অনুমতি দেয়।

  2. আপনার কোডে (আমরা onCreate মেথড ডিক্লারেশনের মধ্যে যোগ করার কথা সাজেস্ট করি), নিচে উল্লেখ করা বিষয়গুলি যোগ করুন:

    Kotlin

    val launchIntent = intent
    if (launchIntent.action == "com.google.intent.action.TEST_LOOP") {
        val scenario = launchIntent.getIntExtra("scenario", 0)
        // Code to handle your game loop here
    }

    Java

    Intent launchIntent = getIntent();
    if(launchIntent.getAction().equals("com.google.intent.action.TEST_LOOP")) {
        int scenario = launchIntent.getIntExtra("scenario", 0);
        // Code to handle your game loop here
    }

    এটি আপনার অ্যাক্টিভিটিকে সেই ইনটেন্ট চেক করার অনুমতি দেয় যা এটি লঞ্চ করে। এছাড়াও, আপনি চাইলে পরে এই কোড যোগ করতে পারেন (যেমন, গেম ইঞ্জিন প্রাথমিকভাবে লোড করার পরে)।

  3. সাজেস্ট করা: টেস্টের শেষে, এগুলি যোগ করুন:

    Kotlin

    yourActivity.finish()

    Java

    yourActivity.finish();

    Game Loop টেস্ট সম্পূর্ণ হয়ে গেলে এটি আপনার অ্যাপ বন্ধ করে দেয়। পরবর্তী লুপ শুরু করার জন্য আপনার অ্যাপের UI ফ্রেমওয়ার্কের উপর নির্ভর করে এবং আপনার অ্যাপ বন্ধ করে দিলে এটি বুঝতে পারে যে পরীক্ষাটি শেষ হয়ে গেছে।

গেম লুপ টেস্ট তৈরি ও চালানো

Game Loop টেস্টের জন্য আপনার অ্যাপ কনফিগার করার পরে, আপনি অবিলম্বে একটি টেস্ট তৈরি করতে এবং আপনার গেমিং অ্যাপে এটি চালাতে পারবেন। আপনি Test Lab Firebase কনসোল বা gcloud কমান্ড লাইন ইন্টারফেস (CLI) ব্যবহার করে অথবা Test Loop ম্যানেজার ব্যবহার করে লোকাল ডিভাইসে টেস্ট চালানোর বিকল্প বেছে নিতে পারবেন।

স্থানীয় ডিভাইসে চালানো

Test Lab-এর Test Loop Manager হল একটি ওপেন সোর্স অ্যাপ যা আপনাকে গেম লুপ টেস্ট ইন্টিগ্রেট করতে এবং আপনার লোকাল ডিভাইসে সেগুলি রান করাতে সাহায্য করে। এছাড়াও, এটি আপনার কোয়ালিটি অ্যাসিওরেন্স টিমকে তাদের ডিভাইসে একই গেম লুপ চালানোর অনুমতি দেয়।

Test Loop Manager ব্যবহার করে কোনও লোকাল ডিভাইসে পরীক্ষা চালাতে:

  1. ফোন বা ট্যাবলেটে Test Loop Manager ডাউনলোড করুন এবং এটি চালানোর মাধ্যমে ইনস্টল করুন:
    adb install testloopmanager.apk
  2. আপনার ডিভাইসে, ফোন বা ট্যাবলেটে Test Loop অ্যাপ খুলুন। অ্যাপটি আপনার ডিভাইসে থাকা এমন অ্যাপের একটি তালিকা দেখায় যেগুলি গেম লুপের সাথে চালানো যেতে পারে। এখানে আপনার গেমিং অ্যাপ দেখতে না পেলে, নিশ্চিত করুন যে আপনার ইনটেন্ট ফিল্টারটি শুরু করার আগে বিভাগ-এর প্রথম ধাপে বর্ণিত ফিল্টারের সাথে মিলছে।
  3. আপনার গেমিং অ্যাপ বেছে নিন, তারপর আপনি যতগুলি লুপ চালাতে চান সেই সংখ্যাটি বেছে নিন। মনে রাখবেন: এই ধাপে, আপনি শুধু একটি লুপের পরিবর্তে লুপের একটি সাবসেট চালানোর বিকল্প বেছে নিতে পারেন। একসাথে একাধিক লুপ চালানোর বিষয়ে আরও জানতে, ঐচ্ছিক ফিচার দেখুন।
  4. টেস্ট রান করুন বিকল্পে ক্লিক করুন। আপনার পরীক্ষা সঙ্গে সঙ্গে রান করা শুরু করে।

Test Lab-এ রান করুন

আপনি Test Lab-এ গেম লুপ টেস্ট চালাতে পারবেন, এর জন্য Firebase কনসোল অথবা gcloud CLI ব্যবহার করতে পারেন। শুরু করার আগে, আপনি যদি আগে না করে থাকেন, তাহলে Firebase কনসোল খুলুন এবং একটি প্রোজেক্ট তৈরি করুন।

Firebase কনসোল ব্যবহার করুন

  1. Firebase কনসোলে, বাঁদিকের প্যানেল থেকে Test Lab বিকল্পে ক্লিক করুন।
  2. আপনার প্রথম টেস্ট রান করুন বিকল্পে ক্লিক করুন (অথবা আপনার প্রোজেক্টে আগে কোনও টেস্ট রান করা হয়ে থাকলে টেস্ট রান করুন বিকল্পে ক্লিক করুন)।
  3. পরীক্ষার ধরন হিসেবে Game Loop বেছে নিন এবং তারপর চালিয়ে যান বিকল্পে ক্লিক করুন।
  4. ব্রাউজ করুন বিকল্পে ক্লিক করুন এবং তারপরে আপনার অ্যাপের .apk ফাইল ব্রাউজ করুন। মনে রাখবেন: এই ধাপে, আপনি শুধু একটি লুপের পরিবর্তে লুপের একটি সাবসেট চালানোর বিকল্প বেছে নিতে পারেন। একসাথে একাধিক লুপ চালানোর বিষয়ে আরও জানতে, ঐচ্ছিক ফিচার দেখুন।
  5. চালিয়ে যান বিকল্পে ক্লিক করুন।
  6. আপনার অ্যাপ পরীক্ষা করার জন্য ব্যবহার করার জন্য ফিজিক্যাল ডিভাইস বেছে নিন।
  7. টেস্ট শুরু করুন বিকল্পে ক্লিক করুন।

Firebase কনসোলের মাধ্যমে শুরু করার ব্যাপারে আরও তথ্য পেতে, Firebase কনসোলের মাধ্যমে পরীক্ষা করা শুরু করুন দেখুন।

gcloud কমান্ড-লাইন (CLI) ব্যবহার করা

  1. আপনি আগে থেকে না করে থাকলে, Google Cloud SDK ডাউনলোড ও ইনস্টল করুন

  2. আপনার Google অ্যাকাউন্ট ব্যবহার করে gcloud CLI-তে সাইন-ইন করুন:

    gcloud auth login

  3. gcloud-এ আপনার Firebase প্রোজেক্ট সেট করুন, যেখানে PROJECT_ID হল আপনার Firebase প্রোজেক্টের আইডি:

    gcloud config set project PROJECT_ID
    
  4. আপনার প্রথম পরীক্ষা চালান:

    gcloud firebase test android run \
     --type=game-loop --app=<var>path-to-apk</var> \
     --device model=herolte,version=23
    

gcloud CLI-এর সাথে শুরু করা সম্পর্কে আরও তথ্যের জন্য, gcloud কমান্ড লাইন থেকে পরীক্ষা করা শুরু করুন।

ঐচ্ছিক ফিচার

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

আউটপুট ডেটা লেখা

Test Lab আপনার গেম লঞ্চ করলে, এটি একটি URL নির্দিষ্ট করে যা টেস্ট ডিভাইসে একটি লোকাল ফলাফল ফাইলের দিকে নির্দেশ করে, যা launchIntent.getData() ব্যবহার করে অ্যাক্সেস করা যায়। আপনার গেম, টেস্ট রান চলাকালীন, টেস্ট ফলাফল, পারফর্ম্যান্স মেট্রিক ও লগ (logFile) সরাসরি এই লোকেশনে লিখতে পারে।

আপনি logFile-এ যেকোনও কন্টেন্ট লিখতে পারেন, যেমন প্লেন টেক্সট, CSV ডেটা, ফ্রেম রেন্ডারিং টাইম বা কাস্টম ডায়াগনস্টিক রিপোর্ট। আপনি যে কন্টেন্ট লিখছেন তার উপর কোনও বিধিনিষেধ বা ফর্ম্যাটিং সংক্রান্ত প্রয়োজনীয়তা নেই; আপনার টেস্ট সম্পূর্ণ হলে এটি ফাইলটি ক্যাপচার করে এবং আপনার অন্যান্য টেস্ট আর্টিফ্যাক্টের সাথে আপনার Cloud Storage বাকেটে আপলোড করে।

Test Lab অ্যাপের মধ্যে ফাইল শেয়ার করার জন্য আগে থেকে নির্ধারিত পেশাদার পদ্ধতি অনুসরণ করে যা ফাইল শেয়ার করা নিবন্ধে বর্ণনা করা আছে। আপনার অ্যাক্টিভিটির onCreate() পদ্ধতিতে, যেখানে আপনার ইনটেন্ট আছে, আপনি নিচের কোডটি চালিয়ে আপনার ডেটা আউটপুট ফাইল রিট্রিভ ও চেক করতে পারবেন:

Kotlin

val launchIntent = intent
val logFile = launchIntent.data
logFile?.let {
    Log.i(TAG, "Log file ${it.encodedPath}")
    // ...
}

Java

Intent launchIntent = getIntent();
Uri logFile = launchIntent.getData();
if (logFile != null) {
    Log.i(TAG, "Log file " + logFile.getEncodedPath());
    // ...
}

আপনার গেম অ্যাপের C++ সাইড থেকে ফাইলে লিখতে চাইলে, আপনি ফাইল পাথের পরিবর্তে ফাইল ডেসক্রিপ্টর পাস করতে পারেন:

Kotlin

val launchIntent = intent
val logFile = launchIntent.data
var fd = -1
logFile?.let {
    Log.i(TAG, "Log file ${it.encodedPath}")
    fd = try {
        contentResolver
            .openAssetFileDescriptor(logFile, "w")!!
            .parcelFileDescriptor
            .fd
    } catch (e: FileNotFoundException) {
        e.printStackTrace()
        -1
    } catch (e: NullPointerException) {
        e.printStackTrace()
        -1
    }
}

// C++ code invoked here.
// native_function(fd);

Java

Intent launchIntent = getIntent();
Uri logFile = launchIntent.getData();
int fd = -1;
if (logFile != null) {
    Log.i(TAG, "Log file " + logFile.getEncodedPath());
    try {
        fd = getContentResolver()
                .openAssetFileDescriptor(logFile, "w")
                .getParcelFileDescriptor()
                .getFd();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        fd = -1;
    } catch (NullPointerException e) {
        e.printStackTrace();
        fd = -1;
    }
}

// C++ code invoked here.
// native_function(fd);

C++

#include <unistd.h>
JNIEXPORT void JNICALL
Java_my_package_name_MyActivity_native_function(JNIEnv *env, jclass type, jint log_file_descriptor) {
// The file descriptor needs to be duplicated.
int my_file_descriptor = dup(log_file_descriptor);
}

আউটপুট ফাইলের উদাহরণ

যদিও Test Lab আপনার logFile-এর জন্য কোনও নির্দিষ্ট ফর্ম্যাট চায় না, নিচে দেওয়া স্কিমার সাথে ম্যাচ করে JSON হিসেবে আপনার আউটপুট স্ট্রাকচার করলে, Firebase কনসোল (https://console.firebase.google.com/project/_/testlab) আপনার গেম লুপ টেস্টের জন্য সারসংক্ষেপ মেট্রিক পার্স ও ডিসপ্লে করতে পারবে।

এই উদাহরণ সম্পর্কে মূল বিবরণ:

  • কে ডেটা প্রদান করে: আপনার (টেস্ট ডেভেলপার) গেম কোড থেকে এই ফাইলে সব মেট্রিক গণনা ও লেখার দায়িত্ব আপনার। Test Lab আপনার জন্য এইসব ডেটা পয়েন্ট অটোমেটিক সংগ্রহ বা তৈরি করে না।
  • কাস্টম ফিল্ড যোগ করা: /.../ হিসেবে চিহ্নিত করা জায়গাগুলি থেকে আপনি যথেচ্ছ কাস্টম কী-ভ্যালু পেয়ার (যেমন, "rendered_vertices": 12000 অথবা "ai_error_count": 0) যোগ করতে পারবেন। আপনার অ্যাপ থেকে ফাইল লেখার সময়, ফিল্ডের নাম স্কিমা ফিল্ডের সাথে কনফ্লিক্ট না করলে, আপনি আউটপুটে যেকোনও বৈধ JSON প্রপার্টি যোগ করতে পারবেন, যেমন name অথবা start_timestamp।
  • আউটপুট ফাইল কোথায় পাবেন: আপনার টেস্ট সম্পূর্ণ হওয়ার পরে, আপনার কাঁচা আউটপুট ফাইল টেস্ট রান আর্টিফ্যাক্ট ডিরেক্টরির মধ্যে আপনার প্রোজেক্টের Cloud Storage (GCS) ফলাফলের বাকেটে সেভ করা হয় এবং সেখান থেকে ডাউনলোড করা যায়। এছাড়াও, আপনি Firebase কনসোলের Test Lab পৃষ্ঠায় পার্স করা আউটপুট দেখতে ও পরীক্ষা করে দেখতে পারবেন।

নিচে স্ট্রাকচার্ড JSON আউটপুট ফাইলের একটি উদাহরণ দেওয়া হল:

{
  "name": "test name",
  "start_timestamp": 0, // Timestamp of the test start (in us).
                           Can be absolute or relative
  "driver_info": "...",
  "frame_stats": [
    {
      "timestamp": 1200000, // Timestamp at which this section was written
                               It contains value regarding the period
                               start_timestamp(0) -> this timestamp (1200000 us)
      "avg_frame_time": 15320, // Average time to render a frame in ns
      "nb_swap": 52, // Number of frame rendered
      "threads": [
        {
          "name": "physics",
          "Avg_time": 8030 // Average time spent in this thread per frame in us
        },
        {
          "name": "AI",
          "Avg_time": 2030 // Average time spent in this thread per frame in us
        }
      ],
      /.../ // Any custom field you want (vertices display on the screen, nb units …)
    },
    {
      // Next frame data here, same format as above
    }
  ],
  "loading_stats": [
    {
      "name": "assets_level_1",
      "total_time": 7850, // in us
      /.../
    },
    {
      "name": "victory_screen",
      "total_time": 554, // in us
      /.../
    }

  ],
  /.../, // You can add custom fields here
}

একাধিক গেম লুপ

আপনার অ্যাপে একাধিক গেম লুপ রান করা আপনার পক্ষে সহায়ক হতে পারে। লুপ হল আপনার গেম অ্যাপের শুরু থেকে শেষ পর্যন্ত সম্পূর্ণ রান-থ্রু। যেমন, আপনার গেমে একাধিক লেভেল থাকলে, আপনি হয়ত একটি গেম লুপের মাধ্যমে প্রতিটি লেভেল লঞ্চ করতে চাইবেন, তার পরিবর্তে একটি লুপের মাধ্যমে সবকটি লেভেল ইটারেট করতে চাইবেন না। এইভাবে, আপনার অ্যাপ লেভেল ৩২-এ ক্র্যাশ করলে, আপনি সরাসরি সেই গেম লুপ লঞ্চ করে ক্র্যাশটি আবার তৈরি করতে এবং বাগ ফিক্স পরীক্ষা করতে পারবেন।

আপনার অ্যাপকে একসাথে একাধিক লুপ চালানোর জন্য চালু করতে:

  • আপনি Test Loop Manager-এর মাধ্যমে কোনও পরীক্ষা চালালে:

    1. আপনার অ্যাপের মেনিফেস্টে, <application> এলিমেন্টের মধ্যে, নিম্নলিখিত লাইনটি যোগ করুন:

      <meta-data
        android:name="com.google.test.loops"
        android:value="5" />

      এই লঞ্চ ইন্টেন্টে টার্গেট লুপ একটি পূর্ণসংখ্যা প্যারামিটার হিসেবে থাকে। android:value ফিল্ডে, আপনি ১ থেকে ১০২৪ পর্যন্ত একটি পূর্ণসংখ্যা নির্দিষ্ট করতে পারেন (একটি পরীক্ষার জন্য অনুমোদিত লুপের সর্বাধিক সংখ্যা)। মনে রাখবেন যে লুপের ইন্ডেক্স ১ থেকে শুরু হয়, ০ থেকে নয়।

    2. Test Loop Manager অ্যাপে, একটি বেছে নেওয়ার স্ক্রিন দেখা যায় যা আপনাকে কোন লুপ চালাতে চান তা বেছে নিতে দেয়। আপনি একাধিক লুপ বেছে নিলে, আগের লুপটি সম্পূর্ণ হওয়ার পরে প্রতিটি লুপ সিকোয়েন্সে লঞ্চ করা হয়।

  • আপনি Firebase কনসোলের মাধ্যমে কোনও পরীক্ষা চালালে, দৃশ্য ফিল্ডে লুপ নম্বরের একটি তালিকা বা রেঞ্জ লিখুন।

  • আপনি gcloud CLI-এর মাধ্যমে কোনও পরীক্ষা চালালে, --scenario-numbers ফ্ল্যাগ ব্যবহার করে লুপ নম্বরের একটি তালিকা নির্দিষ্ট করুন । যেমন, --scenario-numbers=1,3,5 লুপ ১, ৩ ও ৫ রান করে।

  • আপনি C++ লিখলে এবং আপনার লুপের আচরণ পরিবর্তন করতে চাইলে, আপনার নেটিভ C++ কোডে নিম্নলিখিত অতিরিক্ত কোড পাস করুন:

    Kotlin

    val launchIntent = intent
    val scenario = launchIntent.getIntExtra("scenario", 0)

    Java

    Intent launchIntent = getIntent();
    int scenario = launchIntent.getIntExtra("scenario", 0);

    আপনি এখন ফলাফল int ভ্যালুর উপর ভিত্তি করে আপনার লুপের আচরণ পরিবর্তন করতে পারবেন।

গেম লুপ লেবেল করা

আপনি এক বা একাধিক সিনারিও লেবেল দিয়ে গেম লুপ লেবেল করলে, আপনি ও আপনার QA টিম সহজেই সম্পর্কিত গেম লুপের একটি সেট (যেমন, "সব কম্প্যাটিবিলিটি গেম লুপ") লঞ্চ করতে এবং একটি ম্যাট্রিক্সেই সেগুলি পরীক্ষা করতে পারবেন। আপনি নিজের লেবেল তৈরি করতে পারেন অথবা Test Lab-এর দেওয়া আগে থেকে তৈরি করা লেবেল ব্যবহার করতে পারেন:

  • com.google.test.loops.player_experience: গেম খেলার সময় কোনও আসল ব্যবহারকারীর অভিজ্ঞতা পুনরুৎপাদন করতে ব্যবহৃত লুপের জন্য। এইসব লুপের মাধ্যমে পরীক্ষা করার উদ্দেশ্য হল, গেম খেলার সময় একজন আসল ব্যবহারকারী যেসব সমস্যার সম্মুখীন হতে পারেন সেগুলি খুঁজে বের করা।
  • com.google.test.loops.gpu_compatibility: GPU-সম্পর্কিত সমস্যা পরীক্ষা করার জন্য ব্যবহৃত লুপ। এইসব লুপের মাধ্যমে পরীক্ষা করার উদ্দেশ্য হল, প্রোডাকশনে সঠিকভাবে রান নাও করতে পারে এমন GPU কোড এক্সিকিউট করা, যাতে হার্ডওয়্যার ও ড্রাইভার সংক্রান্ত সমস্যাগুলি সামনে আনা যায়।
  • com.google.test.loops.compatibility: I/O সমস্যা ও OpenSSL সমস্যা সহ বিভিন্ন ধরনের কম্প্যাটিবিলিটি সমস্যা পরীক্ষা করার জন্য লুপ ব্যবহার করা হয়।
  • com.google.test.loops.performance: ডিভাইসের পারফর্ম্যান্স পরীক্ষা করার জন্য লুপ ব্যবহার করা হয়। যেমন, কোনও নতুন ডিভাইস কেমন আচরণ করে তা দেখতে, কোনও গেম সবচেয়ে জটিল গ্রাফিক্স সেটিংসে চলতে পারে।

একই লেবেল সহ লুপ চালানোর জন্য আপনার অ্যাপ চালু করতে:

  • আপনি Test Loop Manager-এর মাধ্যমে কোনও পরীক্ষা চালালে:

    1. আপনার অ্যাপের মেনিফেস্টে, নিম্নলিখিত মেটা-ডেটা লাইন যোগ করুন এবং LABEL_NAME-এর পরিবর্তে আপনার পছন্দের লেবেল ব্যবহার করুন:

      <meta-data
       android:name="com.google.test.loops.LABEL_NAME"
       android:value="1,3-5" />

      android:value ফিল্ডে, আপনি ১ থেকে ১০২৪ (একটি পরীক্ষার জন্য অনুমোদিত লুপের সর্বাধিক সংখ্যা) পর্যন্ত একটি রেঞ্জ বা পূর্ণসংখ্যার সেট নির্দিষ্ট করতে পারেন যা আপনি লেবেল করতে চান এমন লুপের প্রতিনিধিত্ব করে। মনে রাখবেন, লুপের ইন্ডেক্সিং ১ থেকে শুরু হয়, ০ থেকে নয়। যেমন, android:value="1,3-5" লুপ ১, ৩, ৪ ও ৫-এ LABEL_NAME প্রয়োগ করে।

    2. Test Loop Manager অ্যাপে, লেবেল ফিল্ডে এক বা একাধিক লেবেল লিখুন।

  • আপনি Firebase কনসোলের মাধ্যমে কোনও পরীক্ষা চালালে, লেবেল ফিল্ডে এক বা একাধিক লেবেল লিখুন।

  • আপনি gcloud CLI-এর মাধ্যমে কোনও পরীক্ষা চালালে, একটি বা একাধিক সিনারিও লেবেল নির্দিষ্ট করুন --scenario-labels ফ্ল্যাগ ব্যবহার করে (যেমন, --scenario-labels=performance,gpu)।

অ্যাপ লাইসেন্সিং সংক্রান্ত সহায়তা

Test Lab Google Play-এর অফার করা অ্যাপ লাইসেন্সিং পরিষেবা ব্যবহার করে এমন অ্যাপে কাজ করে। Test Lab-এর সাথে আপনার অ্যাপ পরীক্ষা করার সময় লাইসেন্স সঠিকভাবে চেক করতে, আপনাকে অবশ্যই Play Store-এ প্রোডাকশন চ্যানেলে আপনার অ্যাপ প্রকাশ করতে হবে। Test Lab ব্যবহার করে আলফা বা বিটা চ্যানেলে আপনার অ্যাপ পরীক্ষা করতে, Test Lab-এ অ্যাপ আপলোড করার আগে লাইসেন্স চেক সরিয়ে দিন।

পরিচিত সমস্যা

Test Lab-এ গেম লুপ টেস্টে নিম্নলিখিত পরিচিত সমস্যাগুলি রয়েছে:

  • কিছু ক্র্যাশ ব্যাকট্রেস সাপোর্ট করে না। যেমন, কিছু রিলিজ বিল্ড prctl(PR_SET_DUMPABLE, 0) ব্যবহার করে debuggerd প্রসেসের আউটপুট সাপ্রেস করতে পারে। আরও জানতে, debuggerd দেখুন।
  • ফাইল অনুমতি সংক্রান্ত সমস্যার কারণে API লেভেল ১৯ বর্তমানে কাজ করে না।