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

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

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

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

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

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

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

উদাহরণ

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

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

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

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

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

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

শুরু করার আগে

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

  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();

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

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

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

লোকাল ডিভাইসে রান করুন

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

টেস্ট লুপ ম্যানেজার ব্যবহার করে লোকাল ডিভাইসে টেস্ট রান করতে:

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

Test Lab-এ রান করুন

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

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

  1. Firebase কনসোলে, বাঁদিকের প্যানেল থেকে Test Lab বিকল্পে ক্লিক করুন।
  2. আপনার প্রথম টেস্ট রান করুন (অথবা আপনার প্রোজেক্টে আগে টেস্ট রান করা হয়ে থাকলে টেস্ট রান করুন) বিকল্পে ক্লিক করুন।
  3. পরীক্ষার ধরন হিসেবে গেম লুপ বেছে নিন এবং তারপর চালিয়ে যান বিকল্পে ক্লিক করুন।
  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
}

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

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

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

  • আপনি টেস্ট লুপ ম্যানেজারের মাধ্যমে পরীক্ষা চালালে:

    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: ডিভাইসের পারফর্ম্যান্স পরীক্ষা করার জন্য লুপ ব্যবহার করা হয়। যেমন, নতুন ডিভাইস কেমন কাজ করে তা দেখতে, কোনও গেম সবচেয়ে জটিল গ্রাফিক্স সেটিংসে চালানো হতে পারে।

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

  • আপনি টেস্ট লুপ ম্যানেজারের মাধ্যমে পরীক্ষা চালালে:

    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. টেস্ট লুপ ম্যানেজার অ্যাপে, লেবেল ফিল্ডে এক বা একাধিক লেবেল লিখুন।

  • আপনি 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 লেভেল ১৯ বর্তমানে কাজ করে না।