Configurar testes ACTS

Nesta página, descrevemos como configurar testes do ACTS.

Fontes de configuração

O Android Comms Test Suite (ACTS) tem três fontes principais de configuração:

  • A interface de linha de comando (CLI)
  • O arquivo de configuração do ACTS
  • Variáveis de ambiente

Os valores dessas fontes são combinados em uma única configuração usada para executar um teste ACTS. Se os valores forem especificados em vários locais, eles serão substituídos com base na ordem acima, em que a CLI tem precedência.

Uma observação sobre as variáveis de ambiente

Tenha cuidado ao usar variáveis de ambiente para testes do ACTS. Esses valores são os menos visíveis para o usuário e não são recomendados para uso fora da estação de trabalho de um desenvolvedor. As variáveis de ambiente são desativadas durante testes automatizados do ACTS para evitar o envenenamento do ambiente.

Variáveis de configuração obrigatórias

Todo teste ACTS exige que as variáveis a seguir sejam definidas.

Caminhos de teste do ACTS

O ACTS é executado de um único local de entrada principal. Como resultado, o local do caminho do teste é desconhecido para o executor.

Defina o local do caminho de teste usando a variável de ambiente ACTS_TESTPATH ou a sinalização -tp/--testpaths na linha de comando. O valor pode ser uma lista de diretórios.

Classes de teste ACTS

O ACTS precisa saber quais classes de teste executar. Pode ser uma regex ou uma lista de nomes de classes de teste.

Para definir esse valor, use a sinalização -tc/--test_class na linha de comando. Essa sinalização também aceita uma lista de nomes de classe. Os nomes das classes precisam corresponder aos nomes de arquivo correspondentes. Por exemplo, SampleTest precisa ser encontrado em SampleTest.py.

Caminho do registro do ACTS

O ACTS precisa ter um local para gravar registros que não sejam STDOUT. O ACTS grava registros de depuração completos contendo dados que podem ajudar a determinar por que alguns testes estão falhando. Para evitar confusão, o ACTS não grava esses registros em STDOUT.

Para definir o caminho do registro, use a variável de ambiente ACTS_LOGPATH ou a sinalização -lp/--logpath na linha de comando.

Caminho de configuração do ACTS

Para executar o teste, o ACTS precisa saber qual testbed existe. A configuração do ACTS contém todos os dispositivos no testbed e todos os parâmetros especiais de teste ou ambiente que possam ser necessários. Defina esse valor na linha de comando usando -c/--config.

Se houver vários testbeds na configuração, o ACTS executará os testes para cada testbed. Para executar o teste apenas para um único testbed na lista, use o argumento de linha de comando -tb/--testbed <NAME>.

Um exemplo de estação de trabalho local

A maioria dos usuários do ACTS desenvolve em uma única ramificação de repositório do Android e tem uma configuração semelhante a esta:

# in ~/.bashrc
ACTS_LOGPATH='/tmp/acts_logpath'
ACTS_TESTPATH='~/android/<REPO_BRANCH>/tools/test/connectivity/acts_tests/'

# On cmdline
$ act.py -c ~/acts_configs/local_config.json -tc SampleTest -tb marlin

Se os usuários do ACTS forem executados em várias ramificações, geralmente eles o executarão no diretório acts/framework e usarão um caminho relativo para ACTS_TESTPATH:

# in ~/.bashrc
ACTS_LOGPATH='/tmp/acts_logpath'
ACTS_TESTPATH='../acts_tests/'

# On cmdline
$ cd ~/android/main/tools/test/connectivity/acts_tests/acts_contrib/
$ act.py -c ~/acts_configs/local_config.json -tc SampleTest -tb marlin

Configurar os testbeds

O arquivo de configuração do ACTS fornece todas as informações necessárias para executar testes em dispositivos de hardware:

{
  "testbed": {
    "my_testbed": {
      "my_testbed_value": "value"
    },
    "another_testbed": {
      "AndroidDevice": [
        "53R147"
      ]
    }
  },
  "user_parameter_1": "special environment value",
  "user_parameter_2": "other special value"
}

A unidade base dessa configuração é o testbed. Na configuração de exemplo acima, o my_testbed do testbed é criado com um único valor do testbed. O segundo testbed, another_testbed, tem uma configuração de controle especial que contém as informações de uma lista de dispositivos Android. Esses dispositivos são armazenados em uma lista de dispositivos em self.android_devices. Se um testbed não especificar um objeto AndroidDevice, uma classe de teste que espera um objeto AndroidDevice vai gerar uma exceção. Para ver uma lista completa de configurações do controlador com suporte que acompanham o ACTS, consulte a lista em /acts/framework/acts/controllers/.

Todos os outros valores, que não são especiais mencionados na seção acima, são armazenados em self.user_params como um dicionário. Esse é um bom lugar para armazenar informações de ambiente ou de teste, por exemplo, se os smartphones estão em um ambiente de dados limitado ou por quanto tempo coletar dados para um teste.

Casos especiais do AndroidDevice

Para facilitar o desenvolvimento quando você quer ter vários dispositivos com diferentes propriedades disponíveis, o AndroidDevice tem alguns casos especiais.

Formato de configuração JSON

Todos os pares de chave-valor no exemplo JSON a seguir são definidos como o objeto AndroidDevice correspondente. Se a configuração tentar substituir um parâmetro definido no atributo AndroidDevice, um ControllerError será gerado.

  "AndroidDevice": [{"serial": "XXXXXX", "label": "publisher"},
                    {"serial": "YYYYYY", "label": "subscriber", "user_parameter_1": "anything"}]

Em seguida, no script de teste, você pode usar uma função de filtro para extrair o dispositivo correto e acessar parâmetros extras do objeto do dispositivo:

  def setup_class(self):
      self.pub = next(filter(lambda ad: ad.label == 'publisher',
                             self.android_devices))
      self.sub = next(filter(lambda ad: ad.label == 'user_parameter_1',
                             self.android_devices))

Parâmetro opcional

O seguinte é um parâmetro opcional:

  • adb_logcat_param: uma string anexada ao comando adb logcat para coletar registros do adb. Por padrão, adb logcat -v threadtime -b all é usado. Se adb_logcat_param for definido, a seção -b all será substituída. Por exemplo, definir adb_logcat_param como -b radio altera o comando para adb logcat -v threadtime -b radio.