Índice
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.
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
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:
Ops, algo deu errado!
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.
Legal!
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