Usar controladores de módulo

Cada módulo de pacote (definido por AndroidTest.xml) pode conter um objeto module_controller especial que pode mudar algum comportamento do módulo:

Se o módulo será executado ou não com base em algumas condições

Implementando BaseModuleController e adicionando-o ao AndroidTest.xml desta forma:

<object type="module_controller" class="com.android.tradefed.testtype.suite.module.<NAME>" />

O controlador do módulo será usado para determinar se o módulo precisa ser executado ou não, com base na implementação public abstract RunStrategy shouldRun(IInvocationContext context);.

Se é necessário coletar alguns registros ou não em falhas

Ao executar um pacote completo, é possível solicitar no nível do pacote a coleta de alguns registros de falhas (captura de tela, relatório do bug, logcat). No entanto, para alguns módulos, um registro específico solicitado pode não ter nenhum valor e simplesmente desperdiçar tempo para ser coletado. Nessa situação, um módulo pode especificar explicitamente em quais registros ele está interessado:

<object type="module_controller"
        class="com.android.tradefed.testtype.suite.module.TestFailureModuleController">
    <option name="screenshot-on-failure" value="<true OR false>" />
    <option name="bugreportz-on-failure" value="<true OR false>" />
    <option name="logcat-on-failure" value="<true OR false>" />
</object>

OBSERVAÇÃO: a implementação de controladores precisa ser genérica, se possível, para maximizar a reutilização. E o proprietário do módulo precisa analisar se pular um módulo com base na condição dele para receber a aprovação de que pular um módulo é o comportamento adequado.