התחל בעבודה עם מבחני Game Loop

זה יכול להיות קשה לבצע בדיקות משחק אוטומטיות כאשר אפליקציות משחק בנויות על מסגרות ממשק משתמש שונות. בדיקות Game Loop מאפשרות לך לשלב את הבדיקות המקומיות שלך עם Test Lab ולהפעיל אותן בקלות במכשירים שבחרת. מבחן Game Loop מפעיל את המבחן שלך באמצעות אפליקציית הגיימינג תוך הדמיה של פעולות של שחקן אמיתי. מדריך זה מראה לך כיצד להריץ בדיקת Game Loop ולאחר מכן להציג ולנהל את תוצאות הבדיקה שלך במסוף Firebase.

בהתאם מנוע המשחק שלך, אתה יכול ליישם בדיקות עם יחיד או לולאות מרובות . לולאה היא הפעלה מלאה או חלקית של הבדיקה שלך באפליקציית המשחקים שלך. ניתן להשתמש בלולאות משחק ל:

  • הפעל רמה של המשחק שלך באותו אופן שבו משתמש קצה ישחק אותו. אתה יכול לתקן את קלט המשתמש, לתת למשתמש להיות סרק או להחליף את המשתמש ב- AI אם זה הגיוני במשחק שלך (למשל, אמור שיש לך אפליקציית משחקי מכוניות מירוץ וכבר יישמת AI. אתה יכול להעמיד בקלות נהג AI לאחראי על קלט המשתמש).
  • הפעל את המשחק שלך בהגדרה האיכותית ביותר כדי לראות אם מכשירים תומכים בו.
  • הפעל בדיקה טכנית (ערוך מספר צללים, בצע אותם, בדוק שהפלט הוא כצפוי וכו ').

תוכל להריץ בדיקת Game Loop במכשיר בדיקה יחיד, קבוצה של מכשירי בדיקה או במעבדת Test. עם זאת, אנו לא ממליצים להריץ בדיקות Game Loop במכשירים וירטואליים מכיוון שיש להם קצבי מסגרות גרפיים נמוכים יותר מאשר מכשירים פיזיים.

לפני שאתה מתחיל

כדי ליישם בדיקה, תחילה עליך להגדיר את האפליקציה שלך למבחני 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 הכרזת השיטה), להוסיף את הדברים הבאים:

    ג'אווה

    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
    }

    קוטלין+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
    }

    זה מאפשר לפעילות שלך לבדוק את הכוונה שמשיקה אותה. תוכל גם להוסיף קוד זה מאוחר יותר אם אתה מעדיף (למשל, לאחר טעינת מנוע המשחקים שלך לראשונה).

  3. מומלץ: בתום הבדיקה הוסיפו:

    ג'אווה

    yourActivity.finish();

    קוטלין+KTX

    yourActivity.finish()

    פעולה זו סוגרת את האפליקציה שלך לאחר השלמת בדיקת לולאת המשחק. הבדיקה מסתמכת על מסגרת ממשק המשתמש של האפליקציה שלך כדי להתחיל את הלולאה הבאה, וסגירת האפליקציה שלך אומרת לה שהבדיקה הסתיימה.

צור והפעל מבחן Game Loop

לאחר שתגדיר את האפליקציה שלך למבחני Game Loop, תוכל ליצור מיידית בדיקה ולהריץ אותה באפליקציית המשחקים שלך. אתה יכול לבחור להפעיל מבחן מעבדת מבחן או באמצעות קונסולת Firebase או ממשק שורת פקודת gcloud (CLI) , או על מכשיר מקומי באמצעות מנהל Loop המבחן .

הפעל במכשיר מקומי

מנהל Loop המבחן של מבחן המעבדה הוא אפליקצית קוד פתוח המסייע לך לשלב בדיקות משחק Loop ולהפעיל אותם בהתקנים המקומיים. זה גם מאפשר לצוות אבטחת האיכות שלך להריץ את אותן לולאות המשחק במכשירים שלהם.

כדי להריץ בדיקה במכשיר מקומי באמצעות מנהל לולאת הבדיקה:

  1. הורד את מנהל Loop מבחן בטלפון או טאבלט ולהתקין אותה על ידי הרצת:
    adb install testloopmanager.apk
  2. במכשיר שלך, פתח את היישום Apps מבחן Loop במכשיר הטלפון או הטאבלט שלכם. האפליקציה מציגה רשימה של אפליקציות במכשיר שלך שניתן להפעיל באמצעות לולאות משחק. אם אינך רואה לאפליקציית משחק שלך כאן, לוודא סינון כוונה שלך תואמת לזו המתוארת בשלב הראשון של לפני שתתחיל סעיף .
  3. בחר את אפליקציית המשחק שלך ולאחר מכן בחר את מספר הלולאות שברצונך להפעיל. הערה: בשלב זה, תוכל לבחור להפעיל קבוצת משנה של לולאות במקום לולאה אחת בלבד. לקבלת מידע נוסף על ריצת לולאות בבת אחת, לראות תכונות אופציונליות.
  4. לחץ על הפעל בדיקה. הבדיקה שלך מתחילה לפעול באופן מיידי.

הפעל במעבדת הבדיקות

אתה יכול להריץ בדיקת Loop משחק ב Test Lab או באמצעות Firebase הקונסולה או CLI gcloud. לפני שתתחיל, אם לא עשית זאת עדיין, פתח את קונסולת Firebase וליצור פרויקט.

השתמש במסוף Firebase

  1. במסוף Firebase, לחץ Test Lab מהלוח השמאלי.
  2. לחץ מבחן ההפעלה הראשון שלך (או להפעיל מבחן אם הפרויקט שלך בעבר להפעיל מבחן).
  3. בחר משחק Loop כסוג המבחן, ולאחר מכן לחץ על המשך.
  4. לחץ על עיון, ולאחר מכן דפדף אל היישום שלך .apk קובץ. הערה: בשלב זה, תוכל לבחור להפעיל קבוצת משנה של לולאות במקום לולאה אחת בלבד. לקבלת מידע נוסף על ריצת לולאות בבת אחת, לראות תכונות אופציונליות.
  5. לחץ על המשך.
  6. בחר את ההתקנים הפיזיים לשימוש כדי לבדוק את האפליקציה שלך.
  7. לחץ מבחני התחלה.

לקבלת מידע נוסף על התחלת עבודה עם קונסולת Firebase, לראות להתחיל בבדיקות עם קונסולת Firebase.

השתמש בשורת הפקודה gcloud (CLI)

  1. אם לא עשית זאת עדיין, הורד והתקן את Google Cloud SDK.

  2. היכנס ל- CLI של gcloud באמצעות חשבון Google שלך:

    gcloud auth login

  3. גדר פרויקט Firebase שלך gcloud, שבו 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
    

לקבלת מידע נוסף על התחלת העבודה עם CLI gcloud, לראות להתחיל בבדיקות משורת הפקודה gcloud.

תכונות אופציונליות

Test Lab מציעה מספר תכונות אופציונאליות המאפשרות לך להתאים אישית יותר את הבדיקות שלך, כולל היכולת לכתוב נתוני פלט, תמיכה במספר לולאות משחק ותוויות ללולאות קשורות.

כתוב נתוני פלט

Loop המשחק שלך מבחן יכול לכתוב פלט לקובץ שצוין launchIntent.getData() השיטה. לאחר הפעלת מבחן, אתה יכול לגשת לנתוני פלט זה בסעיף Test Lab של קונסולת Firebase (ראה למשל קובץ פלט בדיקת המשחק Loop ).

Test Lab בהתאם לשיטות עבודה מומלצות על שיתוף קובץ בין האפליקציות מתואר שיתוף קובץ . בשנת הפעילות שלך onCreate() שיטה, שבה כוונתכם ממוקמת, אתה יכול לבדוק את הקובץ פלט הנתונים שלך על ידי הפעלת הקוד הבא:

ג'אווה

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

קוטלין+KTX

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

אם אתה רוצה לכתוב לקובץ מהצד C ++ של אפליקציית המשחק שלך, תוכל להעביר את מתאר הקבצים במקום את נתיב הקובץ:

ג'אווה

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

קוטלין+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);
}

דוגמא לקובץ פלט

אתה יכול להשתמש קבצי נתונים הפלט (מעוצבים כמו בדוגמה הבאה) תוצאות בדיקת תצוגת משחק לולאה בחלק Test Lab של קונסולת Firebase. תחומי המוצג /.../ יכול להכיל שדות מותאמים אישית שאתה צריך, כל עוד הם אינם מתנגשים עם שמות של שדות אחרים המשמשים בקובץ זה:

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

לולאות משחק מרובות

אולי יהיה לך שימושי להריץ לולאות משחק מרובות באפליקציה שלך. לולאה היא הפעלה מלאה של אפליקציית המשחק שלך מההתחלה ועד הסוף. לדוגמה, אם יש לך מספר רמות במשחק שלך, ייתכן שתרצה לולאת משחק אחת שתפעיל כל רמה במקום שיהיה לולאה אחת שחוזרת על כולן. כך, אם האפליקציה שלך קורסת ברמה 32, תוכל להפעיל את לולאת המשחק הזו ישירות כדי לשחזר את הקריסה ולבדוק תיקוני באגים.

כדי לאפשר לאפליקציה שלך להריץ מספר לולאות בבת אחת:

  • אם אתה מפעיל בדיקה באמצעות מנהל לולאת הבדיקה:

    1. להוסיף את השורה הבאה למניפסט של האפליקציה, בתוך <application> אלמנט:

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

      כוונת השקה זו מכילה את לולאת היעד כפרמטר שלם. ב android:value השדה, אתה יכול לציין שלם בין 1 כדי 1024 (המספר המרבי של לולאות המותרות למבחן יחיד). שים לב כי לולאות מאונדקסות החל מ -1, לא 0.

    2. באפליקציית Test Loop Manager, מופיע מסך בחירה המאפשר לך לבחור אילו לולאות ברצונך להריץ. אם תבחר לולאות מרובות, כל לולאה מופעלת ברצף לאחר השלמת הלולאה הקודמת.

  • אם אתה מפעיל מבחן עם קונסולת Firebase, להיכנס לרשימה או טווח של מספרי לולאה בתחום התרחישים.

  • אם אתה מפעיל מבחן עם CLI gcloud, לציין רשימה של מספרי לולאה ידי שימוש --scenario-numbers הדגל. לדוגמה, --scenario-numbers=1,3,5 ריצות לולאות 1, 3, ו 5.

  • אם אתה כותב C ++ ורוצה לשנות את אופן הפעולה של הלולאה שלך, העבר את התוספת הבאה לקוד C ++ המקומי שלך:

    ג'אווה

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

    קוטלין+KTX

    val launchIntent = intent
    val 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 השדה, אתה יכול לציין טווח או קבוצה של מספרי שלמים מן 1 ל 1024 (המספר המרבי של לולאות מותרות למבחן יחיד) המייצגות את הלולאות אתה רוצה תווית. הערה כי לולאות באינדקס החל 1, לא 0. לדוגמה, android:value="1,3-5" חל LABEL_NAME כדי לולאות 1, 3, 4, ו 5.

    2. באפליקציה של ניהול Loop מבחן, זן תווית אחת או יותר בתחום התוויות.

  • אם אתה מפעיל מבחן עם קונסולת Firebase, זן תווית אחת או יותר בתחום התוויות.

  • אם אתה מפעיל מבחן עם CLI gcloud, ציין תוויות תרחיש אחד או יותר על ידי שימוש --scenario-labels דגל (למשל, --scenario-labels=performance,gpu ).

תמיכה ברישוי אפליקציות

Test Lab תומך אפליקציות המשתמשות רישוי App השירות המוצע על ידי Google Play. כדי לבדוק את הרישוי בהצלחה בעת בדיקת האפליקציה שלך באמצעות Test Lab, עליך לפרסם את האפליקציה שלך לערוץ הייצור בחנות Play. כדי לבדוק את האפליקציה שלך בערוץ אלפא או בטא באמצעות Test Lab, הסר את בדיקת הרישוי לפני שתעלה את האפליקציה שלך ל- Test Lab.

בעיות ידועות

בדיקות Game Loop במעבדת Test מכילות את הבעיות הידועות הבאות:

  • חלק מההתרסקויות אינן תומכות במגמות אחוריות. לדוגמה, כמה שחרור בונה עשויה לדכא את הפלט של debuggerd התהליך באמצעות prctl(PR_SET_DUMPABLE, 0) . כדי ללמוד עוד, ראה debuggerd .
  • כרגע API 19 אינו נתמך עקב שגיאות הרשאת קבצים.