Configurar a fragmentação

Esta página descreve o que é possível ajustar para um módulo de conjunto (AndroidTest.xml) usando fragmentação e ter o melhor desempenho de velocidade durante a execução contínua no laboratório. Vamos tentar descrever as opções de maneira genérica com a lógica para usar cada uma delas.

Ao executar continuamente um conjunto no laboratório, ele geralmente é fragmentado em vários dispositivos para reduzir o tempo total de conclusão. Normalmente, o arnês tenta equilibrar o tempo de execução de cada fragmento para minimizar o tempo total de conclusão (quando o último fragmento termina). No entanto, devido à natureza de alguns testes, nem sempre temos introspecção suficiente e precisamos que o proprietário do módulo ajuste algum comportamento.

Pode ou não ser fragmentado?

É possível adicionar uma tag a um módulo (AndroidTest.xml) com <option name="not-shardable" value="true" /> para notificar o harness de que ele não deve ser fragmentado.

Em um módulo típico, deixar o arnés fragmentar seu módulo (o comportamento padrão) é a coisa certa a fazer. Mas, em alguns casos, talvez você queira substituir esse comportamento:

  • Quando a configuração do módulo é cara:

O fragmento de um módulo resulta na preparação (instalar APK, enviar arquivo etc.) que pode ser executada uma vez por dispositivo envolvido. Se a configuração do módulo for longa e cara e não valer a pena ser replicada em comparação com o tempo de execução do teste, marque o módulo como não fragmentável.

  • Quando o número de testes no seu módulo é baixo:

O fragmentação de um módulo faz com que todos os casos de teste sejam executados de forma independente em dispositivos diferentes. Isso se relaciona ao primeiro ponto: se o número de testes for baixo, você poderá acabar com um único teste ou nenhum em alguns fragmentos, o que tornaria qualquer etapa de preparação bastante cara. Por exemplo, não vale a pena instalar um APK para um único caso de teste.

Testes de instrumentação: número máximo de fragmentos?

Um teste de instrumentação executado pelo AndroidJUnitTest não expõe ao ambiente de teste quantos testes fazem parte da instrumentação até que o APK seja instalado e executado. Essas operações são caras e não podem ser executadas no momento do fragmentação para todos os módulos que fazem parte do pacote.

O arnês pode fragmentar demais o teste de instrumentação e acabar com alguns fragmentos vazios. Fragmentar um teste de instrumentação com cinco testes em seis fragmentos resulta em cinco fragmentos com um teste e um fragmento sem testes. Cada um desses fragmentos exigiria uma instalação de APK cara.

Assim, quando o número de testes no APK de teste de instrumentação é baixo, marcar o módulo com <option name="not-shardable" value="true" /> permite que o arnês saiba que não vale a pena fragmentar esse módulo.

O executor AndroidJUnitTest tem uma opção especial que permite especificar o número máximo de fragmentos em que ele pode ser dividido: <option name="ajur-max-shard" value="5" />.

Isso permite especificar um número máximo de vezes que a instrumentação pode ser fragmentada, independente do número de fragmentos solicitados no nível de invocação. Por padrão, a instrumentação é dividida no número de fragmentos solicitado para a invocação.

Por exemplo, se o APK de teste de instrumentação tiver apenas dois casos de teste, mas você ainda quiser fragmentá-lo, um valor ajur-max-shard de 2 vai garantir que você não crie fragmentos vazios.