Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Game Loop testlerine başlayın

Oyun uygulamaları farklı UI çerçeveleri üzerine kurulduğunda oyun testini otomatikleştirmek zor olabilir. Game Loop testleri, yerel testlerinizi Test Lab ile entegre etmenize ve seçtiğiniz cihazlarda kolayca çalıştırmanıza olanak tanır. Bir Oyun Döngüsü testi, gerçek bir oyuncunun hareketlerini simüle ederken testinizi oyun uygulamanızda çalıştırır. Bu kılavuz, bir Game Loop testinin nasıl çalıştırılacağını ve ardından Firebase konsolunda test sonuçlarınızı nasıl görüntüleyip yöneteceğinizi gösterir.

Oyun motorunuza bağlı olarak, testleri tek veya çoklu döngülerle uygulayabilirsiniz. Döngü, oyun uygulamanızda testinizin tam veya kısmi bir çalışmasıdır. Oyun döngüleri şu amaçlarla kullanılabilir:

  • Oyununuzun bir seviyesini bir son kullanıcının oynayacağı şekilde çalıştırın. Kullanıcının girişini komut dosyası haline getirebilir, kullanıcının boşta kalmasına izin verebilir veya oyununuzda mantıklıysa kullanıcıyı bir AI ile değiştirebilirsiniz (örneğin, bir yarış arabası oyun uygulamanız olduğunu ve halihazırda uygulanmış bir AI'nız olduğunu söyleyin. kolayca bir AI sürücüsünü kullanıcının girişinden sorumlu hale getirin).
  • Cihazların destekleyip desteklemediğini görmek için oyununuzu en yüksek kalite ayarında çalıştırın.
  • Teknik bir test çalıştırın (birden fazla gölgelendiriciyi derleyin, çalıştırın, çıktının beklendiği gibi olup olmadığını kontrol edin, vb.).

Oyun Döngüsü testini tek bir test cihazında, bir test cihazı setinde veya Test Laboratuvarı'nda çalıştırabilirsiniz. Ancak, fiziksel cihazlardan daha düşük grafik kare hızlarına sahip oldukları için, sanal cihazlarda Game Loop testlerinin çalıştırılmasını önermiyoruz.

Sen başlamadan önce

Bir testi uygulamak için önce uygulamanızı Game Loop testleri için yapılandırmanız gerekir.

  1. Uygulama bildiriminizde, etkinliğinize yeni bir amaç filtresi ekleyin:

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

    Bu, Test Lab'in oyununuzu belirli bir niyetle tetikleyerek başlatmasını sağlar.

  2. Kodunuzda ( onCreate yöntem bildiriminin içini öneririz), aşağıdakileri ekleyin:

    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
    }

    Kotlin + KTX

    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
    }

    Bu, etkinliğinizin onu başlatan amacı kontrol etmesine olanak tanır. İsterseniz bu kodu daha sonra da ekleyebilirsiniz (örneğin, oyun motorunuzu ilk yükledikten sonra).

  3. Önerilen: Testin sonunda şunları ekleyin:

    Java

    yourActivity.finish();

    Kotlin + KTX

    yourActivity.finish()

    Bu, Game Loop testi tamamlandığında uygulamanızı kapatır. Test, bir sonraki döngüyü başlatmak için uygulamanızın UI çerçevesine dayanır ve uygulamanızı kapatmak, testin bittiğini bildirir.

Bir Oyun Döngüsü testi oluşturun ve çalıştırın

Uygulamanızı Game Loop testleri için yapılandırdıktan sonra, hemen bir test oluşturabilir ve oyun uygulamanızda çalıştırabilirsiniz. Firebase konsolunu veya gcloud komut satırı arayüzünü (CLI) kullanarak Test Lab'de ya da Test Döngü Yöneticisi'ni kullanarak yerel bir cihazda test çalıştırmayı seçebilirsiniz.

Yerel bir cihazda çalıştırın

Test Lab's Test Loop Manager , Game Loop testlerini entegre etmenize ve yerel cihazlarınızda çalıştırmanıza yardımcı olan açık kaynaklı bir uygulamadır. Ayrıca, Kalite Güvence ekibinizin cihazlarında aynı oyun döngülerini çalıştırmasına olanak tanır.

Test Döngü Yöneticisini kullanarak yerel bir cihazda bir test çalıştırmak için:

  1. Test Döngü Yöneticisini bir telefona veya tablete indirin ve şunu çalıştırarak kurun:
    adb install testloopmanager.apk
  2. Cihazınızda, telefonunuzda veya tabletinizde Test Loop Apps uygulamasını açın. Uygulama, cihazınızda oyun döngüleri ile çalıştırılabilecek uygulamaların bir listesini görüntüler. Oyun uygulamanızı burada görmüyorsanız, niyet filtrenizin Başlamadan önce bölümünün ilk adımında açıklananla eşleştiğinden emin olun.
  3. Oyun uygulamanızı seçin, ardından çalıştırmak istediğiniz döngü sayısını seçin. Not: Bu adımda, yalnızca bir döngü yerine bir döngü alt kümesi çalıştırmayı seçebilirsiniz. Aynı anda birden çok döngü çalıştırma hakkında daha fazla bilgi için bkz. İsteğe bağlı özellikler.
  4. Testi çalıştır'ı tıklayın. Testiniz hemen çalışmaya başlar.

Test Laboratuvarında Çalıştırın

Firebase konsolunu veya gcloud CLI'yi kullanarak Test Lab'de bir Game Loop testi çalıştırabilirsiniz . Başlamadan önce, henüz yapmadıysanız, Firebase konsolunu açın ve bir proje oluşturun.

Firebase konsolunu kullanın

  1. Firebase konsolunda, sol panelden Test Lab'ı tıklayın.
  2. Çalıştır İlk Testi tıklayın (veya Çalıştır bir Testi eğer daha önce bir test tükendi proje).
  3. Test türü olarak Game Loop'u seçin ve ardından Devam'a tıklayın.
  4. Gözat'a tıklayın ve ardından uygulamanızın .apk dosyasına göz atın. Not: Bu adımda, yalnızca bir döngü yerine bir döngü alt kümesi çalıştırmayı seçebilirsiniz. Aynı anda birden çok döngü çalıştırma hakkında daha fazla bilgi için bkz. İsteğe bağlı özellikler.
  5. Devam et'i tıklayın.
  6. Uygulamanızı test etmek için kullanılacak fiziksel cihazları seçin.
  7. Testleri Başlat seçeneğine tıklayın.

Firebase konsolunu kullanmaya başlama hakkında daha fazla bilgi için Firebase konsoluyla test etmeye başlama bölümüne bakın .

Gcloud komut satırını (CLI) kullanın

  1. Henüz yapmadıysanız, Google Cloud SDK'yı indirip yükleyin .

  2. Google hesabınızı kullanarak gcloud KSA'ya giriş yapın:

    gcloud auth login

  3. Firebase projenizi gcloud'da ayarlayın; burada PROJECT_ID , Firebase projenizin kimliğidir:

    gcloud config set project PROJECT_ID
    
  4. İlk testinizi çalıştırın:

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

Gcloud CLI kullanmaya başlama hakkında daha fazla bilgi için gcloud komut satırından testi başlatma bölümüne bakın .

Opsiyonel özellikler

Test Lab, çıktı verilerini yazma yeteneği, birden çok oyun döngüsü desteği ve ilgili döngüler için etiketler dahil olmak üzere testlerinizi daha da özelleştirmenize olanak tanıyan çeşitli isteğe bağlı özellikler sunar.

Çıkış verilerini yaz

Game Loop testiniz, launchIntent.getData() yönteminde belirtilen bir dosyaya çıktı yazabilir. Bir testi çalıştırdıktan sonra, bu çıktı verilerine Firebase konsolunun Test Lab bölümünden erişebilirsiniz (bkz. Game Loop test çıktı dosyası örneği ).

Test Lab , Dosya Paylaşma bölümünde açıklanan uygulamalar arasında dosya paylaşmak için en iyi uygulamaları takip eder. Aktivitenizin amacınızın bulunduğu onCreate() yönteminde, aşağıdaki kodu çalıştırarak veri çıktı dosyanızı kontrol edebilirsiniz:

Java

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

Kotlin + KTX

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

Oyun uygulamanızın C ++ tarafından dosyaya yazmak istiyorsanız, dosya yolu yerine dosya tanımlayıcısını iletebilirsiniz:

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

Kotlin + KTX

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

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

Çıktı dosyası örneği

Firebase konsolunun Test Lab bölümünde oyun döngüsü test sonuçlarını görüntülemek için çıktı veri dosyalarını (aşağıdaki örnekte olduğu gibi biçimlendirilmiştir) kullanabilirsiniz. /.../ olarak gösterilen alanlar, bu dosyada kullanılan diğer alanların adlarıyla çakışmadıkları sürece ihtiyacınız olan herhangi bir özel alanı içerebilir:

{
  "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
}

Çoklu oyun döngüleri

Uygulamanızda birden fazla oyun döngüsü çalıştırmayı yararlı bulabilirsiniz. Döngü, oyun uygulamanızın başından sonuna kadar eksiksiz bir geçişidir. Örneğin, oyununuzda birden fazla seviye varsa, tüm seviyelerde yinelenen bir döngü yerine her seviyeyi başlatmak için bir oyun döngüsüne sahip olmak isteyebilirsiniz. Bu şekilde, uygulamanız 32. seviyede kilitlenirse, çökmeyi yeniden oluşturmak ve hata düzeltmelerini test etmek için bu oyun döngüsünü doğrudan başlatabilirsiniz.

Uygulamanızın aynı anda birden çok döngü çalıştırmasını sağlamak için:

  • Test Döngü Yöneticisi ile bir test çalıştırıyorsanız:

    1. Aşağıdaki satırı <application> öğesinin içine uygulamanızın bildirimine ekleyin:

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

      Bu başlatma amacı, hedef döngüyü bir tamsayı parametresi olarak içerir. android:value alanında, 1 ile 1024 arasında bir tamsayı belirtebilirsiniz (tek bir test için izin verilen maksimum döngü sayısı). Döngülerin 0'dan değil 1'den başlayarak indekslendiğini unutmayın.

    2. Test Döngü Yöneticisi uygulamasında, çalıştırmak istediğiniz döngüyü / döngüleri seçmenize izin veren bir seçim ekranı görünür. Birden çok döngü seçerseniz, her döngü bir önceki döngü tamamlandıktan sonra sırayla başlatılır.

  • Firebase konsoluyla bir test çalıştırıyorsanız Senaryolar alanına bir liste veya bir dizi döngü numarası girin.

  • Gcloud CLI ile bir test çalıştırıyorsanız, --scenario-numbers bayrağını kullanarak bir döngü numaraları listesi belirtin. Örneğin, --scenario-numbers=1,3,5 , 1, 3 ve 5 döngülerini çalıştırır.

  • C ++ yazıyorsanız ve döngünüzün davranışını değiştirmek istiyorsanız, aşağıdaki ekstrayı yerel C ++ kodunuza iletin:

    Java

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

    Kotlin + KTX

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

    Artık ortaya çıkan int değerine göre döngünüzün davranışını değiştirebilirsiniz.

Oyun döngülerini etiketleyin

Oyun döngülerinizi bir veya daha fazla senaryo etiketiyle etiketlediğinizde, siz ve QA ekibiniz bir dizi ilgili oyun döngüsünü (ör. "Tüm uyumluluk oyun döngüleri") kolayca başlatabilir ve bunları tek bir matriste test edebilirsiniz. Kendi etiketlerinizi oluşturabilir veya Test Lab tarafından sunulan önceden tanımlanmış etiketleri kullanabilirsiniz:

  • com.google.test.loops.player_experience : Oyunu oynarken gerçek bir kullanıcının deneyimini yeniden oluşturmak için kullanılan döngüler içindir. Bu döngülerle test etmenin amacı, gerçek bir kullanıcının oyunu oynarken karşılaşacağı sorunları bulmaktır.
  • com.google.test.loops.gpu_compatibility : GPU ile ilgili sorunları test etmek için kullanılan döngüler içindir. Bu döngülerle test etmenin amacı, donanım ve sürücülerle ilgili sorunları ortaya çıkarmak için üretimde düzgün çalışmayabilecek GPU kodunu yürütmektir.
  • com.google.test.loops.compatibility : G / Ç sorunları ve OpenSSL sorunları dahil çok çeşitli uyumluluk sorunlarını test etmek için kullanılan döngüler içindir.
  • com.google.test.loops.performance : Cihazın performansını test etmek için kullanılan döngüler içindir. Örneğin, bir oyun, yeni bir cihazın nasıl davrandığını görmek için en karmaşık grafik ayarlarında çalışabilir.

Uygulamanızın aynı etikete sahip döngüleri çalıştırmasını sağlamak için:

  • Test Döngü Yöneticisi ile bir test çalıştırıyorsanız:

    1. Uygulamanızın manifestinde, aşağıdaki meta veri satırını ekleyin ve LABEL_NAME yerine seçtiğiniz bir etiket koyun:

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

      android:value alanında, etiketlemek istediğiniz döngüleri temsil eden 1'den 1024'e kadar (tek bir test için izin verilen maksimum döngü sayısı) bir aralık veya tamsayılar kümesi belirtebilirsiniz. Döngülerin 0'dan değil 1'den başlayarak dizine eklendiğini unutmayın. Örneğin, android:value="1,3-5" LABEL_NAME 1, 3, 4 ve 5 döngülerine uygular.

    2. Test Döngü Yöneticisi uygulamasında, Etiketler alanına bir veya daha fazla etiket girin.

  • Firebase konsoluyla bir test çalıştırıyorsanız, Etiketler alanına bir veya daha fazla etiket girin.

  • Gcloud CLI ile bir test çalıştırıyorsanız, --scenario-labels işaretini kullanarak bir veya daha fazla senaryo etiketi belirtin (örneğin, --scenario-labels=performance,gpu ).

Uygulama lisanslama desteği

Test Lab, Google Play tarafından sunulan Uygulama Lisanslama hizmetini kullanan uygulamaları destekler. Uygulamanızı Test Lab ile test ederken lisanslamayı başarılı bir şekilde kontrol etmek için uygulamanızı Play Store'daki üretim kanalında yayınlamalısınız. Uygulamanızı Test Lab'ı kullanarak alfa veya beta kanalında test etmek için, uygulamanızı Test Lab'a yüklemeden önce lisans kontrolünü kaldırın.

Bilinen Sorunlar

Test Laboratuvarı'ndaki Oyun Döngüsü testleri aşağıdaki bilinen sorunlara sahiptir:

  • Bazı kilitlenmeler geri izlemeleri desteklemez. Örneğin, bazı yayın yapıları prctl(PR_SET_DUMPABLE, 0) kullanarak debuggerd işleminin çıktısını bastırabilir. Daha fazla bilgi edinmek için debuggerd bakın.
  • Dosya izin hataları nedeniyle API Seviye 19 şu anda desteklenmemektedir.