O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Execute um teste de loop de jogo

Pode ser difícil automatizar o teste de jogos quando os aplicativos de jogos são construídos em diferentes estruturas de IU. Os testes de loop de jogo permitem que você integre seus testes nativos com o Test Lab e execute-os facilmente nos dispositivos que você selecionar. Este guia descreve como preparar um teste de loop de jogo para ser executado usando o Firebase Test Lab.

Sobre os testes de loop de jogo

O que é um teste de loop de jogo?

Um teste de Loop de Jogo simula as ações de um jogador real para verificar se o seu jogo tem um bom desempenho para os usuários de maneira rápida e escalonável. Um loop é uma execução completa ou parcial do teste no aplicativo de jogo. Você pode executar um teste de loop de jogo localmente em um simulador ou em um conjunto de dispositivos no Test Lab. Os testes de loop de jogo podem ser usados ​​para:

  • Execute o jogo como um usuário final o faria. Você pode criar um script para a entrada do usuário, deixar o usuário inativo ou substituir o usuário por uma IA (por exemplo, se você implementou IA em um jogo de corrida de carros, pode colocar um piloto de IA encarregado da entrada do usuário) .
  • Execute seu jogo na configuração de qualidade mais alta para descobrir quais dispositivos podem suportá-lo.
  • Execute um teste técnico, como compilar vários sombreadores, executá-los e verificar se a saída é a esperada.

Passo 1: esquema de URL personalizado do Register Test Lab

  1. No Xcode, selecione um destino de projeto.

  2. Clique na guia Informações, em seguida, adicionar um novo tipo de URL.

  3. No campo URL Schemes, digite firebase-game-loop . Você também pode registrar o esquema de URL personalizado, adicionando-o do seu projeto Info.plist qualquer arquivo de configuração dentro do <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>
    

Seu aplicativo agora está configurado para executar um teste usando o Test Lab.

Passo 2: Opcionalmente configurar seu aplicativo

Execute vários loops

Se você planeja executar vários loops (também conhecidos como cenários) em seu teste, deve especificar quais loops deseja executar em seu aplicativo no momento da inicialização.

Em seu delegado app, substituir o 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
}

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

Quando você executa vários loops em seu teste, o loop atual é passado como um parâmetro para a URL usada para iniciar o aplicativo. Você também pode obter o número de circuito de corrente ao analisar os URLComponents objeto usado para buscar o esquema de URL personalizado:

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

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

Terminar um teste mais cedo

Por padrão, um teste de Loop de Jogo continua em execução até atingir um tempo limite de cinco minutos, mesmo quando todos os loops foram executados. Quando o tempo limite é atingido, o teste termina e cancela todos os loops pendentes. Você pode acelerar o seu teste ou terminá-la cedo, chamando esquema de URL personalizado do Test Lab firebase-game-loop-complete em AppDelegate do seu aplicativo. Por exemplo:

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

Objective-C

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

Seu teste de loop de jogo termina o loop atual e executa o próximo loop. Quando não houver mais loops para executar, o teste termina.

Escreva resultados de teste personalizados

Você pode configurar seu teste de Loop de jogo para gravar resultados de teste personalizados no sistema de arquivos do seu dispositivo. Desta forma, quando o teste começa a funcionar, Test Lab armazena os arquivos de resultados em um GameLoopsResults diretório em seu dispositivo de teste (que você deve criar-se). Quando as pontas de teste, Test Lab move todos os arquivos do GameLoopResults diretório para balde do seu projeto. Lembre-se do seguinte ao configurar seu teste:

  • Todos os arquivos de resultado são carregados independentemente do tipo, tamanho ou quantidade de arquivo.

  • O Test Lab não processa os resultados do teste até que todos os loops em seu teste tenham concluído a execução, portanto, se o teste incluir vários loops que gravam saída, certifique-se de anexá-los a um arquivo de resultado exclusivo ou criar um arquivo de resultado para cada loop. Dessa forma, você pode evitar a substituição dos resultados de um loop anterior.

Para configurar seu teste para gravar resultados de teste personalizados:

  1. Em de seu aplicativo Documents diretório, crie um diretório chamado GameLoopResults .

  2. De qualquer lugar no código do seu aplicativo (por exemplo, o delegado do seu aplicativo), adicione o seguinte:

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

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

Passo 3: Pacote seu aplicativo para upload

Por fim, gere um arquivo IPA para seu aplicativo (você precisará localizá-lo mais tarde).

  1. No Xcode, selecione um perfil de provisionamento para o aplicativo de destino.

  2. A partir do menu drop-down que aparece, clique produto> Archive. Selecione o arquivo mais recente, em seguida, clique em Distribuir App.

  3. Na janela que aparece, clique em Desenvolvimento> Next.

  4. Opcional: Para obter uma compilação mais rápida, desmarque a reconstruir opção Bitcode de, em seguida, clique em Avançar. O Test Lab não requer afinamento ou reconstrução do seu aplicativo para executar um teste, portanto, você pode desabilitar esta opção com segurança.

  5. Clique em Exportar, digite um diretório no qual você deseja fazer o download do arquivo IPA de seu aplicativo.

Passo 4: Execute o teste localmente

Você pode executar seu teste localmente para verificar seu comportamento antes de executá-lo com o Test Lab. Para testar localmente, carregue seu aplicativo de jogo em um simulador e execute:

xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://
  • Você pode encontrar UDID do seu simulador, executando os instruments -s devices de comando.

  • Se há apenas um simulador de corrida, digite a expressão especial "booted" no lugar de SIMULATOR_UDID .

Se o teste contém vários loops, você pode especificar quais loop que você deseja executar, passando o número de loop para o scenario bandeira. Observe que você só pode executar um loop por vez ao executar o teste localmente. Por exemplo, se você deseja executar os loops 1, 2 e 5, deve executar um comando separado para cada loop:

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óxima Etapa

Executar o teste usando o console de Firebase ou o CLI gcloud .