Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Ejecutar una prueba de bucle de juego

Puede ser difícil automatizar las pruebas de juegos cuando las aplicaciones de juegos se crean en diferentes marcos de interfaz de usuario. Las pruebas de Game Loop le permiten integrar sus pruebas nativas con Test Lab y ejecutarlas fácilmente en los dispositivos que seleccione. Esta guía describe cómo preparar una prueba de Game Loop para ejecutar con Firebase Test Lab.

Acerca de las pruebas de Game Loop

¿Qué es una prueba de bucle de juego?

Una prueba de Game Loop simula las acciones de un jugador real para verificar que su juego funciona bien para sus usuarios de una manera rápida y escalable. Un bucle es un recorrido completo o parcial de su prueba en su aplicación de juegos. Puede ejecutar una prueba de Game Loop localmente en un simulador o en un conjunto de dispositivos en Test Lab. Las pruebas de Game Loop se pueden utilizar para:

  • Ejecute su juego como lo haría un usuario final. Puede escribir la entrada del usuario, dejar que el usuario esté inactivo o reemplazar al usuario con una IA (por ejemplo, si implementó la IA en un juego de carreras de autos, puede poner un controlador de IA a cargo de la entrada del usuario) .
  • Ejecute su juego con la configuración de más alta calidad para averiguar qué dispositivos pueden admitirlo.
  • Ejecute una prueba técnica, como compilar varios sombreadores, ejecutarlos y verificar que el resultado sea el esperado.

Paso 1: esquema de URL personalizada de Registro del laboratorio de pruebas

  1. En Xcode, seleccione un objetivo del proyecto.

  2. Haga clic en la pestaña Información, a continuación, añadir un nuevo tipo de URL.

  3. En el campo esquemas de URL, introduzca firebase-game-loop . También puede registrar el esquema de URL personalizada añadiéndolo a su proyecto de Info.plist cualquier archivo de configuración en el <dict> etiqueta:

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

Su aplicación ahora está configurada para ejecutar una prueba con Test Lab.

Paso 2: Opcionalmente configurar su aplicación

Ejecuta varios bucles

Si planea ejecutar múltiples bucles (también conocidos como escenarios) en su prueba, debe especificar qué bucles desea ejecutar en su aplicación en el momento del lanzamiento.

En delegado de la aplicación, anular la application(_:open:options:) método:

Rápido

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
}

C objetivo

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

Cuando ejecuta varios bucles en su prueba, el bucle actual se pasa como un parámetro a la URL utilizada para iniciar la aplicación. También puede obtener el número de bucle de corriente mediante el análisis de los URLComponents objeto utilizado para buscar el esquema de URL personalizada:

Rápido

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

C objetivo

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

Finalice una prueba antes

De forma predeterminada, una prueba de bucle de juego continúa ejecutándose hasta que alcanza un tiempo de espera de cinco minutos, incluso cuando se han ejecutado todos los bucles. Cuando se alcanza el tiempo de espera, la prueba finaliza y cancela los bucles pendientes. Puede acelerar su examen o terminar a tiempo llamando al esquema de URL personalizada del laboratorio de pruebas firebase-game-loop-complete en AppDelegate de su aplicación. Por ejemplo:

Rápido

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

C objetivo

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

La prueba de Game Loop finaliza el ciclo actual y ejecuta el siguiente ciclo. Cuando no hay más bucles para ejecutar, la prueba finaliza.

Escribir resultados de prueba personalizados

Puede configurar su prueba Game Loop para escribir resultados de prueba personalizados en el sistema de archivos de su dispositivo. De esta manera, cuando la prueba comienza a funcionar, laboratorio de pruebas almacena los archivos de resultados en un GameLoopsResults directorio en el dispositivo de prueba (que debe crear usted mismo). Cuando termina la prueba, el laboratorio de pruebas mueve todos los archivos de la GameLoopResults directorio para el cubo de su proyecto. Tenga en cuenta lo siguiente al configurar su prueba:

  • Todos los archivos de resultados se cargan independientemente del tipo, tamaño o cantidad de archivo.

  • Test Lab no procesa los resultados de su prueba hasta que todos los bucles de su prueba hayan terminado de ejecutarse, por lo que si su prueba incluye varios bucles que escriben la salida, asegúrese de agregarlos a un archivo de resultados único o crear un archivo de resultados para cada bucle. De esta forma, puede evitar sobrescribir los resultados de un bucle anterior.

Para configurar su prueba para escribir resultados de prueba personalizados:

  1. En la aplicación de Documents de directorio, cree un directorio llamado GameLoopResults .

  2. Desde cualquier parte del código de su aplicación (por ejemplo, el delegado de su aplicación), agregue lo siguiente:

    Rápido

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

    C objetivo

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

Paso 3: Paquete de su aplicación para subir

Finalmente, genere un archivo IPA para su aplicación (deberá ubicarlo más tarde).

  1. En Xcode, seleccione un perfil de aprovisionamiento para la aplicación de destino.

  2. En el menú desplegable que aparece, haga Producto> Archivo. Seleccione el archivo más reciente, a continuación, haga clic en Distribuir aplicaciones.

  3. En la ventana que aparece, haga clic en el Desarrollo> Siguiente.

  4. Opcional: Para obtener una acumulación más rápida, anule la selección de la opción de volver a generar código binario, a continuación, haga clic en Siguiente. Test Lab no requiere adelgazar o reconstruir su aplicación para ejecutar una prueba, por lo que puede deshabilitar esta opción de manera segura.

  5. Haga clic en Exportar, a continuación, introduzca un directorio en el que desea descargar el archivo IPA de su aplicación.

Paso 4: Ejecutar la prueba de forma local

Puede ejecutar su prueba localmente para verificar su comportamiento antes de ejecutarla con Test Lab. Para probar localmente, cargue su aplicación de juegos en un simulador y ejecute:

xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://
  • Puede encontrar UDID de su simulador mediante la ejecución de los instruments -s devices mando.

  • Si sólo hay un simulador de funcionamiento, introduzca la cadena especial "booted" en lugar de SIMULATOR_UDID .

Si la prueba contiene varios bucles, se puede especificar el bucle que desea ejecutar al pasar el número de bucle al scenario del pabellón. Tenga en cuenta que solo puede ejecutar un bucle a la vez cuando ejecuta su prueba localmente. Por ejemplo, si desea ejecutar los bucles 1, 2 y 5, debe ejecutar un comando separado para cada bucle:

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

Próximo paso

Ejecutar la prueba utilizando la consola de Firebase o la CLI gcloud .