O Google está comprometido em promover a equidade racial para as comunidades negras. Veja como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Comandos do shell do dispositivo

Durante o teste do VTS, os comandos do shell são usados ​​para executar um binário de teste do destino, para obter / definir propriedades, variáveis ​​de ambiente e informações do sistema e para iniciar / parar a estrutura do Android. Você pode executar comandos do shell do dispositivo VTS usando o comando adb shell ou o driver do shell VTS em execução no dispositivo (recomendado).

Usando shell ADB

Testes que exigem desligar a porta USB ou reinicializar o dispositivo durante o teste devem usar o shell ADB, pois o driver do shell VTS não está disponível sem uma conexão USB persistente. Você pode invocar o shell do ADB a partir do objeto AndroidDevice no script de teste do Python. Exemplos:

  • Obtenha um objeto de dispositivo Android:
    self.device = self.android_devices[0]
    
  • Emita um único comando shell:
    result = self.device.adb.shell(‘ls')
    

Usando o driver de shell VTS

O driver do shell VTS é um agente binário que é executado no dispositivo e executa comandos do shell. Por padrão, o VTS usa o driver shell se o driver estiver sendo executado no dispositivo, porque esse método possui menos latência do que o comando adb shell .

Figura 1. Driver do shell VTS.

A estrutura do VTS suporta testes em vários dispositivos, onde cada dispositivo Android é representado como um objeto AndroidDevice no corredor base. Por padrão, a estrutura VTS envia binários do agente VTS e do driver shell VTS para cada dispositivo Android e estabelece conexões TCP com os agentes VTS nesses dispositivos.

Para executar um comando shell, o script Python do lado do host faz uma chamada de função ao objeto ShellMirror dentro do objeto AndroidDevice. O objeto ShellMirror empacota os textos de comando do shell em uma mensagem protobuf e a envia (via canal TCP) para o agente VTS no dispositivo Android. O agente em execução no dispositivo encaminha o comando do shell para o driver do shell VTS por meio do soquete Unix.

Quando o driver do shell do VTS recebe um comando do shell, ele executa o comando via nohup no shell do dispositivo para impedir a interrupção . Stdout, stderr e código de retorno são recuperados do nohup e enviados de volta ao agente VTS. Por fim, o agente responde ao host envolvendo os resultados do comando em uma mensagem protobuf .

Vantagens

As vantagens de usar o driver do shell VTS em vez do adb shell incluem:

  • Confiabilidade. O driver de shell VTS usa nohup para executar comandos na configuração padrão. Como os testes VTS são principalmente testes HAL e kernel de nível inferior, o nohup garante que os comandos do shell não nohup durante a execução.
  • Desempenho . Enquanto o comando adb shell armazena em cache alguns resultados (como listar arquivos em um diretório), ele tem uma sobrecarga de conexão ao executar tarefas como executar um binário de teste. O driver de shell VTS mantém uma conexão ativa durante todo o teste, portanto a única sobrecarga é a comunicação USB. Em nossos testes, o uso do driver do shell VTS para executar um comando com 100 chamadas para um binário gtest vazio é cerca de 20% mais rápido que o uso do adb shell ; a diferença real é maior, pois a comunicação do shell VTS possui um registro extensivo.
  • Manutenção do Estado . O driver do shell VTS mantém uma sessão de terminal para cada nome de terminal (o nome padrão do terminal é o padrão ). As variáveis ​​de ambiente definidas em uma sessão do terminal estão disponíveis apenas para comandos subsequentes na mesma sessão.
  • Extensível . As comunicações de comando do shell entre a estrutura VTS e o driver de dispositivo são agrupadas em protobuf para permitir a possível compactação, comunicação remota, criptografia etc. no futuro. Outras possibilidades para melhorar o desempenho também estão disponíveis, incluindo a análise de resultados no lado do dispositivo quando a sobrecarga de comunicação se torna maior que a análise de sequência de resultados.

Desvantagens

As desvantagens de usar o driver do shell VTS em vez do adb shell incluem:

  • Binários adicionais . Os arquivos do agente VTS devem ser enviados ao dispositivo e limpos após a execução do teste.
  • Requer conexão ativa . Se a conexão TCP entre o host e o agente for perdida durante o teste (devido à desconexão do USB, desligamento da porta, falha do dispositivo etc.) intencional ou involuntariamente, um comando do shell não poderá ser transmitido ao agente VTS. Mesmo com a mudança automática para o adb shell , o resultado e o estado do comando antes da desconexão seriam desconhecidos.

Exemplos

Exemplos de uso de comandos de shell em um script de teste Python do lado do host do VTS:

  • Obtenha um objeto de dispositivo Android:
    self.device = self.android_devices[0]
    
  • Obtenha um objeto de shell para o dispositivo selecionado:
    self.shell = self.device.shell
    
  • Emita um único comando shell:
    results = self.shell.Execute(‘ls')
    
  • Emita uma lista de comandos do shell:
    results = self.shell.Execute([‘cd /data/local/tmp', ‘ls'])
    

Objeto de resultado do comando

O objeto de retorno da execução do comando shell é um dicionário que contém as chaves stdouts , stderrs e return_codes . Independentemente de o comando shell ser fornecido como uma única cadeia ou uma lista de cadeias de comando, cada valor do dicionário de resultados é sempre uma lista.

Para verificar o código de retorno de uma lista de comandos, o script de teste deve verificar os índices. Exemplo:

asserts.assertFalse(any(results[‘return_codes']), ‘some command failed.')

Como alternativa, o script pode verificar cada índice de comando individualmente. Exemplo:

asserts.assertEqual(results[‘return_codes'][0], 0, ‘first command failed')
asserts.assertEqual(results[‘return_codes'][1], 0, ‘second command failed')