הפעל מבחן Game Loop

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

אודות מבחני Game Loop

מהו מבחן Game Loop?

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

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

שלב 1: ערכת האתר המותאמת אישית של מעבדת בדיקות רשם

  1. ב- Xcode, בחר יעד פרויקט.

  2. לחץ על הכרטיסייה מידע, ואז להוסיף סוג חדש של כתובות אתרים.

  3. בתחום סכימות ה- URL, הזן firebase-game-loop . אתה יכול גם להירשם לתוכנית אתר מותאמת אישית על-ידי הוספתו של הפרויקט שלך Info.plist בכל מקום בקובץ התצורה בתוך <dict> תג:

    <key>CFBundleURLTypes</key>
     <array>
         <dict>
             <key>CFBundleURLName</key>
             <string></string>
             <key>CFBundleTypeRole</key>
             <string>Editor</string>
             <key>CFBundleURLSchemes</key>
             <array>
                 <string>firebase-game-loop</string>
             </array>
         </dict>
     </array>
    

האפליקציה שלך מוגדרת כעת להפעלת בדיקה באמצעות Test Lab.

שלב 2: לחלופין להגדיר את האפליקציה שלך

הפעל מספר לולאות

אם אתה מתכוון להריץ לולאות מרובות (aka תרחישים) בבדיקה שלך, עליך לציין אילו לולאות ברצונך להריץ באפליקציה שלך בזמן ההשקה.

בשנת delegate של היישום שלך, לעקוף את application(_:open:options:) שיטה:

מָהִיר

func application(_app: UIApplication,
                 open url: URL
                 options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    let components = URLComponents(url: url, resolvingAgainstBaseURL: true)!
    if components.scheme == "firebase-game-loop" {
        // ...Enter Game Loop Test logic to override application(_:open:options:).
    }
    return true
}

Objective-C

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary &lt;UIApplicationOpenURLOptionsKey, id&gt; *)options {
  if ([url.scheme isEqualToString:(@"firebase-game-loop")]) {
      // ...Enter Game Loop Test logic to override application(_:open:options:).
  }
}

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

מָהִיר

if components.scheme == "firebase-game-loop" {
    // Iterate over all parameters and find the one with the key "scenario".
    let scenarioNum = Int(components.queryItems!.first(where: { $0.name == "scenario" })!.value!)!
    // ...Write logic specific to the current loop (scenarioNum).
}

Objective-C

if ([url.scheme isEqualToString:(@"firebase-game-loop")]) {
    // Launch the app as part of a game loop.
    NSURLComponents *components = [NSURLComponents componentsWithURL:url
                                             resolvingAgainstBaseURL:YES];
    for (NSURLQueryItem *item in [components queryItems]) {
        if ([item.name isEqualToString:@"scenario"]) {
            NSInteger scenarioNum = [item.value integerValue];
            // ...Write logic specific to the current loop (scenarioNum).
        }
    }
}

לסיים בדיקה מוקדם

כברירת מחדל, בדיקת Game Loop ממשיכה לפעול עד שהיא מגיעה לפסק זמן של חמש דקות, גם כאשר כל הלולאות בוצעו. עם הגעת הזמן הקצוב, הבדיקה מסתיימת ומבטלת כל לולאות ממתינות. אתה יכול לזרז הבדיקה שלך או לסיים אותו מוקדם על ידי התקשרות ערכת האתר המותאמת אישית של מבחן מעבדת firebase-game-loop-complete ב AppDelegate של האפליקציה שלך. לדוגמה:

מָהִיר

/// End the loop by calling our custom url scheme.
func finishLoop() {
    let url = URL(string: "firebase-game-loop-complete://")!
    UIApplication.shared.open(url)
}

Objective-C

- (void)finishLoop {
  UIApplication *app = [UIApplication sharedApplication];
  [app openURL:[NSURL URLWithString:@"firebase-game-loop-complete://"]
      options:@{}
completionHandler:^(BOOL success) {}];
}

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

כתוב תוצאות בדיקה מותאמות אישית

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

  • כל קבצי התוצאות מועלים ללא קשר לסוג הקובץ, הגודל או הכמות.

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

כדי להגדיר את הבדיקה לכתיבת תוצאות בדיקה מותאמות אישית:

  1. בשינה באפליקצית Documents הספרייה, ליצור ספרייה בשם GameLoopResults .

  2. מכל מקום בקוד האפליקציה שלך (למשל, נציג האפליקציה שלך), הוסף את הדברים הבאים:

    מָהִיר

    /// Write to a results file.
    func writeResults() {
      let text = "Greetings from game loops!"
      let fileName = "results.txt"
      let fileManager = FileManager.default
      do {
    
      let docs = try fileManager.url(for: .documentDirectory,
                                     in: .userDomainMask,
                                     appropriateFor: nil,
                                     create: true)
      let resultsDir = docs.appendingPathComponent("GameLoopResults")
      try fileManager.createDirectory(
          at: resultsDir,
          withIntermediateDirectories: true,
          attributes: nil)
      let fileURL = resultsDir.appendingPathComponent(fileName)
      try text.write(to: fileURL, atomically: false, encoding: .utf8)
      } catch {
        // ...Handle error writing to file.
      }
    }
    

    Objective-C

    /// Write to a results file.
    - (void)writeResults:(NSString *)message {
        // Locate and create the results directory (if it doesn't exist already).
        NSFileManager *manager = [NSFileManager defaultManager];
        NSURL* url = [[manager URLsForDirectory:NSDocumentDirectory
                                      inDomains:NSUserDomainMask] lastObject];
        NSURL* resultsDir = [url URLByAppendingPathComponent:@"GameLoopResults"
                                                 isDirectory:YES];
        [manager createDirectoryAtURL:resultsDir
          withIntermediateDirectories:NO
                           attributes:nil
                                error:nil];
    
        // Write the result message to a text file.
        NSURL* resultFile = [resultsDir URLByAppendingPathComponent:@"result.txt"];
        if ([manager fileExistsAtPath:[resultFile path]]) {
            // Append to the existing file
            NSFileHandle *handle = [NSFileHandle fileHandleForWritingToURL:resultFile
                                                                     error:nil];
            [handle seekToEndOfFile];
            [handle writeData:[message dataUsingEncoding:NSUTF8StringEncoding]];
            [handle closeFile];
        } else {
            // Create and write to the file.
            [message writeToURL:resultFile
                     atomically:NO
                       encoding:NSUTF8StringEncoding error:nil];
        }
    }
    

שלב 3: חבילת האפליקציות שלך להעלאה

לבסוף, צור קובץ IPA לאפליקציה שלך (יהיה עליך לאתר אותו מאוחר יותר).

  1. ב- Xcode, בחר פרופיל הקצאה לאפליקציית היעד.

  2. מתוך התפריט הנפתח שמופיע, לחץ מוצרים> ארכיון. בחר את הארכיון האחרון, ולאחר מכן לחץ על הפצת אפליקציה.

  3. בחלון שמופיע, לחץ פיתוח> הבא.

  4. אופציונלי: כדי לקבל לבנות מהר, בטל את להשתקם אפשרות Bitcode, ולאחר מכן לחץ על הבא. Test Lab אינו דורש דילול או בנייה מחדש של האפליקציה שלך לצורך הפעלת בדיקה, כך שתוכל להשבית את האפשרות הזו בבטחה.

  5. לחץ על ייצא, ואז להיכנס לספרייה שבה אתה רוצה להוריד קובץ IPA של האפליקציה שלך.

שלב 4: מפעיל את הבדיקה באופן מקומי

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

xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://
  • אתה יכול למצוא UDID של סימולטור שלך על ידי הפעלת instruments -s devices פקוד.

  • אם יש רק סימולטור אחד פועל, הזן את המחרוזת המיוחדת "booted" במקום SIMULATOR_UDID .

אם הבדיקה שלך מכילה לולאות מרובות, תוכל לפרט לאיזו לולאה שברצונך להפעיל על ידי העברת מספר הלולאה על scenario הדגל. שים לב שאתה יכול להריץ לולאה אחת בכל פעם בעת הפעלת הבדיקה שלך באופן מקומי. לדוגמה, אם ברצונך להריץ לולאות 1, 2 ו -5, עליך להריץ פקודה נפרדת עבור כל לולאה:

xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://?scenario=1
xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://?scenario=2
xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://?scenario=5

השלב הבא

מפעיל את הבדיקה באמצעות קונסולת Firebase או CLI gcloud .