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.
https://getgauge.io/index.html Ein Tool, mit dem Sie automatisierte Tests in Markdown schreiben können.
Messgerät installieren https://getgauge.io/get-started.html Auf dem Mac können Sie mit Brew installieren.
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.
Grundsätzlich denke ich, dass der Ablauf des Schreibens eines automatisierten Tests wie folgt ist.
@ Step
@ 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]
}
}
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.
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.
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
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.
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] ------------------------------------------------------------------------
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