Catch up on everthing we announced at this year's Firebase Summit. Learn more

Führen Sie einen Game Loop-Test durch

Es kann schwierig sein, Spieletests zu automatisieren, wenn Spiele-Apps auf verschiedenen UI-Frameworks basieren. Mit Game Loop-Tests können Sie Ihre nativen Tests in Test Lab integrieren und sie einfach auf von Ihnen ausgewählten Geräten ausführen. In dieser Anleitung wird beschrieben, wie Sie einen Game Loop-Test für die Ausführung mit Firebase Test Lab vorbereiten.

Über Game Loop-Tests

Was ist ein Game Loop-Test?

Ein Game Loop-Test simuliert die Aktionen eines echten Spielers, um schnell und skalierbar zu überprüfen, ob Ihr Spiel für Ihre Benutzer gut funktioniert. Eine Schleife ist ein vollständiger oder teilweiser Durchlauf Ihres Tests in Ihrer Spiele-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 skripten, den Benutzer untätig sein lassen oder den Benutzer durch eine KI ersetzen (wenn Sie beispielsweise KI in einem Autorennen-Spiel implementiert haben, können Sie einen KI-Fahrer für die Eingabe des Benutzers verantwortlich machen). .
  • 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. kompilieren Sie mehrere Shader, führen Sie sie aus und überprüfen Sie, ob die Ausgabe wie erwartet ist.

Schritt 1: Register - Test - Lab-benutzerdefiniertes URL - Schema

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

  2. Klicken Sie auf die Registerkarte Info, dann einen neuen URL - Typen hinzufügen.

  3. Im Feld URL Schemes, geben Sie firebase-game-loop . Sie können auch die benutzerdefinierte URL - Schema registrieren , indem es zu einem Projekt der Zugabe Info.plist Konfigurationsdatei irgendwo innerhalb des <dict> tag:

    <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 für die Ausführung eines Tests mit Test Lab konfiguriert.

Schritt 2: Optional konfigurieren Sie Ihre App

Mehrere Schleifen ausführen

Wenn Sie in Ihrem Test mehrere Schleifen (auch Szenarien genannt) ausführen möchten, müssen Sie angeben, welche Schleifen Sie zum Startzeitpunkt in Ihrer App ausführen möchten.

In AppDelegate, überschreiben Sie 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 &lt;UIApplicationOpenURLOptionsKey, id&gt; *)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 auch die aktuelle Loop - Nummer erhalten , indem die Parsen URLComponents - Objekt , das benutzerdefinierten URL - Schema zu holen:

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

Einen Test vorzeitig beenden

Standardmäßig läuft ein Game Loop-Test weiter, bis ein Timeout von fünf Minuten erreicht ist, selbst wenn alle Loops ausgeführt wurden. Wenn das Timeout erreicht ist, endet der Test und bricht alle anstehenden Schleifen ab. Sie können Ihren Test oder beenden sie früh durch den Aufruf Test - Lab-benutzerdefinierten URL - Schema beschleunigen firebase-game-loop-complete in Ihrer App AppDelegate. Zum Beispiel:

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://"]
      options:@{}
completionHandler:^(BOOL success) {}];
}

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, wenn der Test beginnt zu laufen, Test Lab speichert die Ergebnisdateien in einem GameLoopsResults Verzeichnis auf dem Testgerät (das müssen Sie selbst erstellen). Wenn die Testenden bewegt Test Lab alle Dateien aus dem GameLoopResults Verzeichnis Eimer 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 diese an eine eindeutige Ergebnisdatei anhängen oder eine Ergebnisdatei für jede Schleife erstellen. Auf diese Weise können Sie vermeiden, dass Ergebnisse einer vorherigen Schleife überschrieben werden.

So richten Sie Ihren Test ein, um benutzerdefinierte Testergebnisse zu schreiben:

  1. In der App Documents Verzeichnis, erstellen Sie ein Verzeichnis mit dem Namen GameLoopResults .

  2. Fügen Sie von überall im Code Ihrer App (z. B. von 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];
        }
    }
    

Schritt 3: Packen Sie Ihre App für das Hochladen

Generieren Sie abschließend eine IPA-Datei für Ihre App (Sie müssen sie später suchen).

  1. Wählen Sie in Xcode ein Bereitstellungsprofil für die Ziel-App aus.

  2. Wählen Sie im Drop-down - Menü , das angezeigt wird , klicken Sie auf Produkt> Archiv. Wählen Sie das neueste Archiv, klicken Sie dann auf App verteilen.

  3. In dem Fenster , das angezeigt wird , klicken Sie auf Entwicklung> Weiter.

  4. Optional: Um eine schnellere Build zu erhalten, die von Bitcode Option Rebuild deaktivieren, klicken Sie auf Weiter. Test Lab erfordert keine Ausdünnung oder Neuerstellung Ihrer App, um einen Test auszuführen, sodass Sie diese Option sicher deaktivieren können.

  5. Klicken Sie auf Exportieren, geben Sie dann ein Verzeichnis , in dem Sie Ihre App IPA - Datei zum Download bereit .

Schritt 4: Führen Sie Ihren Test vor Ort

Sie können Ihren Test lokal ausführen, um sein Verhalten zu überprüfen, bevor Sie ihn mit Test Lab ausführen. Um lokal zu testen, laden Sie Ihre Gaming-App in einen Simulator und führen Sie Folgendes aus:

xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://
  • Sie können Ihren Simulators UDID , indem Sie das finden instruments -s devices Befehl.

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

Wenn Ihr Test mehrere Schleifen enthält, können Sie festlegen , welche Schleife Sie ausführen möchten die Schleifennummer an das , indem scenario Flagge. Beachten Sie, dass Sie nur eine Schleife gleichzeitig 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

Nächster Schritt

Führen Sie den Test unter Verwendung des Firebase - Konsole oder den gcloud CLI .