Oyun Döngüsü testlerini kullanmaya başlayın

Oyun uygulamaları farklı özelliklerde geliştirildiğinde oyun testlerini otomatikleştirmek Kullanıcı arayüzü çerçeveleri. Oyun Döngüsü testleri yerel testlerinizi Test Lab'i seçerek seçtiğiniz cihazlarda kolayca çalıştırabilirsiniz. Oyun Döngüsü testi oyun uygulamanızda test ederken gerçek bir oyuncunun eylemlerini simüle edin. Bu kılavuzunda, Oyun Döngüsü testinin nasıl çalıştırılacağı, ardından testinizi nasıl görüntüleyip yöneteceğiniz gösterilir. sonuçları görebilirsiniz.

Oyun motorunuza bağlı olarak testleri bir veya daha fazla test motoruyla uygulayabilirsiniz tekrar etkinleştirebilirsiniz. Döngü, bir testin tam ya da kısmi bir şekilde optimize edebilirsiniz. Oyun döngüleri şu amaçlarla kullanılabilir:

  • Oyununuzda bir seviyeyi, son kullanıcının oynadığı gibi yönetin. Şunları yapabilirsiniz: kullanıcının girişini komut dosyası kullanarak, kullanıcının boşta kalmasını sağlayabilir veya kullanıcı için yapay zeka ile birleştirmeyi deneyin (ör. yarış arabanız varsa bir oyun uygulamasına sahip olmanız gerekir. Bir Google Hesabı'na kolayca sürücü (kullanıcının girişinden sorumludur).
  • Cihazların destekleyip desteklemediğini görmek için oyununuzu en yüksek kalite ayarında çalıştırın.
  • Teknik test yapın (birden fazla gölgelendirici derleyin, çalıştırın, çıkışının beklendiği gibi olup olmadığını kontrol edin vb.).

Oyun Döngüsü testi tek bir test cihazında, test cihazı grubunda test laboratuvarı. Ancak, sanal makinelerde Oyun Döngüsü testlerini çalıştırmanızı çünkü fiziksel cihazlara kıyasla daha düşük grafik kare hızına sahipler.

Başlamadan önce

Bir test uygulamak için önce uygulamanızı Oyun Döngüsü testlerine göre yapılandırmanız gerekir.

  1. Uygulama manifestinizde, etkinliğinize yeni bir intent 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 isteyebilirsiniz.

  2. Kodunuza (onCreate yöntem beyanının içinde öneririz) takip etmek için:

    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
    }

    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
    }

    Bu sayede etkinliğiniz, başlatan niyeti kontrol edebilir. Ayrıca transkriptinizi Bu kodu daha sonra ekleyin (örneğin, oyununuzu ilk kez yükledikten sonra) .

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

    Kotlin+KTX

    yourActivity.finish()

    Java

    yourActivity.finish();

    Bu işlem, Oyun Döngüsü testi tamamlandığında uygulamanızı kapatır. Test yöntemi, uygulamanızın kullanıcı arayüzü çerçevesine sahip olduğunuzdan, uygulamanızı kapattığınızda emin olmanız gerekir.

Oyun Döngüsü testi oluştur ve çalıştır

Uygulamanızı Oyun Döngüsü testleri için yapılandırdıktan sonra hemen bir test edip oyun uygulamanızda çalıştırın. Bir testi şurada çalıştırmayı seçebilirsiniz: Firebase konsolunu veya gcloud'u kullanarak Test Lab komut satırı arayüzünde (KSA) veya Test Döngüsü kullanılarak yerel cihazda Yönetici.

Yerel cihazda çalıştır

Test Lab'in Test Döngüsü Yöneticisi Game Loop testlerini entegre edip yerel cihazlarınızda çalıştırın. Ayrıca, Kalite Güvencesi ekibinin cihazlarında aynı oyun döngülerini çalıştırması.

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

  1. Test Döngüsü Yöneticisi'ni indirin uygulamayı yüklemek için aşağıdaki adımları uygulayın:
    adb install testloopmanager.apk
  2. Cihazınızda, telefonunuzda Test Loop Apps uygulamasını açın veya tablete yerleştiriyoruz. Uygulama, cihazınızda bulunan ve şu özelliklere sahip uygulamaların bir listesini görüntüler: çalıştırılabilir. Oyun uygulamanızı burada göremiyorsanız Amaç filtreniz, anahtarın ilk adımında belirtilenle Başlamadan önce bölümü.
  3. Oyun uygulamanızı, ardından çalıştırmak istediğiniz döngü sayısını seçin. Not: Bu adımda, yalnızca rastgele bir döngü oluşturmak yerine döngülerin bir alt kümesini çalıştırmayı bir döngü oluşturabilirsiniz. Daha fazla bilgi için aynı anda birden fazla döngü çalıştırmakla ilgili daha fazla bilgi için İsteğe bağlı özellikler bölümüne bakın.
  4. Testi çalıştır'ı tıklayın. Testiniz hemen çalışmaya başlar.
ziyaret edin.

Test Lab'de çalıştır

Test Lab'de bir Oyun Döngüsü testi çalıştırmak için Firebase konsolu veya gcloud CLI. Sizden önce Henüz yapmadıysanız Firebase konsolunu kullanarak bir proje oluşturun.

Firebase konsolunu kullanma

  1. Firebase konsolunda sol panelden Test Lab'i tıklayın.
  2. Run your First Test (İlk Testinizi Çalıştırın) seçeneğini (veya projenizde projenizde bir test yaptık.
  3. Test türü olarak Oyun Döngüsü'nü seçip Devam'ı tıklayın.
  4. Göz at'ı tıklayın, ardından uygulamanızın .apk dosyasına göz atın. Not: Bu adımda, yalnızca rastgele bir döngü oluşturmak yerine döngülerin bir alt kümesini çalıştırmayı bir döngü oluşturabilirsiniz. Daha fazla bilgi için aynı anda birden fazla döngü çalıştırmayı İsteğe bağlı özellikler.
  5. Devam'ı tıklayın.
  6. Uygulamanızı test etmek için kullanılacak fiziksel cihazları seçin.
  7. Testleri Başlat'ı tıklayın.

Firebase konsolunu kullanmaya başlama hakkında daha fazla bilgi için Firebase konsoluyla test etmeye başlayın.

gcloud komut satırını (KSA) kullanma

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

  2. Google Hesabınızı kullanarak gcloud KSA'da oturum açın:

    gcloud auth login

  3. Firebase projenizi, PROJECT_ID öğesinin bulunduğu gcloud'da ayarlayın Firebase projenizin kimliği:

    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 KSA'yı kullanmaya başlama hakkında daha fazla bilgi için bkz. gcloud komut satırından test etmeye başlayın.

İsteğe bağlı özellikler

Test Lab, ölçümünüzü daha da özelleştirmenize olanak tanıyan isteğe bağlı çeşitli özellikler sunar. çıkış verilerini yazma yeteneği, birden fazla oyun için destek dahil testler döngüler ve ilgili döngüler için etiketler.

Çıkış verilerini yazma

Oyun Döngüsü testiniz launchIntent.getData() yöntemini çağırın. Bir test çalıştırdıktan sonra Firebase konsolunun Test Lab bölümünde, çıkış verileri Oyun Döngüsü testi çıkış dosyası örneği).

Test Lab, uygulamalar arasında dosya paylaşımına ilişkin en iyi uygulamaları aşağıda bulabilirsiniz: Dosya Paylaşma. Etkinliğinizin onCreate() yönteminde (amacınızın bulunduğu yer) aşağıdaki kodu çalıştırarak veri çıkış dosyanızı kontrol edebilirsiniz:

Kotlin+KTX

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

Dosyaya oyun uygulamanızın C++ tarafından yazmak istiyorsanız dosya yolu yerine dosya açıklayıcısını iletin:

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

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

Çıkış dosyası örneği

Oyunu görüntülemek için çıkış veri dosyalarını (aşağıdaki örnek gibi biçimlendirilmiştir) kullanabilirsiniz. Firebase konsolunun Test Lab bölümünde döngü test sonuçlarını görürsünüz. /.../ olarak gösterilen alanlar, yalnızca bu dosyada kullanılan diğer alanların adlarıyla çakışmazlar:

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

Birden fazla oyun döngüsü

Uygulamanızda birden fazla oyun döngüsü çalıştırmak faydalı olabilir. Döngü, başından sonuna kadar tam oynanmasını sağlayabilirsiniz. Örneğin, Oyununuzda birden fazla seviye varsa bu seviyeyi tamamlamak için tüm seviyeleri yineleyen bir döngü yerine her seviyeyi başlatın. Böylece, uygulamanız 32. seviyede kilitlenirse doğrudan oyunu başlatabilirsiniz döngüsünü uygulayın.

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

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

    1. Aşağıdaki satırı uygulamanızın manifest dosyasına, <application> öğe:

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

      Bu başlatma amacı, hedef döngüyü tam sayı parametresi olarak içerir. İçinde android:value alanında, 1 - 1024 arasında bir tam sayı ( bir test için izin verilen maksimum döngü sayısı) ekleyebilirsiniz. Not döngülerin 0'dan değil 1'den başlayarak dizine eklenmesini sağlar.

    2. Test Döngüsü Yöneticisi uygulamasında çalıştırmak istediğiniz döngüleri seçmenize olanak tanır. Birden fazla her döngü, bir önceki döngüden sonra sırayla başlatılır. gerekir.

  • Firebase konsoluyla test çalıştırıyorsanız bir Senaryolar alanındaki döngü sayı aralığını seçin.

  • gcloud KSA ile test çalıştırıyorsanız döngü numaraları listesi belirtin --scenario-numbers işaretini kullanabilirsiniz. Örneğin, --scenario-numbers=1,3,5 1, 3 ve 5. döngüleri çalıştırır.

  • C++ yazıyor ve döngünüzün davranışını değiştirmek istiyorsanız yerel C++ kodunuza ekleme işlemini tamamlayın:

    Kotlin+KTX

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

    Java

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

    Artık döngünüzün davranışını, elde edilen int değerine göre değiştirebilirsiniz. değer.

Etiket oyunu döngüleri

Oyun döngülerinizi bir veya daha fazla senaryo etiketiyle etiketlediğinizde bir dizi ilgili oyun döngüsünü (ör. "tüm uyumluluk oyun döngüleri") oluşturur ve bunları tek bir matriste test edebilirsiniz. Kendi etiketlerinizi oluşturabilir veya test Lab tarafından sunulan önceden tanımlanmış etiketleri kullanın:

  • com.google.test.loops.player_experience: Şu işlem için kullanılan döngüler: Oyun oynarken gerçek bir kullanıcı deneyimini yeniden üretmek. Amacı bu döngülerle test, gerçek bir kullanıcının çalışırken karşılaşacağı yardımcı oluyorum.
  • com.google.test.loops.gpu_compatibility: Test amacıyla kullanılan döngüler için GPU ile ilgili sorunlar. Bu döngülerle testin amacı, ve üretimde düzgün çalışmayabilecek yeni kodların çalıştırılması, donanım ve sürücüler.
  • com.google.test.loops.compatibility: Test amacıyla kullanılan döngüler G/Ç sorunları ve OpenSSL dahil olmak üzere geniş bir uyumluluk sorunu yelpazesi sorunları.
  • com.google.test.loops.performance: cihazın performansını görebilirsiniz. Örneğin, bir oyun en karmaşık grafik ayarlarını kullanabilirsiniz.

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

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

    1. Uygulamanızın manifest dosyasına aşağıdaki meta veri satırını ekleyin ve İstediğiniz etiketle LABEL_NAME:

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

      android:value alanında bir aralık veya bir tam sayı grubu belirtebilirsiniz. (tek bir test için izin verilen maksimum döngü sayısı) arasında bir dönüşüm oranına döngüleri temsil eder. Döngülerin dizine 1'den başlar, 0'a değil. Örneğin, android:value="1,3-5" geçerlidir LABEL_NAME 1, 3, 4 ve 5'i döngüye alır.

    2. Test Döngüsü Yöneticisi uygulamasındaki Etiketler bölümüne bir veya daha fazla etiket girin. girin.

  • Firebase konsoluyla test yapıyorsanız bir veya daha fazla değer girin etiketleri Etiketler alanına girin.

  • gcloud KSA ile test çalıştırıyorsanız bir tane belirtin veya daha fazla senaryo etiketi oluşturmak için --scenario-labels işareti (ör. --scenario-labels=performance,gpu).

Uygulama lisanslama desteği

Test Lab, Uygulama Lisansları Google Play tarafından sunulan diğer hizmet. Test sırasında lisanslamayı başarıyla kontrol etmek için uygulamanızı test Lab ile üretim kanalına yayınlamanız gerekir. Play Store'da bulabilirsiniz. Uygulamanızı alfa veya beta kanalında test etmek için Test Lab, uygulamanızı şuraya yüklemeden önce lisans kontrolünü kaldırın Test Lab.

Bilinen sorunlar

Test Lab'deki Oyun Döngüsü testlerinde aşağıdaki bilinen sorunlar bulunur:

  • Bazı kilitlenmeler, geri izlemeleri desteklemez. Örneğin, bazı sürüm derlemeleri debuggerd işleminin çıkışını aşağıdakileri kullanarak bastır: prctl(PR_SET_DUMPABLE, 0). Daha fazla bilgi edinmek için bkz. debuggerd.
  • API Düzeyi 19, dosya izni hataları nedeniyle şu anda desteklenmiyor.