O Docker lida rapidamente com testes distribuídos de grade de selênio

Índice

Prefácio:

NO.1 Pegue o meio ambiente

NO.2 Escrever código

Nº 3 Simultaneidade

pensamentos


Prefácio:

 O Docker é uma plataforma popular de conteinerização que ajuda os desenvolvedores a criar, implantar e executar aplicativos rapidamente. O Selenium Grid é uma ferramenta para testes distribuídos, que pode executar vários casos de teste em paralelo para melhorar a eficiência e a velocidade dos testes. Combinando Docker e Selenium Grid, você pode criar rapidamente um ambiente de teste distribuído.

A implantação de um cluster Selenium Grid distribuído da maneira tradicional requer muito tempo e custo de máquina para preparar o ambiente de teste.

O Snake usa o docker para construir o ambiente de grade do Selenium e usa o framework ptest para escrever o código, tentando simplificar o processo.

Captura de tela 2017-05-22:00 11.46.56.png

NO.1 Pegue o meio ambiente

Em primeiro lugar, você deve adicionar um acelerador Aliyun ao docker, caso contrário, a espera será longa.
Escreva um docker-compose.yml

hub:
  image: selenium/hub
  ports:
    - "4444:4444"
firefox:
  image: selenium/node-firefox
  ports:
    - 5901:5900
  links:
    - hub
chrome:
  image: selenium/node-chrome
  ports:
    - 5902:5900
  links:
    - hub

Inicie:

docker-compose up

Se parece com isso
 

Captura de tela 2017-05-10 às 17:30.39.png


Iniciado com sucesso.
A parte do ambiente, e pronto. Tão fácil!

NO.2 Escrever código

Escrevi um exemplo muito simples, usando o framework ptest escrito por meus colegas.
Este framework melhorou muitas áreas que são desconfortáveis ​​de usar em frameworks do mercado, como: relatórios, simultaneidade, escrita de logs, passagem de parâmetros, etc.

__author__ = 'anderson'

# coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support.ui import WebDriverWait

from ptest.decorator import TestClass, Test, BeforeMethod, AfterMethod

@TestClass(run_mode="parallel")  # the test cases in this class will be executed by multiple threads
class SeleniumClass:
    @BeforeMethod(description="Prepare test Enviroment.")
    def before(self):
        preporter.info("set up driver")
        browser = config.get_property("browser")
        if browser == "firefox":
            self.driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',
                                           desired_capabilities=DesiredCapabilities.FIREFOX)
        elif browser == "chrome":
            self.driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',
                                           desired_capabilities=DesiredCapabilities.CHROME)

    @Test(tags=["regression", "smoke"])
    def test1(self):
        preporter.info("start to test")
        self.driver.get("http://www.baidu.com")
        inputElement = self.driver.find_element_by_name("wd")
        inputElement.send_keys("docker")
        inputElement.submit()
        WebDriverWait(self.driver, 20).until(lambda driver: driver.title.startswith("docker"))
        assert_true(self.driver.title.startswith("docker"))

    @AfterMethod(always_run=True, description="Clean up")
    def after(self):
        preporter.info("cleaning up")
        self.driver.quit()

Execute-o e obtenha o resultado:
 

Captura de tela 10/05/2017 às 19.05.03.png


Ops, algo deu errado!
 

Captura de tela 10/05/2017 às 19:59.59.png


Observando o log e as capturas de tela com cuidado, verifica-se que o chinês não é suportado.
A solução é: altere a fonte da imagem do docker e encontre uma que suporte chinês.
Reinicie e execute novamente.

Captura de tela 2017-05-10 às 18h48.png


Legal!

Captura de tela 10/05/2017 às 17:59.00.png

Nº 3 Simultaneidade

Na verdade, a simultaneidade foi ativada na segunda etapa. Ao executar, basta digitar o número de simultaneidade.

ptest3 -t test -n 2 -Dbrowser=firefox

Aqui n é o número concorrente, e o parâmetro é firefox. Deixe firefox ser o navegador. (Pode ser definido de acordo com o número de casos)
Claro, você também pode registrar vários hubs em yml, a seu critério!

pensamentos

Na verdade, não fiz nada aqui, apenas um porteiro. Não preciso me preocupar com relatórios, capturas de tela, simultaneidade, reexecuções etc., basta definir alguns parâmetros. Uma boa estrutura pode obter o dobro do resultado com metade do esforço.

  Como quem já passou por aqui, espero também que todos evitem alguns desvios

Aqui vou compartilhar com você algumas necessidades do caminho a seguir em testes automatizados, esperando ajudá-lo.

(materiais relacionados a testes de software, materiais relacionados a testes automatizados, perguntas e respostas técnicas, etc.)

Eu acredito que pode fazer você progredir melhor!

Clique no pequeno cartão abaixo

Acho que você gosta

Origin blog.csdn.net/Free355/article/details/131765332
Recomendado
Clasificación