Ich habe das neueste automatische Testtool "Playwright for Python" berührt.

"Playwright", ein automatisches E2E-Testwerkzeug für JavaScript, ** Es wurde als "Playwright for Python" für Python ** in der Vorschau veröffentlicht, also habe ich es sofort berührt.

Announcing Playwright for Python: Reliable end-to-end testing for the web

Was ist Dramatiker?

Playwright ist eine Bibliothek, die Chromium, Firefox und Webkit mit einer einzigen API automatisiert. Auf diese Weise können Sie schnelle und zuverlässige browserübergreifende Tests durchführen.

Vorteile von Dramatiker

Das offizielle Dokument enthält die folgenden vier Punkte. Unten ist meine Übersetzung.

1. Unterstützt alle Browser

2. Schnelle und zuverlässige Testausführung

3. Erzielen Sie eine leistungsstarke Automatisierung

4. Integration in den Workflow

Hands on

Von hier aus werde ich tatsächlich einen Testfall schreiben. Ich habe die Seite HOTEL PLANISPHERE Zimmerreservierung (Plan mit besonderen Vorteilen) für das Testziel verwendet. .. Der Testfall war ein normaler Test: "Greifen Sie auf die zu testende Seite zu, stellen Sie jeden Parameter ein und wechseln Sie dann zur Reservierungsbestätigungsseite. Wenn der dort angezeigte Betrag 15.000 Yen beträgt, bestehen Sie ihn."

Installation

Installiere gemäß der Beschreibung auf dem offiziellen GitHub. Dieses Mal verwenden wir auch pytest für das Unit-Test-Framework. Klicken Sie daher auf Installieren Sie das pytest-Plug-In.

pip install playwright
python -m playwright install
pip install pytest-playwright

Dieses Mal werden wir es nicht tun, aber wenn Sie eine asynchrone Verarbeitung durchführen möchten, führen Sie bitte pip install asyncio separat durch.

Versuchen Sie zuerst, einen Test mit Selen zu schreiben

Bevor ich Playwright berührte, schrieb ich einen Testfall, den ich diesmal mit Selenium Webdriver als Referenz realisieren möchte. Es gibt viele Importanweisungen, die auf die Verarbeitung dynamischer Inhalte warten und die Verwaltung von Webdriver für jeden Browser. Daher ist dies ziemlich schwierig.

selenium.py


import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select, WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager


class TestPlanisphere:
    def test_reserve_otoku(self):
        driver = webdriver.Chrome(ChromeDriverManager().install())
        wait = WebDriverWait(driver, 10)

        driver.get("https://hotel.testplanisphere.dev/ja/reserve.html?plan-id=0")
        # NOTE: wait.until(EC.presence_of_all_elements_located) <-Funktioniert nicht
        time.sleep(1)  # HACK

        date = driver.find_element_by_id("date")  #Datum des Aufenthalts
        date.clear()
        date.send_keys("2020/12/24")
        date.send_keys(Keys.TAB)

        term = driver.find_element_by_id("term")  #Anzahl der Aufenthalte
        term.clear()
        term.send_keys("2")

        head_count = driver.find_element_by_id("head-count")  #Anzahl der Personen
        head_count.clear()
        head_count.send_keys("1")

        sightseeing = driver.find_element_by_id("sightseeing")  #Wählen Sie "Great Value Sightseeing Plan"
        if not sightseeing.is_selected():
            sightseeing.click()

        driver.find_element_by_id("username").send_keys("Beribo")  #Name

        Select(driver.find_element_by_id("contact")).select_by_value("tel")  #"Ich möchte telefonisch kontaktiert werden"

        driver.find_element_by_id("tel").send_keys("80120828828")  #Telefonnummer

        driver.find_element_by_id("submit-button").click()  #Übergang zur Reservierungsbestätigungsseite
        wait.until(EC.presence_of_all_elements_located)

        driver.save_screenshot("selenium.png ")  #Mache ein Bildschirmfoto

        assert "15,000" in driver.find_element_by_id("total-bill").text

        driver.quit()

Schreiben Sie einen Test mit Playwright für Python

Dann habe ich den gleichen Test mit Playwright für Python geschrieben. Die diesmal verwendeten Methoden sind auf den folgenden Seiten der offiziellen Dokumentation zusammengefasst. Obwohl es nur in JavaScript beschrieben wird, kann es fast ausschließlich in Python verwendet werden.

play.py


from playwright.sync_api import Page


class TestPlanisphere:
    def test_reserve_otoku(self, page: Page):
        page.goto("https://hotel.testplanisphere.dev/ja/reserve.html?plan-id=0")
        page.waitForLoadState("networkidle")

        page.fill("#date", "2020/12/24")  #Datum des Aufenthalts
        page.press("#date", "Tab")

        page.fill("#term", "2")  #Anzahl der Aufenthalte

        page.fill("#head-count", "1")  #Anzahl der Personen

        page.check("#sightseeing")  #Planauswahl

        page.fill("#username", "Beribo")  #Name

        page.selectOption("#contact", "tel")  #"Ich möchte telefonisch kontaktiert werden"
        page.fill("#tel", "80120828828")  #Telefonnummer

        page.click("#submit-button")  #Übergang zur Reservierungsbestätigungsseite
        page.waitForLoadState("networkidle")

        page.screenshot(path="playwright.png ")  #Mache ein Bildschirmfoto

        assert "15,000" in page.innerText("#total-bill")

        page.close()

Im Vergleich zu Selen

Sie können sehen, dass der schwierige Teil von Selenium hervorragend gelöst wurde, wenn Sie sich nur das Drehbuch ansehen.

Führen Sie Playwright-Tests mit pytest durch

Alles was Sie jetzt tun müssen, ist die obige play.py in pytest auszuführen. Headless / Headful und Ausführungsbrowser können als Ausführungsoptionen angegeben werden. Sie können die Startoptionen auch in der Datei pytest.ini speichern. ](Https://github.com/microsoft/playwright-pytest#usage)

#Testlauf(Headless Chromium ist die Standardeinstellung)
pytest play.py

#Testlauf im Headful-Modus
pytest --headful play.py

#Testen Sie die Ausführung, indem Sie einen Browser angeben(chromium, firefox, webkit)
pytest --browser firefox play.py

#Testlauf auf mehreren Browsern
pytest --browser chromium --browser webkit play.py

Impressionen

Ich denke, es gibt zwei Richtungen für die Entwicklung automatisierter Werkzeuge: Ich denke, eine soll sich als multifunktionale Testplattform entwickeln, die Berichtsfunktionen und CI-Funktionen integriert, und die andere soll sich als leichtes, programmierbares Hochgeschwindigkeitstool entwickeln. Ich hatte das Gefühl, dass Dramatiker eine mächtige Option für Letzteres sein würde.

Die Unterstützung eines Riesen namens Microsoft (und der Ursprung ist Googles Puppenspieler ...) ist als OSS sehr leistungsfähig, und zukünftige Verbesserungen sind zu erwarten. Daher dachte ich, es wäre gut, ab sofort mit der Vorschau-Version zu beginnen. Überlegen.

Um ehrlich zu sein, hatte ich persönlich das Gefühl, dass das Lernen viel einfacher und kostengünstiger ist als Selen, daher werde ich Selen Vorrang einräumen, wenn es verwendet werden kann!

Recommended Posts

Ich habe das neueste automatische Testtool "Playwright for Python" berührt.
Erstelltes AtCoder-Testtool für Python
Ich habe versucht, ein Gerüstwerkzeug für Python Web Framework Bottle zu erstellen
Ich habe das Datenaufbereitungstool Paxata berührt
[Python] Ich habe versucht, den Funktionsnamen durch den Funktionsnamen zu ersetzen
vprof - Ich habe versucht, den Profiler für Python zu verwenden
Ich habe zum ersten Mal versucht, Python zu programmieren.
[Python] Ich habe nach dem längsten Pokemon Shiritori gesucht
Ich habe einige der neuen Funktionen von Python 3.8 touched angesprochen
[Rezept des Trainers] Ich habe die Flasche des Python-Frameworks berührt.
Was ich zum ersten Mal in Python bekommen habe
Ich habe Python zum ersten Mal auf dem Mac ausprobiert.
Ich habe Python zum ersten Mal mit Heroku ausprobiert
Ein Memo, dass ich den Datenspeicher mit Python berührt habe
Ich war 2 Minuten lang süchtig nach Python-Debugger-PDF
Für die Prüfung G-Test 2020 # 2
Ich habe versucht, die Qiita-API zu berühren
Ich habe versucht, den Chi-Quadrat-Test in Python und Java zu programmieren.
Python-Vorlage für Codeforces-manuelle Test-
Ich wusste nicht, wie ich die [Python] für die Anweisung verwenden sollte
Ich habe gerade das Originalmaterial für den Python-Beispielcode geschrieben
Verschiedene Hinweise zur Verwendung von Python für Projekte
Ich habe den Python-Datenanalysetest bestanden und die Punkte zusammengefasst
Ich habe die Python-Quelle heruntergeladen
Memorandum des Python-Paketverwaltungstools ez_setup
Ich habe versucht, Kwant zu verwenden, ein Python-Modul für die Quantentransportberechnung
Python> Ich habe einen Testcode für meine eigene externe Datei erstellt
[Python] LINE-Benachrichtigung über die neuesten Informationen mithilfe der automatischen Suche von Twitter
Bereiten Sie eine verteilte Lasttestumgebung mit dem Python-Lasttest-Tool Locust vor
Ich berührte PyAutoIt für einen Moment
Installieren Sie RDKit, ein chemisches Informatik-Tool für Python
AtCoder: Python: Papa der Beispieltest.
Ich mochte den Tweet mit Python. ..
Siehe Python zum ersten Mal
Ich habe die Warteschlange in Python geschrieben
Wofür ist der Python-Unterstrich (_)?
Ich habe den Stack in Python geschrieben
Befehl für das aktuelle Verzeichnis Python
Erleben Sie Teil I "Multinationale Währung" des Buches "Test Driven Development" mit Python
[Python] Ich habe die exe-Konvertierungsmethode für die Verteilung von Business-Effizienz-Tools untersucht.
Ich habe die Geschwindigkeit der Listeneinschlussnotation für und während mit Python2.7 gemessen.
Einführung in das BOT-Framework Minette für Python
Python-Visualisierungstool für die Datenanalyse
Ich habe zum ersten Mal Tensorflow ausprobiert
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Vergleichstabelle für Python-Umgebungstools für Rubyist
Ich habe das OSS-Visualisierungstool superset ausprobiert
Starten Sie den Discord Python-Bot 24 Stunden lang.
Ich kannte die Grundlagen von Python nicht
MongoDB mit Python zum ersten Mal
[Python] Ich habe die grundlegende Grammatik persönlich zusammengefasst.
Ich habe den Code für Gibbs Sampling geschrieben
Pandas des Anfängers, vom Anfänger, für den Anfänger [Python]
Python: Ich habe das Problem des Handlungsreisenden ausprobiert
Die Python-Projektvorlage, an die ich denke.
Ein Tool zur einfachen Eingabe von Python-Code
Ich habe mit Python nach einer Primzahl gesucht
[Python-Anfänger] Ich habe die Artikel gesammelt, die ich geschrieben habe