문제

Maven 프로젝트를위한 완전히 자동화 된 통합 테스트를 원합니다. 통합 테스트를 위해서는 실행하기 전에 외부 (플랫폼 의존적) 프로그램이 시작되어야합니다. 이상적으로는 단위 테스트가 완료되면 외부 프로그램이 사망하지만 필요하지 않습니다.

이것을 달성하기위한 Maven 플러그인이 있습니까? 다른 아이디어?

도움이 되었습니까?

해결책

당신은 사용할 수 있습니다 Antrun 플러그인. 내부는 개미를 사용할 것입니다 exec 적용하다 직무.

이 같은.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.2</version>
    <executions>
      <execution>
        <phase> <!-- a lifecycle phase --> </phase>
        <configuration>

          <tasks>
            <apply os="unix" executable="cmd">
              <arg value="/c"/>
              <arg value="ant.bat"/>
              <arg value="-p"/>
            </apply>
            <apply os="windows" executable="cmd.exe">
              <arg value="/c"/>
              <arg value="ant.bat"/>
              <arg value="-p"/>
            </apply>
          </tasks>

        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

물론 ANT 지원 OS 특정 명령을 통해 조건 작업.

다른 팁

나는 현재 간단한 외부 작업 실행자가되기 위해 쉽게 "저하"될 수있는보다 구체적인 플러그인을 연구하고 있지만 ... 고려해야 할 몇 가지 사항이 있습니다.

  1. 프로세스가 실제로 시작되었다는 것을 어떻게 알 수 있습니까?
  2. 반환 코드로 무엇을합니까?
  3. Executor 플러그인이 먼저 실행되는지 확인하십시오 (테스트 컴파일 단계에 바인딩)?

실제로 플러그인을 개발하기 시작하면 더 많은 것이있을 것이라고 확신하지만 실제로 일반적인 임원이 필요합니까?

업데이트:

CodeHaus에는 훌륭한 Maven 플러그인 세트가 있다고 생각합니다. 여기에 원하는 것이 있습니다. http://mojo.codehaus.org/exec-maven-plugin/.

화물 Maven 플러그인은 서블릿 개발을하고 있으며 통합 테스트를위한 결과 전쟁을 배치하려는 경우 좋은 방법입니다.

내가 직접 할 때, 나는 종종 멀티 모듈 프로젝트를 설정하고 (엄격하게 Nessecly는 아니지만) 모든 통합 테스트를 해당 모듈에 캡슐화합니다. 그런 다음 프로파일이있는 모듈을 활성화하여 즉시 "예, 내가 파산 한 것을 알고 있습니다"빌드를 차단하지 않도록합니다.

다음은 해당 기능 테스트 모듈의 POM입니다.

<?xml version="1.0"?><project>
  <parent>
    <artifactId>maven-example</artifactId>
    <groupId>com.jheck</groupId>
    <version>1.5.0.4-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.jheck.example</groupId>
  <artifactId>functional-test</artifactId>
  <name>Example Functional Test</name>
  <packaging>pom</packaging>

  <dependencies>
    <dependency>
      <groupId>com.jheck.example</groupId>
      <artifactId>example-war</artifactId>
      <type>war</type>
      <scope>provided</scope>
      <version>LATEST</version>
    </dependency>
    <dependency>
      <groupId>httpunit</groupId>
      <artifactId>httpunit</artifactId>
      <version>1.6.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>testCompile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <executions>
          <execution>
            <phase>integration-test</phase>
            <goals>
              <goal>test</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.codehaus.cargo</groupId>
        <artifactId>cargo-maven2-plugin</artifactId>
        <version>0.3</version>
        <configuration>
          <wait>false</wait> <!-- don't pause on launching tomcat... -->
          <container>
            <containerId>tomcat5x</containerId>
            <log>${project.build.directory}/cargo.log</log>
            <zipUrlInstaller>
              <!--
              <url>http://www.apache.org/dist/tomcat/tomcat-5/v5.0.30/bin/jakarta-tomcat-5.0.30.zip</url>
               -->
               <!-- better be using Java 1.5... -->
              <url>http://www.apache.org/dist/tomcat/tomcat-5/v5.5.26/bin/apache-tomcat-5.5.26.zip</url>

              <installDir>${installDir}</installDir>
            </zipUrlInstaller>
          </container>
          <configuration>
            <!-- where the running instance will be deployed for testing -->
            <home>${project.build.directory}/tomcat5x/container</home>
          </configuration>
        </configuration>

        <executions>
          <execution>
            <id>start-container</id>
            <phase>pre-integration-test</phase>
            <goals>
              <goal>start</goal>
              <goal>deploy</goal>
            </goals>
            <configuration>
              <deployer>
                <deployables>
                  <deployable>
                    <groupId>com.jheck.example</groupId>
                    <artifactId>example-war</artifactId>
                    <type>war</type>
                    <!-- <properties>
                      <plan>${basedir}/src/deployment/geronima.plan.xml</plan>
                    </properties> -->
                    <pingURL>http://localhost:8080/example-war</pingURL>
                  </deployable>
                </deployables>
              </deployer>
            </configuration>
          </execution>
          <execution>
            <id>stop-container</id>
            <phase>post-integration-test</phase>
            <goals>
              <goal>stop</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>

실제 통합 테스트를 Maven 라이프 사이클의 통합 테스트 단계에 바인딩하고 싶을 것입니다. 실제 테스트를 수행하기 위해 안전 실패 (Aptly Named FailSafe 플러그인과 같은) 플러그인을 사용하는 경우 다음과 같은 단계를 실행할 수 있습니다.

사전 통합 테스트: 외부 응용 프로그램 시작 (EXEC 플러그인 또는 다른 제안 중 하나를 사용하여)

통합 테스트: FailSafe 플러그인을 사용하여 실제 통합 테스트 실행

통합 후 테스트: 외부 응용 프로그램을 종료하고 필요한 다른 정리를 수행하십시오.

확인하다: 실패 플러그인이 테스트 결과를 확인 하고이 시점에서 빌드에 실패하도록합니다.

Exec 플러그인을 사용하는 것이 매우 간단합니다. 트릭은 응용 프로그램을 시작하는 것입니다. 백그라운드에서. 다음 단계에서 테스트를 시작하기 전에 앱이 완전히 올라가도록주의해야합니다. 불행히도, 신청서를 확보하고 백그라운드에서 실행하는 동안 충분한 지 확인하는 것이 항상 사소한 작업이 아니며,이를 수행하는 방법에 대한 세부 사항은 응용 프로그램에 따라 다릅니다. 종종 응용 프로그램에 사용자 정의 코드가 포함됩니다.

응용 프로그램 서버를 시작 하시겠습니까? 살펴보십시오 뱃짐 그리고 그것 Maven 플러그인.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top