Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

Firefox OS mochitests

Mochitest é um framework de testes automatizados construído no topo das bibliotecas JavaScript MochiKit, que fornece testes funcionais e de API. É apenas um dos frameworks de testes de regressão automatizados usados ​​pela Mozilla. Os testes apresentam os resultados (sucesso ou falha) usando chamadas de funções JavaScript. Esse artigo apresenta as etapas necessárias para executar o Mochitests no Firefox OS, no B2G Desktop, no dispositvo ou no emulador.

Executando mochitests nas imagens do B2G desktop

O primeiro caso que vamos cobrir é a execução do B2G no B2G desktop. Você vai precisar instalar o Gaia e gerar um perfil antes de começar.

Usando mach

Mach é uma interface em linha de comando que ajuda os desenvolvedores executarem tarefas comuns, vamos observar como usá-la executando o mochitests. Se você tem um B2G Desktop local, compile-o habilitando a configuração ENABLE_MARIONETTE=1 no seu mozconfig, você pode usar mach para executar todos os mochitests. Execute o seguinte comando no diretório raiz (root) da sua árvore do fonte do seu B2G.

./mach mochitest-b2g-desktop --profile path/to/non/debug/gaia/profile

Alternativamente você pode configurar a variável de ambiente $GAIA_PROFILE para evitar ter que informar o diretório todas as vezes que executar o comando.

Para executar um teste específico:

export GAIA_PROFILE=path/to/non/debug/gaia/profile
./mach mochitest-b2g-desktop test_path

Para ver as opções do mochitest:

./mach help mochitest-b2g-desktop

Nota: Alguns contribuidores tem trabalhado num projeto chamado b2g-commands, que pretende trazer alguns dos comandos disponíveis no Firefox desktop para a imagem B2G, como diagnósticos mais fáceis e construção do ambiente de inicialização. Mais detalhes no artigo Add more Mach to your B2G.

Usando o mochitest

Você pode executar mochitest-plain na imagem do B2G Desktop.

Pre-requisitos

  • Usar uma imagem com a opção Marionette ativa (compilada com ENABLE_MARIONETTE=1 no mozconfig.)
  • Ter gerado um perfil gaia manualmente (que pode ter sido feito se você compilou o B2G desktop manualmente). Deve ser um perfil non-DEBUG.
  • Não pode utilizar um perfil Gaia que tenha sido feito com um GAIA_DOMAIN personalizado.

Configuração para mozilla-b2g18 trees

cd $GECKO_OBJ_DIR
python $GECKO_SRC_DIR/python/virtualenv/virtualenv.py venv
source venv/bin/activate
cd $GECKO_SRC_DIR/testing/marionette/client
python setup.py develop

Nota: você pode precisar instalar setuputils.py antes de executar setup.py

Configuração para trunk trees, incluindo mozilla-central

cd $GECKO_OBJ_DIR
source _virtualenv/bin/activate

Executando os testes

Você pode executar mochitests usando os seguintes comandos:

cd $GECKO_OBJ_DIR/_tests/testing/mochitest
python runtestsb2g.py --desktop --console-level INFO --profile /path/to/gaia/profile --app /path/to/b2g

O executor do teste vai executar o b2g desktop e executar os testes, todos os mochitests B2G por padrão, o que consome muito tempo. Outras opções comuns são as seguintes:

  • Para executar testes específicos, indique em --test-path.
  • Podem ser adicionados os argumentos --total-chunks e --this-chunks da mesma forma como é feito com o mochitest do desktop.
  • Finalmente, você pode usar python runtestsb2g.py --help para uma lista completa de argumentos.

Executando mochitest em imagens do emulador

Você pode executar mochitest-plain em dispositivos B2G. Mas atualmente, funciona melhor quando executado em um emulador.

Você não pode executar o mochitest em um dispositivo B2G que tenha sido compilado com a opção PRODUCTION=1.  Para executar os mochitests a imagem deve ser a de engenharia. Veja Bug 1037858.

Usando mach

Se você possuir uma imagem local de um emulador que foi realizada a partir de um branch do Gecko (não a mozilla-b2g18), a forma mais fácil de executar um mochitest é com o mach.  Para executar todos os testes:

cd $B2G_DIR
./mach mochitest-remote

Para executar um teste específico:

./mach mochitest-remote test_path

Nota: Esses caminhos são relativos ao diretório fonte do GeckoTest paths are relative to gecko's source directory, por exemplo: content/base/test/test_CrossSiteXHR.html

Para ver as opções do mochitest:

./mach help mochitest-remote

Usando o mochitest

Similar ao anterior, você pode executar o mochitest em compilações B2G no dispositivo ou emulador utilizando o executor do mochitest. Os pré-requisitos s˜ to before, you can also run mochitest on device or emulator builds of B2G using the mochitest runner. The prerequisites são um pouco mais complexos.

Pré-requisitos

  • Você precisa compilar o B2G para o dispositivo que você está testando(veja Compilando e instalando o Boot to Gecko).
  • Você não pode usar a imagem do Gaia que foi compilada com um GAIA_DOMAIN customizado.
  • Você precisa ter uma versão desktop do xpcshell (ele precisa rodar no host), você o terá se tiver uma cópia do Firefox no seu sistema. Alternativamente, você pode baixar uma cópia para o Linux a partir de http://people.mozilla.com/~ahalberstadt/getb2g/xre.zip.
  • Você precisa instalar alguns pacotes Python que são necessários, mesmo em um virtualenv. Leia a seguir para maiores detalhes..

Configuração para mozilla-b2g18 trees

cd $GECKO_OBJ_DIR
python $GECKO_SRC_DIR/python/virtualenv/virtualenv.py venv
source venv/bin/activate
cd $GECKO_SRC_DIR/testing/marionette/client
python setup.py develop

Nota: antes de executar setup.py você precisa instalar setuputils.py

Configuração para trunk trees, incluindo mozilla-central

cd $GECKO_OBJ_DIR
source _virtualenv/bin/activate

Executando os testes

Você pode executar o plano mochitest-plain usando um dos seguintes conjunto de comandos no terminal.

Para executar testes no dispositivo, o computador e o dispositivo devem estar na mesma rede sem fio, uma vez que o dispositivo requisita arquivos de um servidor HTTP que foi iniciado pelo mochitest no computador. Para iniciar os testes utilize os comandos:

adb forward tcp:2828 tcp:2828
cd $GECKO_OBJ_DIR/_tests/testing/mochitest
python runtestsb2g.py --b2gpath $B2G_HOME --xre-path /path/to/dir/containing/desktop/xpcshell --console-level INFO \
  --httpd-path ./

Se você estiver usando o emulador:

cd $GECKO_OBJ_DIR/_tests/testing/mochitest
python runtestsb2g.py --b2gpath $B2G_HOME --xre-path /path/to/dir/containing/desktop/xpcshell --console-level INFO \
  --httpd-path ./ --emulator arm

Aviso: Executar mochitestes em um emulador B2G no OS X não é suportado, ao invés disso utilize o Linux.

Os comandos acima executam todos os mochitests B2G por padrão, o que consome muito tempo. Outras opções comuns são as seguintes:

  • Para executar testes específicos: --test-path.
  • Opcionalmente você pode incluir os argumentos --total-chunks e --this-chunks como feito com mochitests no desktop.
  • Finalmente, você pode executar  python runtestsb2g.py --help para uma lista completa de argumentos possíveis.

Após ser iniciado o script runtestsb2g.py, o teste vai chamar o emulador para você (se estiver executando os testes no emulador) ou reiniciar o seu dispositivo (se estiver executando os testes no dispositivo) e comecará a executar os testes. Como o emulador é lento, é necessário copiar um perfil de testes para o emulador e reinicar o processo B2G e pode consumir alguns minutos para iniciar os testes. Antes de ser iniciado você verá apenas uma tela preta ou branca. Após alguns minutos você verá o log dos testes no console.

Quando os testes terminarem, o emulador será encerrado, ou se você estiver usando um dispositivo, o mesmo será reinicializado.

Note: Existe um bug 780034 que evita o mochitest terminar quando você executa um teste simples, ao contrário do que ocorre no teste completo. Nesse caso, quando você perceber que o teste terminou, você pode pressionar CTRL+C para terminar o executor de testes.

Executando o mochitest com um emulador baixado da internet

Se você compilou o B2G para outra configuração (como otoro) e gostaria de executar os testes em um emulador, você pode fazer sem a necessidade de compilar você mesmo um emulador. Apenas baixe a última versão do emulador arm, e utilize as mesmas instruções acima, substituindo o argumento --b2gpath $B2G_HOME para runtestsb2g.py com --b2gpath /path/to/unpacked/emulator.

Executando o mochitest com um emulador e os testes baixados da internet

Você também pode executar mochitests em um emuladodr sem compilar ou clonar qualquer coisa. Para fazer isso, você precisa baixar a última versão do emulador arm e descompactá-la e baixar a última versão do arquivo tests.zip (no mesmo lugar de onde baixou o emulador) e descompactá-lo.

Você também precisará do virtualenv instalado no seu sistema.

Então você poderá configura seu ambiente e executar os testes:

virtualenv venv
source venv/bin/activate
cd $TESTS_DIR/marionette
python setup.py develop
cd $TESTS_DIR/mochitests 
python runtestsb2g.py --b2gpath /path/to/extracted/emulator --xre-path /path/to/desktop/xpcshell --console-level INFO \
  --httpd-path ./ --emulator arm

Detalhes técnicos de implementação

Existem algumas coisas que acontecem quando você executa os mochitests B2G.

  1. O aplicativo Homescreen é substituído por um aplicativo certificado chamado test-container (observe que isso é verificado no Gaia). Em teoria esse aplicativo é feito para ser genério, uma vez que qualquer ferramenta de testes pode usá-lo, porém até agora somente o mochitest o utiliza.
  2. O aplicativo test-container expões um simples <iframe mozbrowser mozapp> no qual os mochitests são carregados (mochitests possuem seus próprios manifest.webapp).
  3. A automação substitui o aplicativo Homescreen pelo aplicativo test-container usando uma preferência.
  4. A automação carrega o aplicativo mochitest no iframe do aplicativo test-container (esse script é executado com privilégios chrome pelo marionette).
  5. A automação carrega poderes especiais no frame filho que está executando o mochitests e configura o gerenciador de mensagens (faz com que o mochitests acesse algumas APIs privilegiadas).
  6. A automação carrega a url do mochitest no iframe do mochitest. Isso inicia os testes.

Nota: Se você estiver interessado em saber como as coisas funcionam, a resposta rápida é: satisfazer os requisitos de permissão para os testes. Para uma resposta mais detalhada verifique bug 798580 e bug 814140.

 

Etiquetas do documento e colaboradores

 Colaboradores desta página: jwhitlock, rbrandao
 Última atualização por: jwhitlock,