fragmentação de teste

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

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

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

Existem dois tipos de sharding que apoiamos no Tradefed: local e distribuído. Eles compartilham algumas semelhanças, portanto esta página descreve as propriedades comuns e as especificidades de cada uma.

Propriedades comuns

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

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

Fragmentação local

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

Execução

A fragmentação local aproveita o fato de todos os dispositivos estarem conectados ao mesmo host, criando um conjunto de testes que precisam ser executados e fazendo com que cada dispositivo faça testes de sondagem 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 invocação fragmentada podem residir em qualquer lugar e estar conectados a diferentes hosts físicos.

Execução

A fragmentação distribuída ocorre na construção da lista de testes, e o conteúdo de cada fragmento executa apenas o fragmento solicitado no momento. Portanto, todos os fragmentos distribuídos constroem a mesma lista primeiro e depois executam um subconjunto mutuamente exclusivo dela, o que resulta na execução de todos os testes.

A principal propriedade deste formulário é que os fragmentos não se conhecem completamente e podem falhar independentemente.

A principal desvantagem é que o comprimento do fragmento não é necessariamente equilibrado, simplesmente porque não podemos prever antecipadamente o tempo de execução de cada teste em cada fragmento. A distribuição é feita para 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 pode ser usada somente com fragmentação local. O sinalizador está 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 está disponível e, caso contrário, falhariam.

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

Configuração XML

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

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

Isso permite que 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 porque 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