2009-05-21 64 views
31

Chúng tôi có hàng trăm thử nghiệm được xác định cho vòng đời giai đoạn thử nghiệm tích hợp của chúng tôi trong maven, và mất nhiều thời gian để hoàn thành.Làm thế nào để chạy thử nghiệm riêng lẻ trong mục tiêu thử nghiệm tích hợp trong maven

Điều tôi muốn làm chỉ chạy một thử nghiệm trong integration-test. Tôi đã thử làm:

mvn -Dtest=<my-test> integration-test 

nhưng điều đó không hiệu quả. Các -Dtest chỉ chạy các bài kiểm tra trong mục tiêu kiểm tra đơn vị, không phải giai đoạn thử nghiệm tích hợp. Tôi đã cố gắng thay thế -Dintegration-test=<my-test> và điều đó đã bị bỏ qua.

Có cách nào để làm điều đó không?


cấu hình của tôi là:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>surefire-it</id> 
      <phase>integration-test</phase> 
      <goals> 
       <goal>test</goal> 
      </goals> 
      <configuration> 
       <excludes> 
        <exclude>none</exclude> 
       </excludes> 
       <includes> 
        <include>**/api/**</include> 
       </includes> 
    ..... 
+0

Tôi vừa thực hiện điều này trên dự án của mình và nó hoạt động. Bất kỳ cơ hội bạn có thể gửi phần cắm chắc chắn từ pom? –

+0

org.apache.maven.plugins maven-surefire-plugin chắc chắn hơn-nó hội nhập-kiểm tra kiểm tra none **/api/** ..... – Jalpesh

+0

tôi không thể đăng bài trong điều đầy đủ vì một hạn chế. Nhưng đó là ý chính của nó. – Jalpesh

Trả lời

2

Tôi không chắc chắn về JUnit, nhưng đối với TestNG chiến lược sẽ được xác định một tập tin XML bộ chỉ với một kiểm tra, và sau đó trong POM của bạn cấu hình plugin chắc chắn để chỉ chạy. Trong POM của bạn, bạn sẽ có một cái gì đó như thế này (từ chối trách nhiệm, đây là chưa được kiểm tra):

<plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>integration-test</phase> 
     <configuration> 
      <suiteXmlFiles> 
      <suiteXmlFile>single-test.xml</suiteXmlFile> 
      </suiteXmlFiles> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

Để cấu hình các tập tin bộ, xem http://testng.org/doc/documentation-main.html

+0

Tôi đồng ý với James. TestNG phù hợp với điều đó, nhưng tôi nghĩ tốt hơn nên sử dụng các nhóm TestNG: @Test (groups = {"slow_test"}) Sau đó, trong bộ TestNG của bạn: Sau đó, bạn luôn có thể bao gồm/loại trừ các nhóm đặc biệt –

3

tôi vật lộn qua chuyện này, và tôi đã tạo ra một hồ sơ bổ sung để sử dụng khi tôi muốn chạy chỉ một thử nghiệm tích hợp. Tôi hy vọng rằng tôi đã chiết xuất thành công chỉ là phần bên phải ở đây:

<profile> 
     <id>integrationTestSingle</id> 
     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>surefire-it</id> 
          <phase>integration-test</phase> 
          <goals> 
           <goal>test</goal> 
          </goals> 
          <configuration> 
           <includes> 
            <include>**/integration/**/${test}.java</include> 
           </includes> 
           <skipTests>false</skipTests> 
          </configuration> 
         </execution> 
        </executions> 
        <configuration> 
         <argLine>-Xms256M -Xmx768M -XX:MaxPermSize=256M</argLine> 
        </configuration> 
       </plugin> 

       <plugin> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>default-test</id>         
          <configuration> 
           <skipTests>true</skipTests> 
          </configuration> 
         </execution> 
        </executions> 

       </plugin> 
      </plugins> 
     </build> 
    </profile> 

Bây giờ, tôi gọi maven với hồ sơ cá nhân integrationTestSingle và với -DfailIfNoTests=false -Dtest=NameOfTest, và nó không chạy bất kỳ các bài kiểm tra thường xuyên trong giai đoạn "thử nghiệm thường xuyên "giai đoạn và chỉ chạy thử nghiệm NameOfTest trong giai đoạn thử nghiệm tích hợp.

26

Nếu bạn đang sử dụng Maven failsafe plugin, bạn có thể chạy một thử nghiệm tích hợp duy nhất thông qua

mvn -Dit.test=your.TestCase verify 

Xem the failsafe plugin docs for more info.

+1

này làm việc cho tôi trên 2013/07/26 với plugin phiên bản 2.15 và Maven 3.1.0 bất chấp câu trả lời khác nói gì. Câu trả lời khác dường như là một lỗi. – ArtB

+1

được xác minh cho mvn 3.2.5, plugin 2.18. chạy thử nghiệm một hội nhập: mvn hội nhập-kiểm tra -Dit.test = MyClassIT Tuy nhiên, điều này cũng chạy thử nghiệm đơn vị: mvn xác minh -Dit.test = MyClassIT – user77115

+0

Hãy nhận biết rằng đây vẫn có thể chạy thử nghiệm đơn vị. Để tắt thực thi các kiểm tra đơn vị, hãy thêm '-Dtest = foo -DfailIfNoTests = false' (giả sử foo không tồn tại), xem https://stackoverflow.com/questions/6612344/prevent-unit-tests-in-maven- thử nghiệm nhưng cho phép tích hợp. – asmaier

21

Các Failsafe documentation sẽ có bạn chỉ định các xét nghiệm như vậy:

mvn -Dit.test=BrokenIT verify 

Tuy nhiên, -Dit.test không xuất hiện để làm việc nữa. Thay vào đó, cùng một tham số được sử dụng để chỉ định một thử nghiệm Surefire rõ ràng sẽ làm việc cho Failsafe. Ví dụ:

mvn -Dtest=WorksIT verify 

Tôi đã đệ đơn bug (EDIT : được đóng như "không thể tái tạo" trong 2,12) để sửa tài liệu.

+2

Điều này sẽ được chấp nhận làm câu trả lời. – whaley

+0

Không thể kích hoạt trình xây dựng-helper-maven-plugin mà init môi trường thử nghiệm. – okwap

+0

@okwap Điều đó nghe có vẻ giống như một điều gì đó đặc biệt đối với thiết lập dự án và plugin của bạn, chứ không phải vấn đề kiểm tra tích hợp/Failsafe. – Lyle

0

Chỉ cần tự mình điều hành. Một cái gì đó như thế này làm việc tốt cho tôi:

mvn -Pintegration-test -Dtest=<my-test> 

Bí quyết là đảm bảo rằng nhóm thử nghiệm đã được đề cập trước phần -Dtest.

2

chỉ cần thêm -DfailIfNoTests=false hoạt động cho tôi với testNG. Một cái gì đó như thế này:

mvn integration-test -Dtest=aITest -DfailIfNoTests=false 
Các vấn đề liên quan