Lorsque vous essayez d'effectuer un test automatique du navigateur avec Selenium et Pytest, il est plutôt difficile de créer un environnement jusqu'à ce que le test soit exécuté. Si vous mettez dans un navigateur, mettez dans un webdriver qui correspond à la version du navigateur, mettez en Python, mettez en Pytest, etc., l'installation peut prendre plusieurs heures.
Par conséquent, cette fois, nous utiliserons Docker Compose pour simplifier le démarrage de l'environnement d'exécution pour Selenium et Pytest. Veuillez vous y référer lorsque vous souhaitez un environnement d'exécution de test de navigateur instantané ou lorsque vous souhaitez unifier l'environnement d'exécution au sein d'un projet.
Lancez les deux conteneurs suivants avec Docker Compose et connectez-les à distance. --chrome (environnement d'exécution Chrome + Selenium) --pytest (environnement d'exécution Pytest)
Utilisez selenium / standalone-chrome-debug pour le conteneur de chrome. Il s'agit d'une image fournie par le responsable de Selenium et, comme son nom l'indique, Chrome + Selenium peut être exécuté de manière autonome. (En interne, un nœud de Chrome est connecté à Selenium Grid Hub)
Le conteneur pytest est construit en écrivant un Dockerfile par vous-même basé sur l'image python officielle de Docker.
docker-pytest
├── Dockerfile_pytest
├── docker-compose.yml
├── screenshots
└── tests
└── test_google.py
/
└── docker-pytest
├── screenshots
└── tests
└── test_google.py
docker-compose.yml
docker-compose.yml
version: "3"
services:
chrome:
image: selenium/standalone-chrome-debug:4.0.0-alpha-7-prerelease-20200826
container_name: chrome
volumes:
- /dev/shm:/dev/shm
ports:
- 4444:4444
- 5900:5900
pytest:
build:
context: ./
dockerfile: Dockerfile_pytest
container_name: pytest
volumes:
- ./screenshots:/docker-pytest/screenshots/
tty: true
La description du conteneur chrome est basée sur la commande docker décrite dans selenium / standalone-chrome-debug au format YAML.
Le conteneur pytest utilise Bind Mount.
Vous avez monté le répertoire local docker-pytest / screenshots
dans le répertoire / docker-pytest / screenshots
du conteneur pytest.
Vous pouvez maintenant afficher localement les captures d'écran enregistrées lorsque vous exécutez pytest dans le conteneur pytest.
Dockerfile_pytest
Étant donné que la date et l'heure sont utilisées dans le script de test, seul le fuseau horaire est modifié.
FROM python:3
RUN pip install --upgrade pip && \
pip install selenium pytest
ENV TZ "Asia/Tokyo"
WORKDIR /docker-pytest
COPY ./tests/ /docker-pytest/tests
test_google.py
Le point est de savoir comment spécifier le pilote. Vous pouvez résoudre le nom par nom de conteneur par docker-compose.
conteneur chrome ・ Pour vous connecter à Selenium Grid Hub avec le port 4444, connectez-vous à http: // chrome: 4444 / wd / hub
.
test_google.py
import os
from datetime import datetime
from selenium import webdriver
class TestGoogle:
@classmethod
def setup_class(cls):
cls.driver = webdriver.Remote(
command_executor="http://chrome:4444/wd/hub",
options=webdriver.ChromeOptions(),
)
def test_access_google(self):
"""
Accédez à la page d'accueil de Google.
Haut de page Google(https://www.google.com/)Accéder.
Prendre une capture d'écran au moment de l'accès
Le nom du fichier est la date et l'heure auxquelles le test a été exécuté(YYMMDD_hhmmss.png)Et.
Le succès ou l'échec est jugé par "si l'URL actuelle du navigateur est la première page de Google".
"""
driver = TestGoogle.driver
file_name = datetime.now().strftime("%y%m%d_%H%M%S.png ")
screenshot_path = os.path.join("/docker-pytest/screenshots/", file_name)
driver.get("https://www.google.com/")
driver.get_screenshot_as_file(screenshot_path)
assert driver.current_url == "https://www.google.com/"
@classmethod
def teardown_class(cls):
cls.driver.quit()
docker-pytest
docker-compose up -d --build
docker-compose exec pytest bash
et connectez-vous au conteneur pytestpytest tests
docker-pytest / screenshots
, vous avez terminé!docker-compose down
lorsque vous voulez quitterL'image Docker distribuée par le fonctionnaire Selenium a une version normale et une version de débogage. Si vous utilisez la version de débogage, vous pouvez vérifier l'écran en cours d'exécution du test avec l'interface graphique en vous connectant à VNC.
La destination de la connexion est «vnc: // localhost: 5900». Consultez l'article ci-dessous pour savoir comment vous connecter. Connexion VNC au conteneur selenium / standalone-chrome-debug de Docker
Cette fois, j'ai utilisé selenium / standalone-chrome-debug qui est un Selenium Grid Hub à 1 nœud, mais si cela est transformé en plusieurs nœuds, des tests multi-navigateurs peuvent être exécutés. Pour plus de détails, reportez-vous à ce qui suit. SeleniumHQ/docker-selenium#selenium-grid-hub-and-nodes
--Livres
Recommended Posts