[JAVA] Automatisez les tests d'intégration avec le plug-in Maven Failsafe

Puisqu'il a été constaté que le test d'intégration peut être automatisé en utilisant Maven Failsafe Plugin, il est décrit comme un mémorandum.

Par exemple, il peut être utilisé lorsque vous souhaitez automatiser les tests suivants

--Envoyez une demande à l'application qui crée des informations de réponse avec un servlet ou un filtre et confirmez que la réponse attendue est renvoyée.

Exemple de programme

environnement

Implémentation de l'application

--Créez un projet Maven avec l'archétype Maven ci-dessous image.png

--Définissez les dépendances sous la forme suivante

pom.xml


	<dependencies>
		<!-- Servlet API -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>4.0.1</version>
			<scope>provided</scope>
		</dependency>
		<!--client-->
		<dependency>
			<groupId>org.glassfish.jersey.core</groupId>
			<artifactId>jersey-client</artifactId>
			<version>2.28</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.inject</groupId>
			<artifactId>jersey-hk2</artifactId>
			<version>2.28</version>
			<scope>test</scope>
		</dependency>
		<!-- JUnit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

--Préparez le code source suivant

DemoServlet.java


import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/demo")
public class DemoServlet extends HttpServlet {

	private static final long serialVersionUID = 2564544155028547344L;

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.getWriter().println("body");
	}
}

DemoFilter.java


import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

@WebFilter("/demo")
public class DemoFilter implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response);
		wrapper.setHeader("Header-Name", "value");
		chain.doFilter(request, wrapper);
	}

	@Override
	public void destroy() {
	}
}

--Préparez le code de test suivant

DemoIT.java


import static org.junit.Assert.assertEquals;

import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.Response;

import org.junit.Test;

public class DemoIT {

	@Test
	public void test() {
		//Envoyer la demande au serveur
		Response response = ClientBuilder.newClient().target("http://localhost:8080/sample-it/demo").request().get();
		//Assurez-vous que le filtre fonctionne comme prévu
		assertEquals("value", response.getHeaderString("Header-Name"));
		//Assurez-vous que le servlet fonctionne comme prévu
		assertEquals("body", response.readEntity(String.class).trim());
	}
}

Définir le plugin Failsafe

plus tard,

--Démarrez le serveur d'applications --Déployez l'application sur le serveur --Exécuter la classe de test

Rendre le processus automatiquement exécuté en fonction du flux de.

Pour cela, utilisez le plug-in Failsafe. (Le plug-in Failsafe est un plug-in qui peut contrôler l'exécution des tests. Vous pouvez définir le prétraitement et le post-traitement de l'exécution du test comme décrit ci-dessus.) Puisque vous ne pouvez pas démarrer le serveur ou déployer l'application avec le plug-in Failsafe, Utilisez le plugin Apache Tomcat Maven. Ce qui suit est défini.

pom.xml


	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-failsafe-plugin</artifactId>
				<version>3.0.0-M3</version>
				<executions>
					<execution>
						<goals>
							<goal>integration-test</goal>
							<goal>verify</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<!--Plugin pour faire fonctionner Tomcat-->
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<version>2.2</version>
				<executions>
					<!--Prétraitement de l'exécution des tests-->
					<execution>
						<id>run</id>
						<phase>pre-integration-test</phase>
						<goals>
							<!--Lancer l'application Tomcat / Deploy-->
							<goal>run</goal>
						</goals>
						<!--Paramètres pour activer l'exécution des objectifs après l'exécution-->
						<configuration>
							<fork>true</fork>
						</configuration>
					</execution>
					<!--Traitement post-test-->
					<execution>
						<id>shutdown</id>
						<phase>post-integration-test</phase>
						<goals>
							<!--Tomcat s'est arrêté-->
							<goal>shutdown</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

Le test peut être effectué en exécutant la commande suivante.

mvn clean verify

Pour Spring Boots, SprintBootTest semble être en mesure d'automatiser les tests d'intégration, il ne vaut donc peut-être pas la peine d'utiliser le plug-in Failsafe. Cependant, pour les applications telles que Spring MVC qui doivent être déployées sur un serveur, ce plug-in peut être utilisé pour l'automatiser. Il semble être utilisable lorsqu'il y a de nombreux changements de spécifications tels que l'agilité.

Recommended Posts

Automatisez les tests d'intégration avec le plug-in Maven Failsafe
Test d'intégration avec Gradle
Développement de plug-in avec ImageJ
Automatisez le format avec maven-formatter
Combinez des fichiers jar à l'échelle du système en un seul avec Maven Shade Plugin
Combinez des fichiers jar à l'échelle du système en un seul avec le plug-in de dépendance Maven