Je m'appelle @SatohJohn et je suis en charge du troisième jour du calendrier de l'avent Java. Cette fois, j'écrirai les paramètres pour écrire un test automatisé à l'aide de Gauge. Apparemment, c'est un peu la même chose que annoncé au JJUG, mais je suis désolé. Je voudrais résumer les détails en phrases.
https://getgauge.io/index.html Un outil qui vous permet d'écrire des tests automatisés en démarque.
Installer la jauge https://getgauge.io/get-started.html Sur mac, vous pouvez installer avec brew.
Créez un projet maven comme suit. (commande d'arbre pratique!
.
├── 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
Le pilote est inclus car le chrome est cette fois utilisé dans le sélénium. manifest.json décrit le format d'implémentation et les informations de plugin de Gauge.
manifest.json
{
"Language": "java",
"Plugins": [
"spectacle"
]
}
Placez les paramètres dans env. Il y a d'autres paramètres, mais je pense que c'est ce que vous utilisez réellement.
default.properties
#Répertoire pour mettre le résultat de l'exécution
gauge_reports_dir = reports
#S'il faut mettre à jour les résultats de la mise en œuvre
overwrite_reports = true
#Voulez-vous prendre une capture d'écran en cas d'échec
screenshot_on_failure = true
#Journal des détails de la mise en œuvre
logs_directory = logs
java.properties
#Paramètres à transmettre à la JVM
gauge_jvm_args = -Dselenide.browser=chrome
#Niveau d'initialisation de l'état(Voir ci-dessous)
gauge_clear_state_level = scenario
pom.xml ressemble à ceci:
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> <!--Répertoire des spécifications à exécuter-->
</configuration>
<goals>
<goal>execute</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Veuillez changer la version de la goyave. Sinon, il entrera en conflit avec la bibliothèque selenide avant l'exécution et vous obtiendrez l'exception suivante.
Failed: Before Suite
Message: java.lang.NoSuchMethodError: com.google.common.util.concurrent.SimpleTimeLimiter.create(Ljava/util/concurrent/ExecutorService;)Lcom/google/common/util/concurrent/SimpleTimeLimiter;
Le répertoire où specs contient le démarquage. java in test est une implémentation de markdown. La méthode d'écriture est la suivante.
Fondamentalement, je pense que le flux d'écriture d'un test automatisé est le suivant.
@ Step
@ Step
Pour implémenter la partie à exécuter, créez une classe appropriée comme indiqué ci-dessous et ajoutez @ Step
à la méthode.
À ce stade, décidez du nom lorsqu'il est appelé depuis le fichier de spécifications. [1]
StepImplementation.java
import com.codeborne.selenide.Selenide;
import com.thoughtworks.gauge.Step;
public class StepImplementation {
@Step("<url>ouvert") //[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("Le titre est<title>Être")
public void verifyTitle(String title) {
String actual = Selenide.title();
Assert.assertThat(actual, CoreMatchers.is(title));
}
}
Dans cet exemple, Selenide obtient le titre de la page et le compare avec l'argument.
test.spec
tester[4]
====================
##Ouvrez la page JJUG[5]
[6]
* "http://www.java-users.jp/ccc2017fall/"ouvert
*Le titre est"JJUG CCC 2017 Fall"Être
[4] Ce sera la spécification complète de ce fichier. Vous pouvez exécuter le scénario du même fichier au moment de l'exécution. [5] Ce sera le nom du cas de test (scénario). [6] \ * est le contenu (étape) du test à effectuer. L'implémentation écrite précédemment en Java est appelée. "Le contenu est passé en argument. Vous pouvez également écrire avec <>. Vous pouvez transmettre des fichiers et des tables locaux ainsi que des caractères simples. Si vous écrivez le texte sans écrire \ # etc., il sera traité comme un commentaire. (Je voulais vraiment écrire [6] sur la ligne *
Voir https://docs.getgauge.io/longstart.html pour une méthode de description détaillée.
Le résumé s'appelle un concept. Écrivez le concept dans un fichier .cpt.
test.cpt
#tester
* "http://www.java-users.jp/ccc2017fall/"ouvert
Si vous écrivez comme ci-dessus, vous pouvez réécrire test.spec comme suit
test.spec
tester
====================
##Ouvrez la page JJUG
*tester
*Le titre est"JJUG CCC 2017 Fall"Être
Avec @ BeforeSuite
, vous pouvez modifier les paramètres du navigateur avant d'effectuer le test automatisé.
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", //Si vous avez ces deux, ce sera une exécution sans tête
"test-type");
ChromeDriver chromeDriver = new ChromeDriver(options);
WebDriverRunner.setWebDriver(chromeDriver);
}
}
De plus, il y a @ BeforeSpec
, @ BeforeScenario
, @ BeforeStep
et After de chaque minutage, il est donc possible d'initialiser à chaque minutage.
J'ai un plugin, donc je lance juste mvn test
.
Le résultat sera le suivant.
#tester
##Ouvrez la page JJUG ✔ ✔
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] ------------------------------------------------------------------------
Introduction de l'outil de test automatisé Gauge. Je pense que c'est très agréable de pouvoir le décrire avec un balisage. En outre, la démarque facilite la révision. Écrivons un test automatisé! Au fait, cette démo est postée sur github, alors essayez-la! https://github.com/furyu-john/gauge-sample
Recommended Posts