Estamos usando o Selenium para automatizar nossos UItestes. Recentemente, vimos a maioria de nossos usuários usando o Chrome. Então, queríamos saber - prós e contras do uso de PhantomJS vs Selenium:
Existe alguma vantagem real em termos de desempenho, por exemplo, o tempo necessário para executar os casos de teste?
Quando alguém deve preferir o PhantomJS ao Selenium?
Eles estão atacando problemas diferentes. Como o PhantomJS roda perfeitamente na linha de comando, é adequado como a primeira camada de teste de fumaça, seja como parte do fluxo de trabalho de desenvolvimento e / ou em um servidor de integração contínuo. O Selenium tem como alvo vários navegadores e, portanto, é muito útil garantir a consistência entre navegadores e realizar testes extensivos em diferentes sistemas operacionais.
Se o seu aplicativo da web precisar ser executado em vários navegadores, a execução do teste da interface do usuário apenas com o PhantomJS não produzirá a maior cobertura de teste. No entanto, é perfeitamente bom iniciar o PhantomJS e exercitar algumas verificações básicas de sanidade antes de fazer os testes detalhados. Imagine a loucura de testar um aplicativo financeiro em que a tela de login é acidentalmente quebrada e não funciona!
Observe que a linha entre os dois fica um pouco embaçada com o suporte recente ao WebDriver no PhantomJS mais recente. Agora é possível executar rapidamente os testes primeiro usando o PhantomJS e, em seguida (assumindo que não haja erro grave), continue executando os mesmos testes completamente em uma configuração do Selenium.
Qualquer link que possa me ajudar a entender como as pessoas estão usando o phantomjs para coletar estatísticas relacionadas ao desempenho em um aplicativo de produção do mundo real.
spirit3189
34
Ariya Hidayat parece ser o criador de PhantomJS
Sebastian Patten
Parece que o fluxo de trabalho descrito para começar a escrever testes com o PhantomJS e usar o Selenium pressupõe uma reescrita total dos testes ... Você poderia usar os scripts do PhantomJS diretamente com o Selenium?
Lajarre
1
Obrigado pelo incrível PhantomJS, @AriyaHidayat! :)
rinogo
49
Com a recente integração do WebDriver (como Ariya observou), agora você pode usar o Selenium para dirigir o PhantomJS.
Isso é imensamente poderoso.
Você pode executar um conjunto de testes Selenium totalmente automatizados (usando o PhantomJS como a implementação do WebDriver) por meio do seu IC em um servidor Unix sem cabeça em cada check-in. Então, se você quiser testar a compatibilidade do navegador, poderá executar seus testes localmente, alterando a implementação subjacente do WebDriver para Chrome, Firefox etc.
Atualmente, estou escrevendo uma estrutura de extração da web. Tenho 524 testes que obtêm dados de 250 sites usando o XPath. Inicialmente, a estrutura usava um analisador de HTML, HTMLCleaner, mas atualmente estou investigando o uso do Selenium porque desejo suporte a Javascript. Eu executei os testes nos drivers HtmlUnit, Chrome, Firefox e PhantomJS . Aqui está uma comparação do tempo gasto e o número de falhas para cada abordagem:
Failures Time (secs)
HtmlCleaner 0 82
HtmlUnit 169 102
Google Chrome 38 562
Firefox 46 1159
PhantomJS 40 575
Alguns comentários:
Em alguns casos, as "falhas" podem não ser falhas, pode ser que os extratores estejam falhando porque o Javascript está reescrevendo o DOM. Estou no processo de analisar as falhas para encontrar a causa.
Dito isto, o HtmlUnit é o driver Selenium mais rápido, mas também não é confiável. Essa falta de confiabilidade não se refere apenas ao Javascript, há problemas ao processar o HTML "bagunçado, sujo e do mundo real" porque algo parece estar quebrado no algoritmo de balanceamento de tags. Alguns problemas foram levantados sobre isso, mas eles não foram corrigidos - consulte HTML-UNIT 1423 e HTML-UNIT 1046 .
O Firefox é o driver Selenium mais lento, embora eu esteja desativando o carregamento de imagens e as folhas de estilo. Isso ocorre porque é o mais lento para carregar e inicializar, tornando-o consideravelmente mais lento que o Chrome, e toda vez que uma extração falha, preciso recarregar o driver (nos testes, crio um conjunto de 5 drivers para mitigar os atrasos na recuperação de URL para todos os drivers da web do Selenium).
O PhantomJS alcança uma precisão melhor que o Firefox, um pouco menor que o Chrome, mas em cerca da metade do tempo do Firefox. Além do mais, eu posso executá-lo na minha caixa de desenvolvimento, não "domina minha máquina" iniciando vários navegadores para que eu possa continuar o trabalho.
Demora 9 minutos para executar sua suíte de testes com o phantomJS? Isso deve sentir como sempre ...
Kevin
@ Kevin Sim :) - mas HTMLCleaner é o teste padrão, eu marcar uso categorias JUnit para marcar os outros testes como opcional para que eles não fazem parte dos testes de unidade padrão
Mark Butler
Obrigado. Sim, eu tenho trabalhado em testes de js completos e eles são tão glaciais - como 15-20 segundos para alguns testes de página. Talvez minha escala de 'glacial' precise ser ajustada embora hehe :) Por mais estranho que seja, se eu fizer isso manualmente, leva apenas 5 segundos para clicar nos formulários.
Kevin
1
@lucaswxp Yes! E muitos outros projetos no meio. Como expliquei acima, não há escolha perfeita. Na época, usei o HtmlCleaner, mas adicionei uma opção para usar o PhantomJS, caso a página a ser extraída precisasse.
Mark Butler
1
@iconoclast Não - infelizmente - o empregador anterior tem o IP.
22816 Mark Butler
2
Aproveitando o poder do Selenium e do PhantomJS O
PhantomJS possui os recursos de navegador sem cabeça; portanto, é bom usá-lo como um dos navegadores com selênio (além dos navegadores tradicionais como IE, Chrome etc.). Vantagens dessa abordagem:
Pode ser usado para executar o Sanity para aplicativos Web no IC (mesmo que as máquinas do agente não possuam IE ou chrome), os testes serão executados com eficiência.
Algumas equipes de desenvolvimento usam essa abordagem para obter resultados rápidos e consomem menos quantidade de tempo e recursos.
A maior característica do JS fantasma é a captura de tela, executando testes paralelos usando multiencadeamento, o que reduzirá tremendamente o tempo de execução.
Meu aplicativo estava precificando o aplicativo da web:
Em algum momento, os localizadores que estavam funcionando bem no navegador Chrome não estão funcionando no phantomJS.
Às vezes, ao executar um clique duplo ou clique de contexto por selênio, tenho que fazer uma verificação extra para verificar as operações porque, em primeiro lugar, não está clicando.
Persistência de cache e cookies. Depois de fazer logout e logon, os dados permanecem no cache. | Então, realizamos o teste no chrome.
Um dos problemas mais importantes que encontrei "Problema ao fazer upload de arquivos". Não podemos carregar um arquivo no navegador phantomJs em nosso aplicativo. Tentamos muitas coisas javascriptexcutor, jqueries, mas nenhuma delas funcionou. Por isso, também realizamos este teste no Chrome. Nota: Usamos extensivamente funções javascript em nossa estrutura para interagir com o elemento web do PhantomJS. Uma coisa é garantir que o tempo de execução seja muito menor no PhantomJS. Portanto, depende da prioridade do cliente se ele quer Funcionalidade / Desempenho e depois seguir em frente. Se você quiser testar o cenário de ponta a ponta, vá para o chrome.
Com a recente integração do WebDriver (como Ariya observou), agora você pode usar o Selenium para dirigir o PhantomJS.
Isso é imensamente poderoso.
Você pode executar um conjunto de testes Selenium totalmente automatizados (usando o PhantomJS como a implementação do WebDriver) por meio do seu IC em um servidor Unix sem cabeça em cada check-in. Então, se você quiser testar a compatibilidade do navegador, poderá executar seus testes localmente, alterando a implementação subjacente do WebDriver para Chrome, Firefox etc.
fonte
Atualmente, estou escrevendo uma estrutura de extração da web. Tenho 524 testes que obtêm dados de 250 sites usando o XPath. Inicialmente, a estrutura usava um analisador de HTML, HTMLCleaner, mas atualmente estou investigando o uso do Selenium porque desejo suporte a Javascript. Eu executei os testes nos drivers HtmlUnit, Chrome, Firefox e PhantomJS . Aqui está uma comparação do tempo gasto e o número de falhas para cada abordagem:
Alguns comentários:
Em alguns casos, as "falhas" podem não ser falhas, pode ser que os extratores estejam falhando porque o Javascript está reescrevendo o DOM. Estou no processo de analisar as falhas para encontrar a causa.
Dito isto, o HtmlUnit é o driver Selenium mais rápido, mas também não é confiável. Essa falta de confiabilidade não se refere apenas ao Javascript, há problemas ao processar o HTML "bagunçado, sujo e do mundo real" porque algo parece estar quebrado no algoritmo de balanceamento de tags. Alguns problemas foram levantados sobre isso, mas eles não foram corrigidos - consulte HTML-UNIT 1423 e HTML-UNIT 1046 .
O Firefox é o driver Selenium mais lento, embora eu esteja desativando o carregamento de imagens e as folhas de estilo. Isso ocorre porque é o mais lento para carregar e inicializar, tornando-o consideravelmente mais lento que o Chrome, e toda vez que uma extração falha, preciso recarregar o driver (nos testes, crio um conjunto de 5 drivers para mitigar os atrasos na recuperação de URL para todos os drivers da web do Selenium).
O PhantomJS alcança uma precisão melhor que o Firefox, um pouco menor que o Chrome, mas em cerca da metade do tempo do Firefox. Além do mais, eu posso executá-lo na minha caixa de desenvolvimento, não "domina minha máquina" iniciando vários navegadores para que eu possa continuar o trabalho.
Eu recomendo o PhantomJS.
fonte
Aproveitando o poder do Selenium e do PhantomJS O PhantomJS possui os recursos de navegador sem cabeça; portanto, é bom usá-lo como um dos navegadores com selênio (além dos navegadores tradicionais como IE, Chrome etc.). Vantagens dessa abordagem:
fonte
desafios que enfrentei ao usar o PhantomJS:
Meu aplicativo estava precificando o aplicativo da web:
fonte