Memulai pengujian Game Loop

Pengotomatisan pengujian game bisa jadi cukup sulit jika aplikasi game dibuat di framework UI yang berbeda. Dengan pengujian Game Loop, Anda dapat mengintegrasikan pengujian native dengan Test Lab dan menjalankannya dengan mudah di perangkat pilihan Anda. Pengujian Game Loop menjalankan pengujian melalui aplikasi game Anda sambil menyimulasikan tindakan pemain nyata. Panduan ini menunjukkan cara menjalankan pengujian Game Loop, lalu melihat dan mengelola hasil pengujian di Firebase console.

Bergantung pada game engine yang digunakan, Anda dapat menerapkan pengujian dengan satu atau beberapa loop. Loop adalah seluruh atau sebagian rangkaian proses pengujian di aplikasi game. Game loop dapat digunakan untuk:

  • Menjalankan level game Anda dengan cara yang sama seperti cara pengguna akhir memainkannya. Anda dapat membuat skrip input pengguna, membiarkan pengguna tidak ada aktivitas, atau mengganti pengguna dengan AI jika sesuai dengan game Anda (mis. Anda memiliki aplikasi game mobil balap dan sudah menerapkan AI. Anda dapat dengan mudah mengatur pengemudi AI untuk memberikan input pengguna).
  • Menjalankan game Anda dengan setelan kualitas tertinggi untuk melihat apakah setelan ini didukung oleh perangkat.
  • Menjalankan uji teknis (mengompilasi beberapa shader, menjalankannya, memastikan bahwa output sesuai perkiraan, dll).

Anda dapat menjalankan pengujian Game Loop pada satu perangkat uji, serangkaian perangkat uji, atau pada Test Lab. Namun, pengujian Game Loop sebaiknya tidak dijalankan di perangkat virtual karena kecepatan frame grafisnya lebih rendah daripada perangkat fisik.

Sebelum memulai

Untuk menerapkan pengujian, Anda harus terlebih dahulu mengonfigurasi aplikasi untuk pengujian Game Loop.

  1. Dalam manifes aplikasi, tambahkan filter intent baru ke aktivitas Anda:

    <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>

    Hal ini memungkinkan Test Lab meluncurkan game Anda dengan memicunya menggunakan intent tertentu.

  2. Dalam kode Anda (sebaiknya dalam deklarasi metode onCreate), tambahkan kode berikut:

    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
    }

    Hal ini memungkinkan aktivitas Anda memeriksa intent yang meluncurkannya. Anda juga dapat menambahkan kode ini nanti jika ingin (misalnya, setelah pemuatan awal game engine).

  3. Direkomendasikan: Di akhir pengujian, tambahkan:

    Kotlin

    yourActivity.finish()

    Java

    yourActivity.finish();

    Tindakan ini akan menutup aplikasi Anda saat pengujian Game Loop selesai. Pengujian ini mengandalkan framework UI aplikasi Anda untuk memulai loop berikutnya, dan penutupan aplikasi Anda akan menandakan bahwa pengujian telah selesai.

Membuat dan menjalankan pengujian Game Loop

Setelah mengonfigurasi aplikasi untuk pengujian Game Loop, Anda dapat langsung membuat pengujian dan menjalankannya di aplikasi game. Anda dapat memilih untuk menjalankan pengujian di Test Lab menggunakan Firebase console atau antarmuka command line (CLI) gcloud, atau di perangkat lokal menggunakan Test Loop Manager.

Menjalankan pengujian di perangkat lokal

Test Loop Manager dari Test Lab adalah aplikasi open source yang membantu Anda mengintegrasikan pengujian Game Loop dan menjalankannya di perangkat lokal. Aplikasi ini juga memungkinkan tim QA Anda menjalankan game loop yang sama di perangkat mereka.

Untuk menjalankan pengujian di perangkat lokal menggunakan Test Loop Manager:

  1. Download Test Loop Manager di ponsel atau tablet, lalu instal dengan menjalankan:
    adb install testloopmanager.apk
  2. Di perangkat Anda, buka aplikasi Test Loop Apps di ponsel atau tablet. Aplikasi ini menampilkan daftar aplikasi di perangkat yang dapat dijalankan dengan game loop. Jika aplikasi game Anda tidak terlihat di sini, pastikan filter intent Anda sama dengan yang dijelaskan dalam langkah pertama di bagian Sebelum memulai.
  3. Pilih aplikasi game Anda, lalu pilih jumlah loop yang ingin dijalankan. Catatan: Pada langkah ini, Anda dapat memilih untuk menjalankan sekumpulan loop, bukan hanya satu loop. Untuk mengetahui informasi selengkapnya terkait cara menjalankan beberapa loop sekaligus, baca bagian Fitur opsional.
  4. Klik Run test. Pengujian Anda segera berjalan.

Jalankan di Test Lab

Anda dapat menjalankan pengujian Game Loop di Test Lab menggunakan Firebase console atau gcloud CLI. Sebelum memulai, jika belum melakukannya, buka Firebase console dan buat project.

Menggunakan Firebase console

  1. Di Firebase console, klik Test Lab dari panel kiri.
  2. Klik Jalankan Pengujian Pertama Anda (atau Jalankan Pengujian jika project Anda telah menjalankan pengujian sebelumnya).
  3. Pilih Game Loop sebagai jenis pengujian, lalu klik Continue.
  4. Klik Browse, lalu cari file .apk aplikasi Anda. Catatan: Pada langkah ini, Anda dapat memilih untuk menjalankan sekumpulan loop, bukan hanya satu loop. Untuk mengetahui informasi selengkapnya terkait cara menjalankan beberapa loop sekaligus, baca bagian Fitur opsional.
  5. Klik Continue.
  6. Pilih perangkat fisik yang akan digunakan untuk menguji aplikasi Anda.
  7. Klik Mulai Pengujian.

Untuk mengetahui informasi selengkapnya tentang cara memulai Firebase console, lihat Memulai pengujian dengan Firebase console.

Menggunakan antarmuka command line (CLI) gcloud

  1. Jika Anda belum melakukannya, download dan instal Google Cloud SDK.

  2. Login ke gcloud CLI menggunakan Akun Google Anda:

    gcloud auth login

  3. Tetapkan project Firebase Anda di gcloud, dengan PROJECT_ID sebagai ID project Firebase Anda:

    gcloud config set project PROJECT_ID
    
  4. Jalankan pengujian pertama:

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

Untuk mengetahui informasi selengkapnya terkait cara memulai gcloud CLI, pelajari Memulai pengujian dari command line gcloud.

Fitur opsional

Test Lab menawarkan beberapa fitur opsional yang memungkinkan Anda menyesuaikan pengujian lebih lanjut, termasuk kemampuan untuk menulis data output, dukungan untuk beberapa game loop, dan label untuk loop terkait.

Menulis data output

Pengujian Game Loop dapat menulis output ke file yang ditentukan dalam metode launchIntent.getData(). Setelah menjalankan pengujian, Anda dapat mengakses output data di bagian Test Lab pada Firebase console (lihat Contoh file output pengujian Game Loop).

Test Lab mengikuti praktik terbaik untuk berbagi file antara aplikasi yang dijelaskan dalam Berbagi File. Dalam metode onCreate() aktivitas, tempat intent Anda berada, Anda dapat memeriksa file output data dengan menjalankan kode berikut:

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());
    // ...
}

Jika ingin menulis ke file dari sisi C++ aplikasi game, Anda dapat meneruskan dalam deskriptor file, bukan jalur file:

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