Google is committed to advancing racial equity for Black communities. See how.
דף זה תורגם על ידי Cloud Translation API.
Switch to English

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

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

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

מה זה מבחן לולאת משחק?

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

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

  • הרץ את המשחק שלך בהגדרה האיכותית ביותר כדי לגלות אילו מכשירים יכולים לתמוך בו.

  • יש לבצע בדיקה טכנית, כמו קומפילציה של מספר מוצללים, ביצועם ובדיקה שהפלט כצפוי.

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

ראשית, עליך לרשום את ערכת ה- URL המותאמת אישית של Lab Firebase Test Lab באפליקציה שלך:

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

  2. לחץ על הכרטיסייה מידע והוסף סוג URL חדש.

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

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

שלב 2 (לא חובה): קבע את התצורה של האפליקציה שלך להפעלת לולאות מרובות

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

בציר האפליקציה שלך, עקוף את 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
}

מטרה-ג

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

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

מָהִיר

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

מטרה-ג

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

שלב 3: צור והפעל מבחן

לאחר שתירשם את ערכת ה- URL של ה- Lab Lab המותאמת אישית, תוכל להריץ את הבדיקה שלך במסוף Firebase או באמצעות ה- gcloud beta CLI . אם עדיין לא עשית זאת, צור קובץ IPA ליישום שלך (תצטרך לאתר אותו בהמשך).

בצע בדיקה במסוף Firebase

  1. אם עדיין לא עשית זאת, פתח את קונסולת Firebase וצור פרוייקט.

  2. בדף מעבדת הבדיקה במסוף האש, לחץ על הפעל את הבדיקה הראשונה שלך> הפעל לולאת משחק iOS .

  3. בקטע העלאת אפליקציה , לחץ על עיון ובחר בקובץ ה- IPA של האפליקציה שלך (אם עדיין לא, צור קובץ IPA ליישום שלך).

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

    לדוגמה, כשאתה מזין "1-3, 5", מעבדת הבדיקה מפעילה לולאות 1, 2, 3 ו- 5. כברירת מחדל (אם לא תזין שום דבר בשדה תרחישים ), מעבדת הבדיקה מפעילה רק לולאה 1.

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

יש לבצע בדיקה עם ה- gcloud beta CLI

  1. אם עדיין לא עשית זאת, קבע את התצורה של סביבת ה- SDK המקומית של gcloud, ודא להתקין את רכיב הבטא של gcloud .

  2. הפעל את gcloud beta firebase test ios run ולהשתמש בדגלים הבאים כדי להגדיר את הריצה:

דגלים למבחני משחק לולאה
--type

חובה : מציין את סוג בדיקת iOS שברצונך להריץ. אתה יכול להזין סוגי בדיקות xctest (ברירת מחדל) או game-loop .

--app

חובה : נתיב מוחלט (GCS או מערכת קבצים) לקובץ ה- IPA של האפליקציה שלך. דגל זה תקף רק בעת הפעלת מבחני משחק לולאה.

--scenario-numbers

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

לדוגמה, --scenario-numbers=1-3,5 מפעיל לולאות 1, 2, 3 ו- 5.

--device-model

המכשיר הפיזי עליו תרצו להפעיל את הבדיקה שלכם (גלה באילו מכשירים זמינים תוכלו להשתמש).

--timeout

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

לדוגמה:

  • --timeout=200 מאלץ את המבחן שלך להסתיים כשהוא פועל עד 200 שניות.
  • --timeout=1h מכריח את המבחן שלך להסתיים כשהוא פועל עד שעה.

לדוגמה, הפקודה הבאה מריצה מבחן Game Loop שמבצע לולאות 1, 4, 6, 7 ו- 8 באייפון 8 פלוס:

gcloud beta firebase test ios run
 --type game-loop --app path/to/my/App.ipa --scenario-numbers 1,4,6-8
 --device-model=iphone8plus

למידע נוסף על CLI של gcloud, עיין בתיעוד ההתייחסות .

הרץ מבחן מקומי

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

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

סיים מבחן מוקדם

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

מטרה-ג

  • (void) finishLoop {UIApplication * app = [UIApplication sharedApplication]; [אפליקציית openURL: [NSURL URLWithString: @ "firebase-game-loop-complete: //"] אפשרויות: @ {} completHandler: ^ (הצלחה ב- BOOL) {}]; }

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

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

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

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

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

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

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

    מטרה-ג

    /// 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]; } }