Es kann schwierig sein, Spieltests zu automatisieren, wenn Gaming-Apps auf verschiedenen UI-Frameworks Mit Game Loop-Tests können Sie Ihre nativen Tests in Test Lab einbinden und ganz einfach auf ausgewählten Geräten ausführen. In diesem Leitfaden wird beschrieben, wie Sie einen Game Loop-Test für die Ausführung mit Firebase Test Lab vorbereiten.
Spielschleifentests
Was ist ein Spielschleifentest?
Bei einem Game Loop-Test werden die Aktionen eines echten Spielers simuliert, um schnell und skalierbar zu prüfen, ob Ihr Spiel für Ihre Nutzer eine gute Leistung erbringt. 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. Spielschleifentests können für Folgendes verwendet werden:
- Spielen Sie Ihr Spiel so durch, wie es ein Endnutzer tun würde. Sie können die Eingabe des Nutzers entweder skripten, den Nutzer inaktiv lassen oder den Nutzer durch eine KI ersetzen. Wenn Sie beispielsweise KI in einem Autorennen implementiert haben, können Sie einen KI-Fahrer für die Eingabe des Nutzers verantwortlich machen.
- Führen Sie Ihr Spiel mit der höchsten Qualitätseinstellung aus, um herauszufinden, welche Geräte es unterstützen.
- Führen Sie einen technischen Test durch, z. B. kompilieren Sie mehrere Shader, führen Sie sie aus und prüfen Sie, ob die Ausgabe wie erwartet ist.
Schritt 1: Benutzerdefiniertes URL-Schema für Test Lab registrieren
Wählen Sie in Xcode ein Projektziel aus.
Klicken Sie auf den Tab Info und fügen Sie einen neuen URL-Typ hinzu.
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 demInfo.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>
Ihre App ist jetzt für die Ausführung eines Tests mit Test Lab konfiguriert.
Schritt 2: Optionale Konfiguration der App
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 <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
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 wird ein Spielschleifentest so lange fortgesetzt, bis eine Zeitüberschreitung erreicht wird
auch wenn alle Schleifen ausgeführt wurden. Wenn das Zeitlimit erreicht ist, wird der Test beendet und alle ausstehenden Schleifen 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 den Spielschleifentest so konfigurieren, dass benutzerdefinierte Testergebnisse in Ihr
das Dateisystem des Geräts. So speichert Test Lab beim Starten des Tests die Ergebnisdateien in einem GameLoopsResults
-Verzeichnis auf Ihrem Testgerät, 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. Beachten Sie beim Einrichten des 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 abgeschlossen sind. Wenn Ihr Test mehrere Schleifen enthält, die Ausgabe schreiben, müssen Sie sie einer einzelnen Ergebnisdatei anhängen oder für jede Schleife eine Ergebnisdatei erstellen. So vermeiden Sie, dass Ergebnisse aus einem vorherigen Schleife.
So richten Sie Ihren Test so ein, dass benutzerdefinierte Testergebnisse geschrieben werden:
Erstellen Sie im Verzeichnis
Documents
Ihrer App ein Verzeichnis mit dem NamenGameLoopResults
.Fügen Sie an einer beliebigen Stelle im Code Ihrer App (z. B. in Ihrem App-Delegate) Folgendes hinzu:
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
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 Apple-Codierung.
Schritt 4: App für den Upload verpacken
Erstellen Sie eine IPA-Datei für Ihre Anwendung. Sie müssen sie später wiederfinden.
Klicken Sie im Dropdown-Menü auf Produkt > Archivieren: Wählen Sie das neueste Archiv aus und klicken Sie dann auf App verteilen.
Klicken Sie im eingeblendeten Fenster auf Entwicklung > Weiter.
Optional: Wenn Sie einen schnelleren Build erhalten möchten, deaktivieren Sie die Option Aus Bitcode neu erstellen und klicken Sie auf Weiter. Test Lab Ihre App muss nicht ausgereift oder neu erstellt werden, um einen Test durchzuführen. diese Option sicher deaktivieren.
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
- Prüfen Sie die App-Signatur, indem Sie die .ipa-Datei entpacken und dann
codesign --verify --deep --verbose /path/to/MyApp.app
ausführen. Dabei ist „MyApp“ der Name der App im entpackten Ordner (variiert je nach Projekt). Die erwartete Ausgabe istMyApp.app: valid on disk
.
Schritt 6: Test lokal ausführen
Sie können den Test lokal ausführen, um sein Verhalten zu prüfen, bevor Sie ihn mit Test Lab ausführen. 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 mit dem Befehl
instruments -s devices
ermitteln.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 Nummer der Schleife an das Flag scenario
ü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 Console oder der gcloud CLI aus.