Google 致力于为黑人社区推动种族平等。查看具体举措
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Exécuter un test de boucle de jeu

Il peut être difficile d'automatiser les tests de jeu lorsque les applications de jeu sont construites sur différents cadres d'interface utilisateur. Les tests Game Loop vous permettent d'intégrer vos tests natifs avec Test Lab et de les exécuter facilement sur les appareils que vous sélectionnez. Ce guide décrit comment préparer un test Game Loop à exécuter à l'aide de Firebase Test Lab.

À propos des tests Game Loop

Qu'est-ce qu'un test Game Loop?

Un test Game Loop simule les actions d'un vrai joueur pour vérifier que votre jeu fonctionne bien pour vos utilisateurs de manière rapide et évolutive. Une boucle est une analyse complète ou partielle de votre test sur votre application de jeu. Vous pouvez exécuter un test Game Loop localement sur un simulateur ou sur un ensemble d'appareils dans Test Lab. Les tests Game Loop peuvent être utilisés pour:

  • Parcourez votre jeu comme un utilisateur final y jouerait. Vous pouvez soit scripter l'entrée de l'utilisateur, laisser l'utilisateur inactif, soit remplacer l'utilisateur par une IA (par exemple, si vous avez implémenté l'IA dans un jeu de course automobile, vous pouvez confier à un pilote IA la responsabilité de l'entrée de l'utilisateur) .
  • Exécutez votre jeu avec le paramètre de qualité le plus élevé pour découvrir quels appareils peuvent le prendre en charge.
  • Exécutez un test technique, par exemple en compilant plusieurs shaders, en les exécutant et en vérifiant que la sortie est conforme aux attentes.

Étape 1 : enregistrer le schéma d'URL personnalisé de Test Lab

  1. Dans Xcode, sélectionnez une cible de projet.

  2. Cliquez sur l'onglet Infos , puis ajoutez un nouveau type d'URL .

  3. Dans le champ Schémas d'URL , saisissez firebase-game-loop . Vous pouvez également enregistrer le schéma d'URL personnalisé en l'ajoutant au fichier de configuration Info.plist votre projet n'importe où dans la <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>
    

Votre application est maintenant configurée pour exécuter un test à l'aide de Test Lab.

Étape 2 : Configurez éventuellement votre application

Exécutez plusieurs boucles

Si vous prévoyez d'exécuter plusieurs boucles (aka scénarios) dans votre test, vous devez spécifier les boucles que vous souhaitez exécuter dans votre application au moment du lancement.

Dans votre délégué d'application, remplacez la méthode application(_:open:options:) :

Rapide

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
}

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

Lorsque vous exécutez plusieurs boucles dans votre test, la boucle actuelle est transmise en tant que paramètre à l'URL utilisée pour lancer l'application. Vous pouvez également obtenir le numéro de la boucle actuelle en analysant l'objet URLComponents utilisé pour récupérer le schéma d'URL personnalisé:

Rapide

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

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

Terminer un test tôt

Par défaut, un test de boucle de jeu continue de s'exécuter jusqu'à ce qu'il atteigne un délai d'expiration de cinq minutes, même lorsque toutes les boucles ont été exécutées. Lorsque le délai d'expiration est atteint, le test se termine et annule toutes les boucles en attente. Vous pouvez accélérer votre test ou le terminer plus tôt en appelant le schéma d'URL personnalisé de Test Lab firebase-game-loop-complete dans AppDelegate de votre application. Par example:

Rapide

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

Objectif c

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

Votre test de boucle de jeu met fin à la boucle en cours et exécute la boucle suivante. Lorsqu'il n'y a plus de boucles à exécuter, le test se termine.

Écrire des résultats de test personnalisés

Vous pouvez configurer votre test Game Loop pour écrire des résultats de test personnalisés dans le système de fichiers de votre appareil. De cette façon, lorsque le test commence à s'exécuter, Test Lab stocke les fichiers de résultats dans un répertoire GameLoopsResults sur votre appareil de test (que vous devez créer vous-même). À la fin du test, Test Lab déplace tous les fichiers du répertoire GameLoopResults vers le GameLoopResults de votre projet. Gardez à l'esprit les points suivants lors de la configuration de votre test:

  • Tous les fichiers de résultats sont téléchargés quel que soit le type, la taille ou la quantité de fichier.

  • Test Lab ne traite pas vos résultats de test tant que toutes les boucles de votre test ne sont pas terminées, donc si votre test comprend plusieurs boucles qui écrivent la sortie, assurez-vous de les ajouter à un fichier de résultat unique ou de créer un fichier de résultat pour chaque boucle. De cette façon, vous pouvez éviter d'écraser les résultats d'une boucle précédente.

Pour configurer votre test afin d'écrire des résultats de test personnalisés:

  1. Dans le répertoire Documents votre application, créez un répertoire nommé GameLoopResults .

  2. De n'importe où dans le code de votre application (par exemple, votre délégué d'application), ajoutez ce qui suit:

    Rapide

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

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

Étape 3 : Packagez votre application pour la mise en ligne

Enfin, générez un fichier IPA pour votre application (vous devrez le localiser plus tard).

  1. Dans Xcode, sélectionnez un profil d'approvisionnement pour l'application cible.

  2. Dans le menu déroulant qui apparaît, cliquez sur Produit> Archiver . Sélectionnez l'archive la plus récente, puis cliquez sur Distribuer l'application .

  3. Dans la fenêtre qui apparaît, cliquez sur Développement> Suivant .

  4. Facultatif: pour obtenir une compilation plus rapide, désélectionnez l'option Reconstruire à partir de Bitcode , puis cliquez sur Suivant . Test Lab ne nécessite pas de fluidification ou de reconstruction de votre application pour exécuter un test afin que vous puissiez désactiver cette option en toute sécurité.

  5. Cliquez sur Exporter , puis entrez un répertoire dans lequel vous souhaitez télécharger le fichier IPA de votre application.

Étape 4 : Exécutez votre test localement

Vous pouvez exécuter votre test localement pour vérifier son comportement avant de l'exécuter avec Test Lab. Pour tester localement, chargez votre application de jeu dans un simulateur et exécutez:

xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://
  • Vous pouvez trouver l'UDID de votre simulateur en exécutant la commande instruments -s devices .

  • S'il n'y a qu'un seul simulateur en cours d'exécution, entrez la chaîne spéciale "booted" à la place de SIMULATOR_UDID .

Si votre test contient plusieurs boucles, vous pouvez spécifier la boucle que vous souhaitez exécuter en transmettant le numéro de boucle à l'indicateur de scenario . Notez que vous ne pouvez exécuter qu'une seule boucle à la fois lorsque vous exécutez votre test localement. Par exemple, si vous souhaitez exécuter les boucles 1, 2 et 5, vous devez exécuter une commande distincte pour chaque boucle:

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

L'étape suivante

Exécutez votre test à l'aide de la console Firebase ou de l' interface de ligne de commande gcloud .