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 comENABLE_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 https://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.
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.
- 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.
- 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).
- A automação substitui o aplicativo Homescreen pelo aplicativo test-container usando uma preferência.
- A automação carrega o aplicativo mochitest no iframe do aplicativo test-container (esse script é executado com privilégios chrome pelo marionette).
- 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).
- 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.