Testes de fragmentos

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

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

A maioria dos principais executores de teste já suporta o sharding, portanto, nenhum trabalho adicional é necessário. Eles já suportam sharding: testes de instrumentação, testes conduzidos pelo host, GTest.

Existem dois tipos de fragmentação que suportamos no Tradefed: local e distribuído. Eles compartilham algumas semelhanças, então descreveremos as propriedades comuns e, em seguida, as especificidades de cada um.

Propriedades comuns

Ambas as formas de fragmentação assumem as mesmas propriedades dos executores de testes: fragmentos precisam ser independentes e determinísticos . A primeira etapa de ambos os shards é construir a lista ordenada completa dos testes e depois dividi-los em diferentes grupos/shards.

A principal diferença dos formulários de fragmentação está na forma como executam os testes. Mais detalhes nas seções abaixo.

Fragmentação local

A fragmentação local significa que todos os dispositivos envolvidos na execução da chamada fragmentada estão conectados ao mesmo host físico.

Execução

O sharding local tira proveito de todos os dispositivos conectados ao mesmo host criando um pool de testes que precisa ser executado e fazendo com que cada dispositivo faça testes quando estiver livre (ou seja, feito com o teste anterior). Isso resulta em uma utilização otimizada do dispositivo. Também chamamos isso de fragmentação dinâmica .

Opções

--shard-count XX

Fragmentação distribuída

A fragmentação distribuída significa que todos os dispositivos envolvidos na execução da chamada fragmentada podem residir em qualquer lugar e ser conectados a diferentes hosts físicos.

Execução

O sharding distribuído ocorre na construção da lista de testes, e o conteúdo de cada shard continuará a executar apenas o shard atualmente solicitado. Assim, todos os shards distribuídos constroem a mesma lista primeiro e depois executam um subconjunto dela mutuamente exclusivo, o que resulta na execução de todos os testes.

A principal propriedade deste formulário é que os fragmentos são completamente inconscientes uns dos outros e podem falhar independentemente.

A principal desvantagem é que o comprimento do estilhaço não é necessariamente balanceado, simplesmente porque não podemos prever com antecedência o tempo de execução de cada teste em cada estilhaço. A distribuição é feita para ter aproximadamente o mesmo número de casos de teste em cada estilhaço.

Opções

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

Fragmentação de token

A fragmentação de token pode ser usada apenas com fragmentação local. O sinalizador ficará inoperante em casos de uso de fragmentação não local. Às vezes, um dos dispositivos envolvidos na fragmentação contém recursos especiais que outros não possuem, como um cartão SIM. Alguns testes podem funcionar apenas quando esse recurso especial estiver disponível e, caso contrário, falharão.

A fragmentação de token é nossa solução para esses casos de uso. Os módulos de teste podem declarar qual recurso especial eles precisam em seu AndroidTest.xml e o Tradefed encaminhará os testes para um dispositivo que tenha o recurso.

Configuração XML

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

O value do token corresponde ao TokenProperty da Tradefed e está associado a um manipulador em TokenProviderHelper .

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

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 falhará e será ignorado, pois não pode ser executado corretamente.

Por exemplo, se um módulo de teste solicitar a execução de um cartão SIM, mas nenhum dispositivo tiver um cartão SIM, o módulo de teste falhará.

Implementação

Passe este sinalizador de recurso para a linha de comando principal do Tradefed:

--enable-token-sharding