Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Beginnen Sie mit Game Loop-Tests für iOS

Mit Game Loop-Tests können Sie Tests schreiben, die für Ihre Game Engine typisch sind, und diese dann im Test Lab auf den von Ihnen ausgewählten Geräten ausführen. Auf diese Weise müssen Sie sich nicht um das Schreiben für verschiedene Benutzeroberflächen oder das Testen von Frameworks kümmern. Ein Game-Loop-Test simuliert die Aktionen eines echten Spielers. Wenn Sie ihn im Test Lab ausführen, können Sie schnell und skalierbar überprüfen, ob Ihr Spiel für Ihre Benutzer eine gute Leistung erbringt.

Auf dieser Seite erfahren Sie, wie Sie einen Game Loop-Test ausführen und anschließend Ihre Testergebnisse auf der Seite Test Lab der Firebase-Konsole anzeigen und verwalten. Sie können Ihre Tests auch mit optionalen Funktionen weiter anpassen, z. B. benutzerdefinierte Testergebnisse schreiben oder den Test vorzeitig beenden .

Was ist ein Game Loop Test?

Eine Schleife ist ein vollständiger oder teilweiser Durchlauf Ihres Tests in Ihrer Gaming-App. Sie können einen Game Loop-Test lokal auf einem Simulator oder auf einer Reihe von Geräten in Test Lab ausführen. Game-Loop-Tests können verwendet werden, um:

  • Führen Sie Ihr Spiel so durch, wie es ein Endbenutzer spielen würde. Sie können entweder die Eingabe des Benutzers per Skript ausführen, den Benutzer im Leerlauf lassen oder den Benutzer durch eine KI ersetzen (wenn Sie beispielsweise KI in einem Autorennen implementiert haben, können Sie einen KI-Fahrer mit der Eingabe des Benutzers beauftragen). .

  • Führen Sie Ihr Spiel mit der höchsten Qualitätseinstellung aus, um herauszufinden, welche Geräte es unterstützen können.

  • Führen Sie einen technischen Test durch, z. B. das Kompilieren mehrerer Shader, deren Ausführung und die Überprüfung der erwarteten Ausgabe.

Schritt 1: Registrieren Sie das benutzerdefinierte URL-Schema von Test Lab

Zunächst müssen Sie das benutzerdefinierte URL-Schema von Firebase Test Lab in Ihrer App registrieren:

  1. Wählen Sie in Xcode ein Projektziel aus.

  2. Klicken Sie auf die Registerkarte Info und fügen Sie einen neuen URL-Typ hinzu .

  3. Geben Sie im Feld URL-Schemata die firebase-game-loop . Sie können das benutzerdefinierte URL-Schema auch registrieren, indem Sie es zur Info.plist Konfigurationsdatei Ihres Projekts an einer Info.plist Stelle im <dict> -Tag hinzufügen:

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

Ihre App ist jetzt so konfiguriert, dass ein Test mit Test Lab ausgeführt wird.

Schritt 2 (optional): Konfigurieren Sie Ihre App so, dass mehrere Schleifen ausgeführt werden

Wenn in Ihrer App mehrere benutzerdefinierte URL-Schemata registriert sind und Sie in Ihrem Test mehrere Schleifen (auch als Szenarien bezeichnet) ausführen möchten, müssen Sie angeben, welche Schleifen zum Startzeitpunkt in Ihrer App ausgeführt werden sollen.

Überschreiben Sie in Ihrem App-Delegaten die application(_:open:options:) Methode:

Schnell

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
}

Ziel c

  • (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:). } }

Wenn Sie in Ihrem Test mehrere Schleifen ausführen, wird die aktuelle Schleife als Parameter an die URL übergeben, die zum Starten der App verwendet wird. Sie können die aktuelle Schleifennummer auch erhalten, indem Sie das URLComponents Objekt URLComponents , mit dem das benutzerdefinierte URL-Schema URLComponents wird:

Schnell

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

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

Schritt 3: Erstellen Sie einen Test und führen Sie ihn aus

Nachdem Sie das benutzerdefinierte URL-Schema von Test Lab registriert haben, können Sie Ihren Test in der Firebase-Konsole oder mit der Beta-CLI von gcloud ausführen . Wenn Sie dies noch nicht getan haben, erstellen Sie eine IPA-Datei für Ihre App (Sie müssen sie später suchen).

Führen Sie einen Test in der Firebase-Konsole aus

  1. Wenn Sie dies noch nicht getan haben, öffnen Sie die Firebase-Konsole und erstellen Sie ein Projekt.

  2. Klicken Sie auf der Seite Test Lab der Firebase-Konsole auf Ausführen Ihres ersten Tests> Ausführen einer iOS-Spieleschleife .

  3. Klicken Sie im Abschnitt App hochladen auf Durchsuchen und wählen Sie dann die IPA-Datei Ihrer App aus (falls noch nicht geschehen, generieren Sie eine IPA-Datei für Ihre App).

  4. Optional : Wenn Sie mehrere Schleifen (auch als Szenarien bezeichnet) gleichzeitig ausführen oder bestimmte auszuführende Schleifen auswählen möchten, geben Sie die Schleifennummern in das Feld Szenarien ein.

    Wenn Sie beispielsweise "1-3, 5" eingeben, führt Test Lab die Schleifen 1, 2, 3 und 5 aus. Standardmäßig (wenn Sie nichts in das Feld " Szenarien" eingeben) führt Test Lab nur Schleife 1 aus.

  5. Wählen Sie im Abschnitt Geräte ein oder mehrere physische Geräte aus, auf denen Sie Ihre App testen möchten, und klicken Sie dann auf Tests starten .

Führen Sie einen Test mit der gcloud Beta-CLI durch

  1. Wenn Sie dies noch nicht getan haben, konfigurieren Sie Ihre lokale gcloud SDK-Umgebung und stellen Sie sicher, dass Sie die gcloud Beta-Komponente installieren.

  2. Führen Sie den gcloud beta firebase test ios run und konfigurieren Sie den Lauf mit den folgenden Flags:

Flags für Game-Loop-Tests
--type

Erforderlich : Gibt den Typ des iOS-Tests an, den Sie ausführen möchten. Sie können die Testtypen xctest (Standard) oder game-loop xctest .

--app

Erforderlich : Absoluter Pfad (GCS oder Dateisystem) zur IPA-Datei Ihrer App. Dieses Flag ist nur gültig, wenn Game Loop-Tests ausgeführt werden.

--scenario-numbers

Die Schleifen (auch als Szenarien bezeichnet), die Sie in Ihrer App ausführen möchten. Sie können eine Schleife, eine Liste oder Schleifen oder einen Bereich von Schleifen eingeben. Die Standardschleife ist 1.

Zum Beispiel führt --scenario-numbers=1-3,5 die Schleifen 1, 2, 3 und 5 aus.

--device-model

Das physische Gerät, auf dem Sie Ihren Test ausführen möchten (finden Sie heraus, welche verfügbaren Geräte Sie verwenden können).

--timeout

Die maximale Dauer, die Ihr Test ausgeführt werden soll. Sie können eine Ganzzahl eingeben, um die Dauer in Sekunden darzustellen, oder eine Ganzzahl und eine Aufzählung, um die Dauer als längere Zeiteinheit darzustellen.

Beispielsweise:

  • --timeout=200 zwingt Ihren Test zum Beenden, wenn er bis zu 200 Sekunden dauert.
  • --timeout=1h zwingt Ihren Test zum Beenden, wenn er bis zu einer Stunde --timeout=1h .

Mit dem folgenden Befehl wird beispielsweise ein Game-Loop-Test ausgeführt, der die Loops 1, 4, 6, 7 und 8 auf einem iPhone 8 Plus ausführt:

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

Weitere Informationen zur gcloud-CLI finden Sie in der Referenzdokumentation .

Führen Sie einen Test lokal aus

Um Ihren Test lokal auszuführen, laden Sie Ihre Gaming-App in einen Simulator und führen Sie Folgendes aus:

xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://
  • Sie finden die UDID Ihres Simulators, indem Sie den Befehl instruments -s devices ausführen.

  • Wenn nur ein Simulator ausgeführt wird, geben Sie anstelle von SIMULATOR_UDID die spezielle Zeichenfolge "booted" SIMULATOR_UDID .

Wenn Ihr Test mehrere Schleifen enthält, können Sie angeben, welche Schleife Sie ausführen möchten, indem Sie die Schleifennummer an das scenario Flag übergeben. Beachten Sie, dass Sie jeweils nur eine Schleife ausführen können, wenn Sie Ihren Test lokal ausführen. Wenn Sie beispielsweise die Schleifen 1, 2 und 5 ausführen möchten, müssen Sie für jede Schleife einen separaten Befehl ausführen:

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

Beenden Sie einen Test frühzeitig

Standardmäßig wird ein Game-Loop-Test fortgesetzt, bis eine Zeitüberschreitung von fünf Minuten erreicht ist, selbst wenn alle Loops ausgeführt wurden. Wenn das Zeitlimit erreicht ist, endet der Test und bricht alle ausstehenden Schleifen ab. Sie können Ihren Test beschleunigen oder vorzeitig beenden, indem Sie im AppDelegate Ihrer App das benutzerdefinierte URL-Schema firebase-game-loop-complete von Test Lab aufrufen. Beispielsweise:

Schnell

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

Ziel c

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

Ihr Game-Loop-Test beendet die aktuelle Schleife und führt die nächste Schleife aus. Wenn keine Schleifen mehr ausgeführt werden müssen, endet der Test.

Schreiben Sie benutzerdefinierte Testergebnisse

Sie können Ihren Game Loop-Test so konfigurieren, dass benutzerdefinierte Testergebnisse in das Dateisystem Ihres Geräts geschrieben werden. Auf diese Weise speichert Test Lab zu Beginn des Tests die Ergebnisdateien in einem GameLoopsResults Verzeichnis auf Ihrem Testgerät (das Sie selbst erstellen müssen). Wenn der Test beendet ist, verschiebt Test Lab alle Dateien aus dem GameLoopResults Verzeichnis in den Bucket Ihres Projekts. Beachten Sie beim Einrichten Ihres Tests Folgendes:

  • Alle Ergebnisdateien werden unabhängig von Dateityp, Größe oder Menge hochgeladen.

  • Test Lab verarbeitet Ihre Testergebnisse erst, wenn alle Schleifen in Ihrem Test ausgeführt wurden. Wenn Ihr Test also mehrere Schleifen enthält, die Ausgaben schreiben, stellen Sie sicher, dass Sie sie an eine Ergebnisdatei anhängen oder für jede Schleife eine Ergebnisdatei erstellen. Auf diese Weise können Sie vermeiden, dass Ergebnisse einer vorherigen Schleife überschrieben werden.

So richten Sie Ihren Test so ein, dass benutzerdefinierte Testergebnisse geschrieben werden:

  1. Erstellen Sie im Documents Ihrer App ein Verzeichnis mit dem Namen GameLoopResults .

  2. Fügen Sie an einer beliebigen Stelle im Code Ihrer App (z. B. Ihrem App-Delegaten) Folgendes hinzu:

    Schnell

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

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