Spielschleifentest ausführen

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

Spielschleifentests

Was ist ein Spielschleifentest?

Bei einem Spielschleifentest werden die Aktionen eines echten Spielers simuliert, um zu prüfen, ob Ihr Spiel schnell und skalierbar ist. Eine Schleife ist ein vollständiger oder teilweiser Durchlauf Ihres Tests auf Ihrer Gaming-App. Du kannst einen Spielschleifentest lokal in einem Simulator oder auf einer Reihe von Geräten in Test Lab ausführen. Mit Spielschleifentests können Sie Folgendes tun:

  • Spielen Sie Ihr Spiel so durch, wie es ein Endnutzer tun würde. Sie können die Eingabe des lassen Sie den Nutzer inaktiv oder ersetzen ihn durch eine KI (z. B. wenn Sie KI implementiert haben). in einem Autorennen können Sie einen KI-Fahrer für die Eingabe des Nutzers übernehmen).
  • Führen Sie Ihr Spiel mit der höchsten Qualitätseinstellung aus, um herauszufinden, welche Geräte es unterstützen.
  • Technischen Test durchführen, z. B. mehrere Shader kompilieren, ausführen und prüfen, die Ausgabe ist wie erwartet.

Schritt 1: Schema für benutzerdefinierte URLs von Test Lab registrieren

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

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

  3. Geben Sie im Feld URL-Schemas den Wert firebase-game-loop ein. Sie können das Schema für benutzerdefinierte URLs auch registrieren, indem Sie es dem Info.plist-Konfigurationsdatei an einer beliebigen Stelle innerhalb des <dict>-Tags:

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

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

Schritt 2: Anwendung konfigurieren (optional)

Mehrere Schleifen ausführen

Wenn Sie in Ihrem Test mehrere Schleifen (d. h. Szenarien) ausführen möchten, müssen Sie beim Start angeben, welche Schleifen in Ihrer App ausgeführt werden sollen.

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

Swift

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

Wenn Sie in Ihrem Test mehrere Schleifen ausführen, wird die aktuelle Schleife als an die URL zum Starten der App an. Sie können auch den aktuellen Schleifennummer durch Parsen der URLComponents-Objekt, das zum Abrufen des Schemas für benutzerdefinierte URLs verwendet wird:

Swift

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

Test vorzeitig beenden

Standardmäßig läuft ein Spielschleifentest so lange weiter, bis eine Zeitüberschreitung erreicht wird auch wenn alle Schleifen ausgeführt wurden. Wenn der Parameter Wenn die Zeitüberschreitung erreicht ist, wird der Test beendet und alle ausstehenden Schleifen werden abgebrochen. Sie können die Geschwindigkeit erhöhen, Führe deinen Test durch oder beende ihn vorzeitig, indem du das Schema für benutzerdefinierte URLs von Test Lab aufrufst firebase-game-loop-complete in AppDelegate. Beispiel:

Swift

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

Der Spielschleifentest beendet die aktuelle Schleife und führt die nächste Schleife aus. Wenn keine weiteren Schleifen ausgeführt werden müssen, wird der Test beendet.

Benutzerdefinierte Testergebnisse schreiben

Sie können Ihren Game Loop-Test so konfigurieren, dass benutzerdefinierte Testergebnisse in das Dateisystem Ihres Geräts geschrieben werden. Wenn der Test beginnt, Test Lab speichert die Ergebnisdateien im Verzeichnis GameLoopsResults im Testverzeichnis das Sie selbst erstellen müssen. Wenn der Test beendet ist, bewegt sich Test Lab alle Dateien aus dem Verzeichnis GameLoopResults in den Bucket Ihres Projekts. Notizen Beachten Sie bei der Einrichtung des Tests Folgendes:

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

  • Test Lab verarbeitet die Testergebnisse erst, wenn alle Schleifen in deinem abgeschlossen sind. Wenn Ihr Test also mehrere Schleifen enthält, die Ausgabe verwenden, achten Sie darauf, sie an eine eindeutige Ergebnisdatei anzuhängen oder ein Ergebnis zu erstellen. für jede Schleife. So können Sie vermeiden, dass Ergebnisse aus einer vorherigen Schleife überschrieben werden.

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

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

  2. Fügen Sie an einer beliebigen Stelle im Code Ihrer App (z.B. vom App-Bevollmächtigten) den Folgendes:

    Swift

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

Schritt 3: App signieren

  1. Prüfen Sie, ob alle Artefakte in der App signiert sind. Sie können dies beispielsweise über Xcode tun, indem Sie Signatureinstellungen wie das Bereitstellungsprofil und die Identität angeben. Weitere Informationen finden Sie unter Codesignatur von Apple.

Schritt 4: App für den Upload verpacken

Erstellen Sie eine IPA-Datei für Ihre App. Sie müssen sie später finden.

  1. Klicken Sie im Drop-down-Menü auf Produkt > Archivieren. Wählen Sie das neueste Archiv aus und klicken Sie dann auf App verteilen.

  2. Klicken Sie im angezeigten Fenster auf Entwicklung > Weiter.

  3. Optional:Wenn Sie einen schnelleren Build verwenden möchten, heben Sie die Auswahl Aus Bitcode neu erstellen und klicken Sie dann auf Weiter. Test Lab Ihre App muss nicht ausgereift oder neu erstellt werden, um einen Test durchzuführen. diese Option sicher deaktivieren.

  4. Klicken Sie auf Exportieren und geben Sie dann ein Verzeichnis ein, in das Sie die Datei herunterladen möchten. in der IPA-Datei Ihrer App.

Schritt 5: App-Signatur überprüfen

  1. Prüfen Sie die App-Signatur, indem Sie die IPA-Datei entpacken und dann codesign --verify --deep --verbose /path/to/MyApp.app mit „MyApp“ ausführen der Name der App im entpackten Ordner ist (je nach Projekt). Die erwartete Ausgabe ist MyApp.app: valid on disk.

Schritt 6: Test lokal ausführen

Sie können den Test lokal ausführen, um sein Verhalten zu überprüfen, bevor Sie ihn mit Test Lab Laden Sie die Gaming-App für einen lokalen Test in einen Simulator und führen Sie folgenden Befehl aus:

xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://
  • Sie können die UDID Ihres Simulators ermitteln, indem Sie den instruments -s devices-Befehl.

  • Wird nur ein Simulator ausgeführt, geben Sie den speziellen String ein "booted" anstelle von SIMULATOR_UDID.

Wenn Ihr Test mehrere Schleifen enthält, können Sie angeben, welche Schleife ausgeführt werden soll, indem Sie die Schleifennummer an das scenario-Flag übergeben. Sie können jeweils nur eine Schleife auszuführen, wenn Sie Ihren Test lokal ausführen. Wenn Sie beispielsweise Wenn Sie 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ächste Schritte

Führen Sie den Test mit der Firebase-Konsole aus. oder die gcloud CLI verwenden.