Wenn Sie versuchen, einen automatischen Browsertest mit Selenium und Pytest durchzuführen, ist es ziemlich mühsam, eine Umgebung zu erstellen, bis der Test ausgeführt wird. Wenn Sie einen Browser, einen Webtreiber, der der Version des Browsers entspricht, einen Python, einen Pytest usw. hinzufügen, kann die Installation mehrere Stunden dauern.
Daher werden wir dieses Mal Docker Compose verwenden, um den Start der Ausführungsumgebung für Selenium und Pytest zu vereinfachen. Bitte beziehen Sie sich darauf, wenn Sie eine sofortige Ausführungsumgebung für Browsertests wünschen oder wenn Sie die Ausführungsumgebung innerhalb eines Projekts vereinheitlichen möchten.
Starten Sie die folgenden beiden Container mit Docker Compose und verbinden Sie sie remote. --chrome (Chrome + Selenium-Ausführungsumgebung) --pytest (Pytest-Ausführungsumgebung)
Verwenden Sie Selen / Standalone-Chrome-Debug für den Chrome-Container. Dies ist ein Bild, das vom Selenium-Mitarbeiter bereitgestellt wurde. Wie der Name schon sagt, kann Chrome + Selenium eigenständig ausgeführt werden. (Intern ist ein Chrome-Knoten mit dem Selenium Grid Hub verbunden.)
Der Pytest-Container wird erstellt, indem Sie selbst eine Docker-Datei schreiben, die auf offizielles Docker-Python-Image basiert.
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
Die Beschreibung des Chrome-Containers basiert auf dem Docker-Befehl, der unter selenium / standalone-chrome-debug im YAML-Format beschrieben ist.
Der Pytest-Container verwendet Bind Mount. Sie haben das lokale Verzeichnis "Docker-Pytest / Screenshots" in das Verzeichnis "/ Docker-Pytest / Screenshots" des Pytest-Containers eingebunden. Jetzt können Sie die Screenshots lokal anzeigen, die beim Ausführen von pytest im pytest-Container gespeichert wurden.
Dockerfile_pytest
Da Datum und Uhrzeit im Testskript verwendet werden, wird nur die Zeitzone geändert.
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
Der Punkt ist, wie der Treiber angegeben wird. Sie können den Namen nach Containernamen durch Docker-Compose auflösen.
Chrome-Container ・ Um eine Verbindung zum Selenium Grid Hub mit 4444-Anschluss herzustellen, stellen Sie eine Verbindung zu http: // chrome: 4444 / wd / hub
her.
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):
"""
Greifen Sie auf die Google-Startseite zu.
Google Top-Seite(https://www.google.com/)Zugreifen.
Machen Sie zum Zeitpunkt des Zugriffs einen Screenshot
Der Dateiname ist das Datum und die Uhrzeit, zu der der Test ausgeführt wurde(YYMMDD_hhmmss.png)Und.
Erfolg oder Misserfolg werden danach beurteilt, "ob die aktuelle URL des Browsers die Google-Top-Seite ist".
"""
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-compose up -d --build
ausDas vom Selenium-Beamten verteilte Docker-Image hat eine normale Version und eine Debug-Version. Wenn Sie die Debug-Version verwenden, können Sie den Bildschirm während der Testausführung mit der GUI überprüfen, indem Sie eine Verbindung zu VNC herstellen.
Das Verbindungsziel ist "vnc: // localhost: 5900". Informationen zum Herstellen einer Verbindung finden Sie im folgenden Artikel. VNC-Verbindung zum Docker-Container für Selen / Standalone-Chrome-Debug
Dieses Mal habe ich Selen / Standalone-Chrome-Debug verwendet, bei dem es sich um einen Selenium Grid Hub mit 1 Knoten handelt. Wenn dies jedoch zu mehreren Knoten gemacht wird, können Tests mit mehreren Browsern ausgeführt werden. Einzelheiten finden Sie im Folgenden. SeleniumHQ/docker-selenium#selenium-grid-hub-and-nodes
Recommended Posts