Fragmentação de testes

Quando o corpus de teste é grande ou o tempo de execução é longo, oferecemos a possibilidade de dividir os testes em vários dispositivos: fragmentação.

A fragmentação tem pré-requisitos. para que o executor de testes ofereça suporte à fragmentação.

A maioria dos principais executores de testes já aceita fragmentação, portanto trabalho é obrigatório. Eles já oferecem suporte à fragmentação: testes de instrumentação, os testes conduzidos pelo host, o GTest.

Há dois tipos de fragmentação compatíveis com o Tradefed: local e distribuído. Eles compartilham algumas semelhanças, portanto esta página descreve as propriedades comuns e depois as especificidades de cada uma.

Propriedades comuns

As duas formas de fragmentação assumem as mesmas propriedades dos executores de testes: fragmentos precisam ser independentes e deterministas. A primeira etapa das duas fragmentações para criar a lista ordenada completa dos testes e dividi-los em diferentes grupos/fragmentos.

A principal diferença das formas de fragmentação é a maneira como elas executam os testes. Confira mais detalhes nas seções abaixo.

Fragmentação local

Fragmentação local significa todos os dispositivos envolvidos na execução do invocação estão conectados ao mesmo host físico.

Execução

A fragmentação local aproveita todos os dispositivos que estão conectados ao mesmo host criando um pool de testes que precisa ser executado e tendo cada testes de sondagem de dispositivo quando estiver sem custo financeiro (ou seja, concluído com o teste anterior). Isso resulta em uma utilização otimizada do dispositivo. Também a chamamos fragmentação dinâmica.

Opções

--shard-count XX

Fragmentação distribuída

Fragmentação distribuída significa todos os dispositivos envolvidos na execução do a invocação fragmentada pode residir em qualquer lugar e ser conectada a diferentes recursos host.

Execução

A fragmentação distribuída ocorre após a criação da lista de testes e do conteúdo de cada fragmento executa apenas o fragmento solicitado no momento. Então, tudo os fragmentos distribuídos criam a mesma lista primeiro e, em seguida, executam uma um subconjunto exclusivo dele, o que resulta na execução de todos os testes.

A propriedade principal desse formulário é que os fragmentos não têm conhecimento total e podem falhar de forma independente.

A principal desvantagem é que o comprimento do fragmento não é necessariamente equilibrado porque não podemos prever com antecedência o tempo de execução de cada teste em cada fragmento. A distribuição precisa ter aproximadamente o mesmo número de casos de teste. em cada fragmento.

Opções

--shard-count XX --shard-index XX

Fragmentação de token

A fragmentação de token só pode ser usada com fragmentação local. A sinalização é inoperacionais em casos de uso de fragmentação não locais. Às vezes, um dos dispositivos envolvidos na fragmentação têm recursos especiais que outras pessoas não têm, carda. Alguns testes podem funcionar apenas quando esse recurso especial estiver disponível e falhariam de outra forma.

A fragmentação de tokens é a nossa solução para esses casos de uso. Os módulos de teste podem declarar de qual recurso especial eles precisam na AndroidTest.xml; O Tradefed encaminha os testes para um dispositivo que tem o recurso.

Configuração de XML

<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />

O value do token corresponde ao valor TokenProperty e está associado a um manipulador TokenProviderHelper

Isso permite que os módulos de teste sejam executados em dispositivos que possam para executar os testes.

E se nenhum dispositivo puder executar o teste?

Se nenhum dispositivo disponível tiver o recurso correspondente ao módulo de teste, o módulo de teste falhou e foi ignorado porque não pode ser executado corretamente.

Por exemplo, se um módulo de teste solicitar a execução de um chip, mas nenhum dispositivo tiver no chip, o módulo de teste vai falhar.

Implementação

Transmita essa flag de recurso para a linha de comando principal do Tradefed:

--enable-token-sharding