2008-10-30 22 views
8

Chúng tôi đã có một nhu cầu liên tục ở đây mà tôi không thể tìm ra cách để giải quyết bằng cách sử dụng các công cụ và tài liệu về Maven 2.Có cách nào để tách chạy dài (ví dụ: kiểm tra căng thẳng) ra để chúng không chạy theo mặc định trong Maven 2 không?

Một số nhà phát triển của chúng tôi có một số thử nghiệm chạy JUnit rất dài (thường là kiểm tra căng thẳng) trong mọi trường hợp không nên chạy như một phần thường xuyên của quá trình xây dựng/xây dựng hàng đêm.

Dĩ nhiên chúng ta có thể sử dụng cơ chế loại trừ các plugin chắc chắn hơn và chỉ đá trái banh chúng từ xây dựng, nhưng lý tưởng chúng tôi rất muốn một cái gì đó mà sẽ cho phép các nhà phát triển để chạy chúng theo ý muốn thông qua Maven 2.

Trả lời

11

Thông thường bạn sẽ thêm một hồ sơ để cấu hình maven bạn chạy một bộ khác nhau của các bài kiểm tra:

chạy này với mvn -Pintegrationtest cài đặt

<profile> 
     <id>integrationtest</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <configuration> 
         <argLine>-client -Xmx896m -XX:MaxPermSize=192m</argLine> 
         <forkMode>once</forkMode> 
         <includes> 
          <include>**/**/*Test.java</include> 
          <include>**/**/*IntTest.java</include> 
         </includes> 
         <excludes> 
          <exclude>**/**/*SeleniumTest.java</exclude> 
         </excludes> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
     <activation> 
      <property> 
       <name>integrationtest</name> 
      </property> 
     </activation> 
    </profile> 
1

Sử dụng một plugin thử nghiệm hội nhập như Super Helpful Integration Test Thingy để tách Integra Kiểm tra tion (chạy dài, có hệ thống) từ Bài kiểm tra Đơn vị (người thuần túy nói tối đa 30 giây cho tất cả các bài kiểm tra đơn vị thực sự chạy). Tạo hai gói Java cho các bài kiểm tra đơn vị của bạn so với các bài kiểm tra tích hợp.

Sau đó, không ràng buộc plugin này sang một giai đoạn (các maven vòng đời bình thường) và chỉ chạy nó khi nó được gọi một cách rõ ràng như một mục tiêu, như vậy: mvn shitty:clean shitty:install shitty:test

<plugins> 
    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>shitty-maven-plugin</artifactId> 
    </plugin> 
</plugins> 

Bằng cách này, các nhà phát triển bình thường của bạn sẽ không bị ảnh hưởng và bạn sẽ có thể chạy thử nghiệm tích hợp theo yêu cầu.

0

Một tùy chọn khác là để kiểm tra căng thẳng phát hiện nó đang chạy trong maven và chỉ chạy một hoặc hai lần. tức là biến thành kiểm tra chức năng thông thường. Bằng cách này bạn có thể kiểm tra mã vẫn còn tốt, nhưng không chạy trong một thời gian dài.

+1

Mùi một chút giống như một hack để tôi. –

+0

@MaartenBodewes thực sự. –

4

Thêm vào krosenvold 's câu trả lời, để đảm bảo không có vấn đề nghi ngờ, hãy chắc chắn bạn cũng có một cấu hình mặc định mà được kích hoạt theo mặc định rằng không bao gồm việc lồng ghép hoặc stresstests bạn muốn chạy trong hồ sơ đặc biệt của bạn.

<profile> 
    <id>normal</id> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <configuration> 
        <excludes> 
         <exclude>**/**/*IntTest.java</exclude> 
        </excludes> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
</profile> 

Bạn sẽ cần phải tạo ra một hồ sơ cá nhân như thế này, chỉ cần liệt kê các surefire-plugin bên ngoài của một hồ sơ sẽ ghi đè lên các hồ sơ đó nên được lựa chọn với:

mvn -P integrationtest clean install 
Các vấn đề liên quan