Starting apache server before integration testing fails

I have a web application called GroupWebApplication. Using the pom.xml file, I just create a war of my application and deploy the tomcat server. This is basically a maven project. I have added plugins for Tomcat7 Apache Server.

Now that I want to start the tomcat server, then run the integration tests, and after completing the integration tests, I want to stop the server. I mainly use the testng.xml file of the TestNg framework.testng.xml files, which contains all the classes for integration tests. In manual mode, it works fine, i.e. Starts the server manually and starts the test.

Here is the pom file:

<dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.3.1</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>sGroupWebApplication Integration Test</finalName> <resources> <resource> <directory>src/main/resources</directory> </resource> </resources> <pluginManagement> <plugins> <!-- Maven Tomcat Plugin --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.4</version> <executions> <execution> <id>resource-dependencies</id> <phase>initialize</phase> <goals> <goal>unpack-dependencies</goal> </goals> <configuration> <includeGroupIds>com.company.integration.test</includeGroupIds> <includeArtifactIds>engine</includeArtifactIds> <includes>**\/*.xpi,**\/*.exe,**\/*.so, **\/*.ftl,**\/*.css,**\/*.woff, **\/*.properties,**\/*.png,**\/chromedriver,**\/*.MF</includes> <outputDirectory>${project.build.directory}/classes</outputDirectory> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.0</version> <configuration> <url>http://localhost:8080/manager/text</url> <server>localhost</server> <path>/GroupWebApplication</path> <username>admin</username> <password>s3cret</password> </configuration> <executions> <execution> <id>tomcat7-run</id> <goals> <goal>run-war-only</goal> </goals> <phase>pre-integration-test</phase> <configuration> <fork>true</fork> </configuration> </execution> <execution> <id>tomcat7-shutdown</id> <goals> <goal>shutdown</goal> </goals> <phase>post-integration-test</phase> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version>2.4.2</version> </plugin> <!-- Java compiler version --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${target.jdk}</source> <target>${target.jdk}</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> <manifestEntries> <Project-Name>Integration App</Project-Name> <Build-Version>${project.version}</Build-Version> <Build-Date>${maven.build.timestamp}</Build-Date> </manifestEntries> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <version>3.0</version> <configuration> <outputEncoding>UTF-8</outputEncoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.9.1</version> <configuration> <reportOutputDirectory>javadoc</reportOutputDirectory> <destDir>javadoc</destDir> </configuration> </plugin> </plugins> </pluginManagement> </build> 

testng.xml:

  <suite name="INTEGRATION TEST Suite"> <parameter name="logging" value="SEVERE"/> <test name="GrpApiTest"> <classes> <class name="com.company.integration.test.DummyIT"></class> </classes> </test> </suite> 

The error I am getting is:

 [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ GroupWebApplication --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory C:\Users\t_ddbc\Documents\clone_4_ju ne\demo\GroupWebApplication\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ GroupWebApplication --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 6 source files to C:\Users\t_ddbc\Documents\clone_4_june\demo\ GroupWebApplication\target\test-classes [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ GroupWebApplication --- [INFO] Surefire report directory: C:\Users\t_ddbc\Documents\clone_4_june\demo\GroupWebApplication\target\surefire- reports ------------------------------------------------------- TESTS ------------------------------------------------------- Running TestSuite Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNGMapConfigur ator@203e25d3 org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.In vocationTargetException; nested exception is java.lang.reflect.InvocationTargetE xception: null java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray( ReflectionUtils.java:189) at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke (ProviderFactory.java:165) at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(Provi derFactory.java:85) at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(Fork edBooter.java:115) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java: 75) Caused by: java.lang.IllegalStateException: 

In the terminal command that I use at the root of my project mvn verify

This is basically a duplicate of this question , but it does not work for me.

+5
source share
4 answers

Adding Tomcat 7 and Failsafe to Plugin

I took your POM and changed it to work (on my machine, I hope it works for you too). Here is what I changed:

  • Added maven-failafe-plugin in the build/pluginManagement/plugins element. You must enable execution, otherwise it will not execute as indicated on the page.

     <pluginManagement> ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>2.17</version> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> </execution> </executions> </plugin> ... </pluginManagement> 
  • Added tomcat7-maven-plugin and maven-failafe-plugin in the build/plugins element, otherwise they will not work. In general, you must specify all the plugins that you want to use for assembly in the build/plugins element, plugins inherited from the pluginManagement element may not work.

     <build> .... <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> </plugin> </plugins> ... </build> 
  • Upgraded version of tomcat7-maven-plugin to 2.2, but it also works with 2.0.

Complete POM

Here is the full POM I used for your enjoyment of copying;)

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.company</groupId> <artifactId>GroupWebApplication</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <properties> <target.jdk>1.7</target.jdk> </properties> <prerequisites> <maven>2.2.1</maven> </prerequisites> <dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.3.1</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>sGroupWebApplication Integration Test</finalName> <resources> <resource> <directory>src/main/resources</directory> </resource> </resources> <pluginManagement> <plugins> <!-- Maven Tomcat Plugin --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.4</version> <executions> <execution> <id>resource-dependencies</id> <phase>initialize</phase> <goals> <goal>unpack-dependencies</goal> </goals> <configuration> <includeGroupIds>com.company.integration.test</includeGroupIds> <includeArtifactIds>engine</includeArtifactIds> <includes>**\/*.xpi,**\/*.exe,**\/*.so, **\/*.ftl,**\/*.css,**\/*.woff, **\/*.properties,**\/*.png,**\/chromedriver,**\/*.MF</includes> <outputDirectory>${project.build.directory}/classes</outputDirectory> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <url>http://localhost:8080/manager/text</url> <server>localhost</server> <path>/GroupWebApplication</path> <username>admin</username> <password>s3cret</password> </configuration> <executions> <execution> <id>tomcat7-run</id> <goals> <goal>run-war-only</goal> </goals> <phase>pre-integration-test</phase> <configuration> <fork>true</fork> </configuration> </execution> <execution> <id>tomcat7-shutdown</id> <goals> <goal>shutdown</goal> </goals> <phase>post-integration-test</phase> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version>2.4.2</version> </plugin> <!-- Java compiler version --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${target.jdk}</source> <target>${target.jdk}</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> <manifestEntries> <Project-Name>Integration App</Project-Name> <Build-Version>${project.version}</Build-Version> <Build-Date>${maven.build.timestamp}</Build-Date> </manifestEntries> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <version>3.0</version> <configuration> <outputEncoding>UTF-8</outputEncoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.9.1</version> <configuration> <reportOutputDirectory>javadoc</reportOutputDirectory> <destDir>javadoc</destDir> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>2.17</version> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> </plugin> </plugins> </build> </project> 

mvn check output

This is how mvn verify on my machine (some lines are omitted for brevity). I created two test classes so that we can test the Surefire and Failsafe tests: DummyTest for unit tests and DummyIT for integration tests.

 [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building GroupWebApplication 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ ... [INFO] --- maven-surefire-plugin:2.10:test (default-test) @ GroupWebApplication --- [INFO] Surefire report directory: /home/sotest/target/surefire-reports ------------------------------------------------------- TESTS ------------------------------------------------------- Running DummyTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.185 sec Results: Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-war-plugin:2.1.1:war (default-war) @ GroupWebApplication --- [INFO] Packaging webapp [INFO] Assembling webapp [GroupWebApplication] in [/home/sotest/target/sGroupWebApplication Integration Test] [INFO] Processing war project [INFO] Copying webapp resources [/home/sotest/src/main/webapp] [INFO] Webapp assembled in [14 msecs] [INFO] Building war: /home/sotest/target/sGroupWebApplication Integration Test.war [INFO] WEB-INF/web.xml already added, skipping [INFO] [INFO] --- tomcat7-maven-plugin:2.2:run-war-only (tomcat7-run) @ GroupWebApplication --- [INFO] Running war on http://localhost:8080/GroupWebApplication [INFO] Creating Tomcat server configuration at /home/sotest/target/tomcat [INFO] create webapp with contextPath: /GroupWebApplication Aug 20, 2014 9:40:18 PM org.apache.coyote.AbstractProtocol init INFO: Initializing ProtocolHandler ["http-bio-8080"] Aug 20, 2014 9:40:18 PM org.apache.catalina.core.StandardService startInternal INFO: Starting service Tomcat Aug 20, 2014 9:40:18 PM org.apache.catalina.core.StandardEngine startInternal INFO: Starting Servlet Engine: Apache Tomcat/7.0.47 Aug 20, 2014 9:40:19 PM org.apache.coyote.AbstractProtocol start INFO: Starting ProtocolHandler ["http-bio-8080"] [INFO] [INFO] --- maven-failsafe-plugin:2.17:integration-test (default) @ GroupWebApplication --- [INFO] Failsafe report directory: /home/sotest/target/failsafe-reports ------------------------------------------------------- TESTS ------------------------------------------------------- Running DummyIT Configuring TestNG with: TestNGMapConfigurator Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.162 sec - in DummyIT Results: Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- tomcat7-maven-plugin:2.2:shutdown (tomcat7-shutdown) @ GroupWebApplication --- Aug 20, 2014 9:40:20 PM org.apache.coyote.AbstractProtocol pause INFO: Pausing ProtocolHandler ["http-bio-8080"] Aug 20, 2014 9:40:20 PM org.apache.catalina.core.StandardService stopInternal INFO: Stopping service Tomcat Aug 20, 2014 9:40:20 PM org.apache.coyote.AbstractProtocol stop INFO: Stopping ProtocolHandler ["http-bio-8080"] [INFO] [INFO] --- maven-failsafe-plugin:2.17:verify (default) @ GroupWebApplication --- [INFO] Failsafe report directory: /home/sotest/target/failsafe-reports [WARNING] File encoding has not been set, using platform encoding UTF-8, ie build is platform dependent! [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.015s [INFO] Finished at: Wed Aug 20 21:40:20 SGT 2014 [INFO] Final Memory: 22M/291M [INFO] ------------------------------------------------------------------------ 

You can see:

  • Running Surefire unit test DummyTest
  • The beginning of Tomcat
  • DummyIT failover integration DummyIT
  • stop tomcat

I hope this helps! :)

+6
source

Here I see two problems. The first and smaller problem is that you use "mvn integration-test" when you should use "mvn verify".

If you look at the Maven life cycles , you will see that the phases of the life cycle are ordered by "pre-integration-test", "integration-test", "post-integration-test", then "check". Running only the integration test, the post-integration-test hook will not be launched, and the step after the integration is completed to stop the server will not be completed.

You should also use the Failsafe plugin, not the Surefire plugin. The Surefire plugin is designed for unit testing and runs during the “test” life cycle phase, which occurs prior to the pre-integration phase. In other words, your tests run before the Tomcat server starts. Failsafe, which is mainly Surefire, but for integration tests, runs during the integration-test phase, so they will run after the Tomcat server starts in the pre-integration-test phase. It is also worth noting that Failsafe will not fail until a “check” is completed so that your “post-integration-test” work can happen. Therefore, it is important to use “validation” instead of “integration test” as your maven command when using the Failsafe plugin.

+1
source

I also had a problem that led to this error, but for me it turned out that to access the files that run the tests, the test folder did not have file permissions.

Maybe check something

+1
source

Based on what you posted, you defined all the plugins in pluginManagement , which at first glance is correct to determine the versions and configuration. But in order to get the tomcat plugin, you must mention this at least once in your build area.

 <project..> <build> <pluginManagement> ... </pluginManagement> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 

Among other suggestions, such as using maven-failafe-plugin instead of maven-surefire-plugin for integration tests and calling mvn verify , etc. In addition, the use of more modern versions of plugins will also be reasonable.

0
source

Source: https://habr.com/ru/post/1200319/


All Articles