1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
---
title: Firefox OS mochitests
slug: Archive/B2G_OS/Automated_testing/Mochitests
translation_of: Archive/B2G_OS/Automated_testing/Mochitests
---
<div class="summary">
<p><span class="seoSummary"><a href="/pt-BR/docs/Mochitest">Mochitest</a> é um <a class="internal" href="/pt-BR/docs/Mozilla/QA/Automated_testing" title="En/Mozilla automated testing">framework de testes automatizados</a> construído no topo das bibliotecas JavaScript <a class="external" href="http://mochikit.com/">MochiKit</a>, 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.</span></p>
</div>
<h2 id="Executando_mochitests_nas_imagens_do_B2G_desktop">Executando mochitests nas imagens do B2G desktop</h2>
<p>O primeiro caso que vamos cobrir é a execução do B2G no <a href="/pt-BR/docs/Mozilla/Boot_to_Gecko/Using_the_B2G_desktop_client">B2G desktop</a>. Você vai precisar <a href="https://developer.mozilla.org/pt-BR/Firefox_OS/Using_the_B2G_desktop_client#Downloading_Gaia">instalar o Gaia</a> e <a href="https://developer.mozilla.org/pt-BR/Firefox_OS/Using_the_B2G_desktop_client#Generating_a_profile">gerar um perfil</a> antes de começar.</p>
<h3 id="Usando_mach">Usando mach</h3>
<p><strong>Mach</strong> é 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 <code>ENABLE_MARIONETTE=1</code> no seu <a href="https://developer.mozilla.org/pt-BR/docs/Configuring_Build_Options">mozconfig</a>, você pode usar <a href="https://developer.mozilla.org/pt-BR/docs/Mozilla/Developer_guide/mach" title="/en-US/docs/Developer_Guide/mach">mach</a> para executar todos os mochitests. Execute o seguinte comando no diretório raiz (root) da sua árvore do fonte do seu B2G.</p>
<pre class="brush: bash language-html"><code class="language-html">./mach mochitest-b2g-desktop --profile path/to/non/debug/gaia/profile</code></pre>
<p>Alternativamente você pode configurar a variável de ambiente <code>$GAIA_PROFILE</code> para evitar ter que informar o diretório todas as vezes que executar o comando.</p>
<p>Para executar um teste específico:</p>
<pre class="brush: bash language-html"><code class="language-html">export GAIA_PROFILE=path/to/non/debug/gaia/profile
./mach mochitest-b2g-desktop test_path</code></pre>
<p>Para ver as opções do mochitest:</p>
<pre class="brush: bash language-html"><code class="language-html">./mach help mochitest-b2g-desktop</code></pre>
<div class="note">
<p><strong>Nota</strong>: Alguns contribuidores tem trabalhado num projeto chamado <a href="https://github.com/ahal/b2g-commands">b2g-commands</a>, 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 <a href="http://ahal.ca/blog/2014/b2g-commands/">Add more Mach to your B2G</a>.</p>
</div>
<h3 id="Usando_o_mochitest">Usando o mochitest</h3>
<p>Você pode executar <a href="https://developer.mozilla.org/pt-BR/docs/Mochitest" title="https://developer.mozilla.org/en-US/docs/Mochitest">mochitest-plain</a> na imagem do B2G Desktop.</p>
<h4 id="Pre-requisitos">Pre-requisitos</h4>
<ul>
<li>Usar uma imagem com a opção <code>Marionette</code> ativa (compilada com <code>ENABLE_MARIONETTE=1</code> no mozconfig.)</li>
<li>Ter gerado um perfil gaia manualmente (que pode ter sido feito se você compilou o B2G desktop manualmente). Deve ser um perfil <em>non-DEBUG.</em></li>
<li>Não pode utilizar um perfil Gaia que tenha sido feito com um <code>GAIA_DOMAIN</code> personalizado.</li>
</ul>
<h4 id="Configuração_para_mozilla-b2g18_trees">Configuração para mozilla-b2g18 trees</h4>
<pre class="brush: bash language-html"><code class="language-html">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</code></pre>
<div class="note">
<p><strong>Nota</strong>: você pode precisar instalar <a href="http://pypi.python.org/pypi/setuptools" title="http://pypi.python.org/pypi/setuptools">setuputils.py</a> antes de executar setup.py</p>
</div>
<h4 id="Configuração_para_trunk_trees_incluindo_mozilla-central">Configuração para trunk trees, incluindo mozilla-central</h4>
<pre class="brush: bash language-html"><code class="language-html">cd $GECKO_OBJ_DIR
source _virtualenv/bin/activate</code></pre>
<h4 id="Executando_os_testes">Executando os testes</h4>
<p>Você pode executar mochitests usando os seguintes comandos:</p>
<pre class="brush: bash language-html"><code class="language-html">cd $GECKO_OBJ_DIR/_tests/testing/mochitest
python runtestsb2g.py --desktop --console-level INFO --profile /path/to/gaia/profile --app /path/to/b2g</code></pre>
<p>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:</p>
<ul>
<li>Para executar testes específicos, indique em <code>--test-path</code>.</li>
<li>Podem ser adicionados os argumentos <code>--total-chunks</code> e <code>--this-chunks</code> da mesma forma como é feito com o mochitest do desktop.</li>
<li>Finalmente, você pode usar <code>python runtestsb2g.py --help</code> para uma lista completa de argumentos.</li>
</ul>
<h2 id="Executando_mochitest_em_imagens_do_emulador">Executando mochitest em imagens do emulador</h2>
<p>Você pode executar <a href="https://developer.mozilla.org/pt-BR/docs/Mochitest" title="https://developer.mozilla.org/en-US/docs/Mochitest">mochitest-plain</a> em dispositivos B2G. Mas atualmente, funciona melhor quando executado em um emulador.</p>
<div class="warning">
<p>Você não pode executar o mochitest em um dispositivo B2G que tenha sido compilado com a opção <code>PRODUCTION=1</code>. Para executar os mochitests a imagem deve ser a de engenharia. Veja <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1037858">Bug 1037858</a>.</p>
</div>
<h3 id="Usando_mach_2">Usando mach</h3>
<p>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 <a href="https://developer.mozilla.org/pt-BR/docs/Mozilla/Developer_guide/mach" title="/en-US/docs/Developer_Guide/mach">mach</a>. Para executar todos os testes:</p>
<pre class="brush: bash language-html"><code class="language-html">cd $B2G_DIR
./mach mochitest-remote</code></pre>
<p>Para executar um teste específico:</p>
<pre class="brush: bash language-html"><code class="language-html">./mach mochitest-remote test_path</code></pre>
<div class="note">
<p><strong>Nota</strong>: Esses caminhos são relativos ao diretório fonte do GeckoTest paths are relative to gecko's source directory, por exemplo: <code>content/base/test/test_CrossSiteXHR.html</code></p>
</div>
<p>Para ver as opções do mochitest:</p>
<pre class="brush: bash language-html"><code class="language-html">./mach help mochitest-remote</code></pre>
<h3 id="Usando_o_mochitest_2">Usando o mochitest</h3>
<p>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.</p>
<h4 id="Pré-requisitos">Pré-requisitos</h4>
<ul>
<li>Você precisa compilar o B2G para o dispositivo que você está testando(veja <a href="https://developer.mozilla.org/pt-BR/Firefox_OS/Construindo_e_instalando_o_Firefox_OS" title="/en-US/docs/Mozilla/Boot_to_Gecko/Building_and_installing_Boot_to_Gecko">Compilando e instalando o Boot to Gecko</a>).</li>
<li>Você não pode usar a imagem do Gaia que foi compilada com um <code>GAIA_DOMAIN</code> customizado.</li>
<li>Você precisa ter uma versão <strong>desktop</strong> do xpcshell (ele precisa rodar no <em>host</em>), 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 <a href="http://people.mozilla.com/%7Eahalberstadt/getb2g/xre.zip" title="http://people.mozilla.com/~ahalberstadt/getb2g/xre.zip">http://people.mozilla.com/~ahalberstadt/getb2g/xre.zip</a>.</li>
<li>Você precisa instalar alguns pacotes Python que são necessários, mesmo em um virtualenv. Leia a seguir para maiores detalhes..</li>
</ul>
<h4 id="Configuração_para_mozilla-b2g18_trees_2">Configuração para mozilla-b2g18 trees</h4>
<pre class="brush: bash language-html"><code class="language-html">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</code></pre>
<div class="note">
<p><strong>Nota</strong>: antes de executar setup.py você precisa instalar <a href="http://pypi.python.org/pypi/setuptools" title="http://pypi.python.org/pypi/setuptools">setuputils.py</a></p>
</div>
<h4 id="Configuração_para_trunk_trees_incluindo_mozilla-central_2">Configuração para trunk trees, incluindo mozilla-central</h4>
<pre class="brush: bash language-html"><code class="language-html">cd $GECKO_OBJ_DIR
source _virtualenv/bin/activate</code></pre>
<h4 id="Executando_os_testes_2">Executando os testes</h4>
<p>Você pode executar o plano mochitest-plain usando um dos seguintes conjunto de comandos no terminal.</p>
<p>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:</p>
<pre class="brush: bash language-html"><code class="language-html">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 ./</code></pre>
<p>Se você estiver usando o emulador:</p>
<pre class="brush: bash language-html"><code class="language-html">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</code></pre>
<div class="warning">
<p><strong>Aviso</strong>: Executar mochitestes em um emulador B2G no OS X não é suportado, ao invés disso utilize o Linux.</p>
</div>
<p>Os comandos acima executam todos os mochitests B2G por padrão, o que consome muito tempo. Outras opções comuns são as seguintes:</p>
<ul>
<li>Para executar testes específicos: <code>--test-path</code>.</li>
<li>Opcionalmente você pode incluir os argumentos <code>--total-chunks</code> e <code>--this-chunks</code> como feito com mochitests no desktop.</li>
<li>Finalmente, você pode executar <code>python runtestsb2g.py --help</code> para uma lista completa de argumentos possíveis.</li>
</ul>
<p>Após ser iniciado o script <code>runtestsb2g.py</code>, 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.</p>
<p>Quando os testes terminarem, o emulador será encerrado, ou se você estiver usando um dispositivo, o mesmo será reinicializado.</p>
<p>{{noteStart}}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.{{noteEnd}}</p>
<h2 id="Executando_o_mochitest_com_um_emulador_baixado_da_internet">Executando o mochitest com um emulador baixado da internet</h2>
<p>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 <a href="https://pvtbuilds.mozilla.org/pub/mozilla.org/b2g/tinderbox-builds/mozilla-central-generic/" title="https://pvtbuilds.mozilla.org/pub/mozilla.org/b2g/tinderbox-builds/mozilla-central-generic/">última versão do emulador arm</a>, e utilize as mesmas instruções acima, substituindo o argumento <code>--b2gpath $B2G_HOME</code> para <code>runtestsb2g.py</code> com <code>--b2gpath /path/to/unpacked/emulator</code>.</p>
<h2 id="Executando_o_mochitest_com_um_emulador_e_os_testes_baixados_da_internet">Executando o mochitest com um emulador e os testes baixados da internet</h2>
<p>Você também pode executar mochitests em um emuladodr sem compilar ou clonar qualquer coisa. Para fazer isso, você precisa baixar a <a href="https://pvtbuilds.mozilla.org/pub/mozilla.org/b2g/tinderbox-builds/mozilla-central-generic/" title="https://pvtbuilds.mozilla.org/pub/mozilla.org/b2g/tinderbox-builds/mozilla-central-generic/">última versão do emulador arm</a> e descompactá-la e baixar a última versão do arquivo <code>tests.zip</code> (no mesmo lugar de onde baixou o emulador) e descompactá-lo.</p>
<p>Você também precisará do <a href="https://developer.mozilla.org/pt-BR/docs/Python/Virtualenv" title="/en-US/docs/Python/Virtualenv">virtualenv </a>instalado no seu sistema.</p>
<p>Então você poderá configura seu ambiente e executar os testes:</p>
<pre class="brush: bash language-html"><code class="language-html">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</code></pre>
<h2 id="Detalhes_técnicos_de_implementação">Detalhes técnicos de implementação</h2>
<p>Existem algumas coisas que acontecem quando você executa os mochitests B2G.</p>
<ol>
<li>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.</li>
<li>O aplicativo test-container expões um simples <a href="http://mxr.mozilla.org/gaia/source/test_apps/test-container/index.html?force=1" title="http://mxr.mozilla.org/gaia/source/test_apps/test-container/manifest.webapp"><iframe mozbrowser mozapp></a> no qual os mochitests são carregados (mochitests possuem seus próprios <a href="http://mxr.mozilla.org/mozilla-central/source/testing/mochitest/manifest.webapp" title="http://mxr.mozilla.org/gaia/source/test_apps/test-container/index.html?force=1">manifest.webapp</a>).</li>
<li>A automação substitui o aplicativo Homescreen pelo aplicativo test-container <a href="http://hg.mozilla.org/mozilla-central/file/947b9aa5e2d3/testing/profiles/prefs_b2g_unittest.js#l3" title="http://mxr.mozilla.org/mozilla-central/source/testing/profiles/prefs_b2g_unittest.js#3">usando uma preferência</a>.</li>
<li>A automação <a href="http://hg.mozilla.org/mozilla-central/file/1f65b5204c8b/testing/mochitest/runtestsb2g.py#l88" title="http://mxr.mozilla.org/mozilla-central/source/testing/mochitest/runtestsb2g.py#88">carrega o aplicativo mochitest</a> no iframe do aplicativo test-container (esse script é executado com privilégios chrome pelo marionette).</li>
<li>A automação <a href="http://hg.mozilla.org/mozilla-central/file/1f65b5204c8b/testing/mochitest/runtestsb2g.py#l56" title="http://hg.mozilla.org/mozilla-central/file/1f65b5204c8b/testing/mochitest/runtestsb2g.py#l56">carrega poderes especiais no frame filho</a> que está executando o mochitests e configura o gerenciador de mensagens (faz com que o mochitests acesse algumas APIs privilegiadas).</li>
<li>A automação <a href="http://hg.mozilla.org/mozilla-central/file/1f65b5204c8b/testing/mochitest/runtestsb2g.py#l92" title="http://hg.mozilla.org/mozilla-central/file/1f65b5204c8b/testing/mochitest/runtestsb2g.py#l92">carrega a url do mochitest</a> no iframe do mochitest. Isso inicia os testes.</li>
</ol>
<div class="note">
<p><strong>Nota</strong>: 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")}}.</p>
</div>
<p> </p>
|