[JAVA] Automatisch mit Messgerät testen

Überblick

Mein Name ist @SatohJohn und ich bin verantwortlich für den dritten Tag des Java-Adventskalenders. Dieses Mal werde ich die Einstellungen für das Schreiben eines automatisierten Tests mit Gauge schreiben. Anscheinend ist es ein bisschen dasselbe wie angekündigt bei JJUG, aber es tut mir leid. Ich möchte die Details in Sätzen zusammenfassen.

Was ist Messgerät?

https://getgauge.io/index.html Ein Tool, mit dem Sie automatisierte Tests in Markdown schreiben können.

verdienen

Fehler

Vorbereitung

Messgerät installieren https://getgauge.io/get-started.html Auf dem Mac können Sie mit Brew installieren.

Verfassung

Erstellen Sie ein Maven-Projekt wie folgt. (Baumbefehl bequem!

.
├── driver
│   ├── chromedriver_linux
│   ├── chromedriver_mac
│   └── chromedriver_windows.exe
├── env
│   └── default
│       ├── default.properties
│       └── java.properties
├── manifest.json
├── pom.xml
├── specs
│   └── test.spec
└── src
    └── test
        └── java
            ├── StepImplementation.java
            └── VerifyImplementation.java

Der Treiber ist im Lieferumfang enthalten, da diesmal Chrom in Selen verwendet wird. manifest.json beschreibt das Implementierungsformat und die Plugin-Informationen von Gauge.

manifest.json


{
  "Language": "java",
  "Plugins": [
    "spectacle"
  ]
}

Platzieren Sie die Einstellungen in env. Es gibt andere Parameter, aber ich denke, das ist es, was Sie tatsächlich verwenden.

default.properties


#Verzeichnis zum Ablegen des Ausführungsergebnisses
gauge_reports_dir = reports
#Gibt an, ob die Implementierungsergebnisse aktualisiert werden sollen
overwrite_reports = true
#Möchten Sie einen Screenshot machen, wenn dies fehlschlägt?
screenshot_on_failure = true
#Implementierungsdetailprotokoll
logs_directory = logs

java.properties


#Parameter, die an die JVM übergeben werden sollen
gauge_jvm_args = -Dselenide.browser=chrome
#Grad der Zustandsinitialisierung(Siehe unten)
gauge_clear_state_level = scenario

pom.xml sieht folgendermaßen aus:

pom.xml


<dependencies>
    <dependency>
        <groupId>com.thoughtworks.gauge</groupId>
        <artifactId>gauge-java</artifactId>
        <version>0.6.5</version>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.codeborne</groupId>
        <artifactId>selenide</artifactId>
        <version>4.8</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>com.thoughtworks.gauge.maven</groupId>
            <artifactId>gauge-maven-plugin</artifactId>
            <version>1.3.0</version>
            <executions>
                <execution>
                    <phase>test</phase>
                    <configuration>
                        <specsDir>specs</specsDir> <!--Verzeichnis der auszuführenden Spezifikationen-->
                    </configuration>
                    <goals>
                        <goal>execute</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Bitte ändern Sie die Version von Guave. Andernfalls tritt vor der Ausführung ein Konflikt mit der Bibliothek von Selenide auf, und Sie erhalten die folgende Ausnahme.

Failed: Before Suite
Message: java.lang.NoSuchMethodError: com.google.common.util.concurrent.SimpleTimeLimiter.create(Ljava/util/concurrent/ExecutorService;)Lcom/google/common/util/concurrent/SimpleTimeLimiter;

Das Verzeichnis, in dem die Spezifikationen Markdown enthalten. Java im Test ist eine Implementierung von Markdown. Die Schreibmethode ist wie folgt.

Wie schreibt man

Grundsätzlich denke ich, dass der Ablauf des Schreibens eines automatisierten Tests wie folgt ist.

  1. Implementieren Sie die Methode mit @ Step
  2. Rufen Sie diese Methode aus der Spezifikationsdatei auf
  3. Wenn ähnliche Schritte angezeigt werden, fassen Sie sie zusammen

1. Implementieren Sie die Methode mit @ Step

Um den auszuführenden Teil zu implementieren, erstellen Sie eine geeignete Klasse wie unten gezeigt und fügen Sie der Methode "@ Step" hinzu. Bestimmen Sie zu diesem Zeitpunkt den Namen, wenn er aus der Spezifikationsdatei aufgerufen wird. [1]

StepImplementation.java


import com.codeborne.selenide.Selenide;
import com.thoughtworks.gauge.Step;

public class StepImplementation {
    @Step("<url>öffnen") //[1]
    public void open(String url/*[2]*/) {
        Selenide.open(url); //[3]
    }
}

stellt eine Variable dar, aber es spielt keine Rolle, ob sie nicht mit dem Argumentnamen übereinstimmt. (Ist es einfacher zu sehen, ob sie übereinstimmen) [2] Wenn es eine Implementierung mit dem Namen "Open" Variable "" gibt, wird der Test nicht durchgeführt, da es sich um "Duplicate Step Implementation" handelt. Seien Sie vorsichtig, wenn Sie Schritte in mehreren Klassen schreiben. Dieser Test verwendet Selenide, um die Variablenseite zu öffnen. [3] Gleiches gilt für Verify.

VerifyImplementation.java


import com.codeborne.selenide.Selenide;
import com.thoughtworks.gauge.Step;
import org.hamcrest.CoreMatchers;
import org.junit.Assert;

public class VerifyImplementation {
    @Step("Der Titel lautet<title>Sein")
    public void verifyTitle(String title) {
        String actual = Selenide.title();
        Assert.assertThat(actual, CoreMatchers.is(title));
    }
}

In diesem Beispiel erhält Selenide den Titel der Seite und vergleicht ihn mit dem Argument.

2. Rufen Sie diese Methode aus der Spezifikationsdatei auf

test.spec


Prüfung[4]
====================

##Öffnen Sie die JJUG-Seite[5]
[6]
* "http://www.java-users.jp/ccc2017fall/"öffnen
*Der Titel lautet"JJUG CCC 2017 Fall"Sein

[4] Es wird die gesamte Spezifikation dieser Datei sein. Sie können das Szenario derselben Datei zum Zeitpunkt der Ausführung ausführen. [5] Dies ist der Name des Testfalls (Szenario). [6] \ * ist der Inhalt (Schritt) des durchzuführenden Tests. Die zuvor in Java geschriebene Implementierung wird aufgerufen. "Der Inhalt wird als Argument übergeben. Sie können auch mit <> schreiben. Sie können lokale Dateien und Tabellen sowie einfache Zeichen übergeben. Wenn Sie den Text schreiben, ohne \ # usw. zu schreiben, wird er als Kommentar behandelt. (Ich wollte unbedingt [6] in die * Zeile schreiben

Eine ausführliche Beschreibungsmethode finden Sie unter https://docs.getgauge.io/longstart.html.

3. Wenn ähnliche Schritte angezeigt werden, fassen Sie sie zusammen

Die Zusammenfassung wird als Konzept bezeichnet. Schreiben Sie das Konzept in eine .cpt-Datei.

test.cpt


#Prüfung
* "http://www.java-users.jp/ccc2017fall/"öffnen

Wenn Sie wie oben schreiben, können Sie test.spec wie folgt umschreiben

test.spec


Prüfung
====================

##Öffnen Sie die JJUG-Seite
*Prüfung
*Der Titel lautet"JJUG CCC 2017 Fall"Sein

Verarbeitung vor Testausführung

Mit @ BeforeSuite können Sie die Browsereinstellungen ändern, bevor Sie den automatisierten Test durchführen.

public class BeforeStepImplementation {
    @BeforeSuite
    public void beforeSuite() {
        ChromeOptions options = new ChromeOptions();
        if (SystemUtils.IS_OS_MAC) {
            System.setProperty("webdriver.chrome.driver", "./driver/chromedriver_mac");
        } else if (SystemUtils.IS_OS_WINDOWS) {
            System.setProperty("webdriver.chrome.driver", "./driver/chromedriver_windows.exe");
        } else if (SystemUtils.IS_OS_LINUX) {
            System.setProperty("webdriver.chrome.driver", "./driver/chromedriver_linux");
        }
        options.addArguments("--no-experiments",
                "--disable-translate",
                "--disable-plugins",
                "--disable-extensions",
                "--no-default-browser-check",
                "--clear-token-service",
                "--disable-default-apps",
                "--enable-logging",
                "--headless", "--disable-gpu", //Wenn Sie diese beiden haben, wird es kopflose Ausführung sein
                "test-type");
        ChromeDriver chromeDriver = new ChromeDriver(options);
        WebDriverRunner.setWebDriver(chromeDriver);
    }
}

Außerdem gibt es für jedes Timing "@ BeforeSpec", "@ BeforeScenario", "@ BeforeStep" und "After", sodass eine Initialisierung zu jedem Zeitpunkt möglich ist.

Führen Sie automatisierte Tests von maven aus

Ich habe ein Plugin, also führe ich einfach "mvn test" aus. Das Ergebnis ist wie folgt.

#Prüfung
  ##Öffnen Sie die JJUG-Seite ✔ ✔

Specifications: 1 executed      1 passed        0 failed        0 skipped
Scenarios:      1 executed      1 passed        0 failed        0 skipped

Total time taken: 5.535s
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 15.036 s
[INFO] Finished at: 2017-12-02T22:17:39+09:00
[INFO] Final Memory: 11M/159M
[INFO] ------------------------------------------------------------------------

Zusammenfassung

Einführung des automatisierten Testwerkzeugs Messgerät. Ich mag die Tatsache, dass es in Markup beschrieben werden kann. Der Abschlag erleichtert auch die Überprüfung. Schreiben wir einen automatisierten Test! Diese Demo ist übrigens auf github veröffentlicht, also probieren Sie es bitte aus! https://github.com/furyu-john/gauge-sample

Recommended Posts

Automatisch mit Messgerät testen
Integrationstest mit Gradle
Testen Sie Nokogiri mit Rspec.
Lasttest mit JMeter
Machen Sie einen Unit-Test mit Junit.
Testen Sie Active Strage mit RSpec
Testen Sie den GraphQL-Resolver mit rspec
Prüfung
REST-API-Test mit REST Assured Part 2
Prüfung
Scrollen Sie automatisch mit libGDX durch den Hintergrund
Prüfung
Prüfung
[Java] Testen Sie private Methoden mit JUnit
Kopieren Sie den Test und fügen Sie ihn mit RSpec ein
Einschlussbeziehungen der Testliste zu AssertJ
Testen Sie den Spring Framework Controller mit Junit
[Schienen] Machen wir einen Unit-Test mit Rspec!
Mit EqualsVerifier wurde der equals () -Test sofort abgeschlossen
Steuern Sie die Testreihenfolge in Junit4 mit einem Aufzählungstyp
Java EE Test (CDI / Interceptor) mit Arquillian
Führen Sie einen Transaktionsbestätigungstest mit Spring Boot durch
[Ruby on Rails] Controller-Test mit RSpec
[Ruby on Rails] Modelltest mit RSpec
So testen Sie den privaten Bereich mit JUnit
Der JUnit 5-Gradle-Test führt zu einem Fehler mit der Lombok-Annotation
Einführung eines automatisierten Java-Tests mit JUnit 5 + Gradle
Formularklassenvalidierungstest mit Spring Boot