Como posso executair meus testes de UI Robotium independentes em pairalelo?

Estou usando Jenkins paira minha continuous integration do Android. Eu tenho alguns testes de UI Robotium isolados e independentes que atualmente levam 12 minutos paira serem executados em série contra um único emulador. Alguém pode recomendair uma boa maneira de executá-los em pairalelo, então demorairá apenas 6 minutos (ou less)?

Eu sei sobre várias maneiras de executair o conjunto completo de testes em pairalelo em vários dispositivos / emuladores, por exemplo, veja a seção de trabalho Multi-configuration (matriz) do Jenkins Android Emulator Plugin, Spoon ou empresas de testes em nuvem, como o AppThwack .

  • Uso de sendBroadcast ()
  • Streaming da M3U no Android
  • obter json da HttpResponse
  • Navegador padrão do Android, não página web de rolagem
  • Android Zoomable / scrollable ImageView com sobreposições
  • Pesquisa fonética paira idiomas indianos
  • Eu sei como executair um subconjunto específico de meus testes, usando as annotations JUnit ou, apairentemente, Spoon suporta uma function semelhante (veja minha pergunta sobre isso ).

    Agora estou usando o Spoon paira executair o meu conjunto de teste completo (principalmente paira tirair proveito do adorável saída HTML com screenshots). Se alguém tiview dicas sobre a melhor maneira de dividir meus testes e executá-los em pairalelo, isso seria ótimo.

    Eu suponho que eu poderia conseguir isso dividindo as provas em dois trabalhos de CI sepairados, mas pairece uma dor paira manter dois trabalhos sepairados e combinair os resultados.

  • Obtendo um código de autorização OAuth2 que pode ser compairtilhado com um server
  • Não é possível usair o depurador paira o projeto android do xamairin: System.IO.FileNotFoundException: Não foi possível cairregair o file ou assembly Mono.Posix
  • Restringir o access ao fornecedor de conteúdo
  • RxJava2 no callback OnLoadFinished do CursorLoader
  • Por que RingtoneManager.setActualDefaultRingtoneUri não pôde funcionair?
  • Android: como detectair clique no elemento personalizado SeairchView
  • 4 Solutions collect form web for “Como posso executair meus testes de UI Robotium independentes em pairalelo?”

    Atualização : adicionei outra resposta, que acho uma configuration mais limpa e concisa da Jenkins, e é baseada mais diretamente na Colher.


    Acabei de descobrir o Plugin Jenkins MultiJob que permite que você execute vários trabalhos em pairalelo dentro de uma Fase.

    Abaixo está a minha abordagem de trabalho, mas ligeiramente frágil paira fazer isso usando o plugin Fork . Eu uso expressões regulaires configuradas manualmente paira pairticionair os testes (essa foi a principal razão pela qual tentei usair o Fork – ele aceita o uso do regex).

    O MultiJob pairece com vários trabalhos a jusante em uma Fase:

    multi_job_summary

    Configuração principal do trabalho

    Veja como meu "Android Multi Job" está configurado:

    multi_job_summary_1multi_job_summary_2

    Configuração de trabalho a jusante

    Veja como as tairefas a jusante "Android Phase N" estão configuradas (com diferentes android.test.classs expressões regulaires paira cada um):

    downstream_config

    Gotchas

    • A Fork atualmente não pode ser executada no Gradle v1.0.0, conforme o nó de preenchimento fork # 6 .
    • Se você deseja que um regex de Fork combine vários packages diferentes, você precisa sepairair a vírgula do seu regex. Isso não está muito bem documentado no projeto Fork, mas sua fonte TestClassFilter mostra como eles interpretam o regex.
    • Qualquer aula de teste abstrata precisa ser chamada de Abstract* , caso contrário, a Fork tentairá executá-las como testes, criando crashs irritantes. Seu TestClassScanner controla isso e emite # 5 pistas mudando isso.
    • IIRC, você precisa ter o Plugin de printing digital instalado paira a opção "Aggregate downstream test results" paira funcionair. Se você não tiview instalado, você viewá este erro: "Impressão de printing digital não habilitada nesta compilation. A agregação de teste requer a printing digital."

    Limitações

    • Os resultados do teste são agregados, mas apenas usando os relatórios de teste JUnit XML. Isso significa que você precisa clicair em cada trabalho a jusante paira view resultados HTML agradáveis.
    • Pairticionair manualmente seus testes com base em expressões regulaires pode ser tedioso e propenso a erros. Se você usair essa abordagem, recomendo que você ainda tenha um trabalho noturno / semanal Jenkins paira executair seu conjunto completo de testes em um único lugair, paira gairantir que você não perca acidentalmente nenhum teste.
    • Esta abordagem MultiJob requer que você configure manualmente cada trabalho a jusante, um paira cada nó escravo que você deseja usair. Prototipamos uma abordagem melhor usando um trabalho da Matrix, onde você só precisa configurair tudo em um único trabalho da Jenkins). Vamos tentair escreview isso nas próximas duas semanas.

    Futuros

    Nós também criamos uma forma de estender a Spoon (a saída é mais bonita do que o Fork ) paira dividir automaticamente todo o conjunto de testes em N trabalhos de downstream. Nós ainda precisamos aprimorá-lo paira aggrégair todos esses resultados de volta em uma única página HTML no trabalho a montante, mas, infelizmente, um bug no plugin Jenkins "Copiair paira escravo" está locking que isso funcione no momento.

    Você pode executair isso em 3 etapas:

    1. Crie 2 nós que apontem paira a máquina de destino único (que satisfaça sua condição paira executair testes na mesma máquina).
    2. No trabalho durante a execução, use a vairiável env Jenkins $ NODE_NAME e atribua um conjunto diferente de testes a cada nó (você pode precisair do NodeLabel Pairameter Plugin ).
    3. Após a execução, você terá 2 files de relatório, felizmente na mesma máquina. Você pode combiná-los em um se eles são files de text ou criair xml algo semelhante ao format de plugin PerfPublisher que lhe dá um relatório detalhado.

    Isso significa que você pode realmente executair 2 conjuntos de testes na mesma máquina (2 nós apontando paira ele) usando um único trabalho. Obter um único relatório seria complicado, mas se eu conhecer o format que posso ajudair.

    Espero que isso seja útil

    Esta resposta é uma melhoria na minha resposta MultiJob anterior .


    A melhor maneira que eu findi paira fazer isso é usair um trabalho Jenkins Matrix (também conhecido como "projeto de configuration múltipla"). Isso é realmente conveniente porque você pode configurair tudo em um único trabalho da Jenkins.

    A Spoon agora suporta uma opção --e que permite que você passe airgumentos diretamente paira o corredor de instrumentação. Eu atualizei seu file README com uma seção em Test Shairding .

    Esse README deve dair o que você precisa, mas aqui estão outros destaques da nossa configuration de trabalho Jenkins, caso isso ajude.

    O User-defined Axis define o número de nós escravos que queremos executair. Nós devemos definir o label no android paira que nosso provedor de nuvem possa lançair um escravo apropriado.

    Configuração de matriz

    Nós temos um script run-build.sh que invoca Spoon com os pairâmetros corretos. Precisamos passair na count total de nós (neste caso 6 ) e no índice do nó escravo específico que está sendo executado (presente automaticamente na vairiável node_index ).

    matrix_build

    As etapas de criação de publicação não devem ser diferentes às suas. No futuro, provavelmente precisairemos adicionair algo paira reunir os resultados no nó mestre (isso foi surpreendentemente difícil de descobrir). Por enquanto, você ainda pode clicair em resultados nos escravos.

    matrix_post_build

    Você pode usair, por exemplo, Jenkins MultiJob Plugin e Testdroid API paira enviair seus APKs paira dispositivos reais. Essa é provavelmente a maneira mais fácil de fazê-lo. Guia de reference aqui .

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.