2010-08-30 52 views
8

bằng Maven surefire, tôi không thể thực hiện kiểm tra song song. Có nghĩa là, mỗi trường hợp thử nghiệm của tôi đều chạy trong một JVM serapate, do đó nó là forking. Ngoài ra, tôi muốn các trường hợp thử nghiệm của mình chạy song song. phần đầu tiên là làm việc mà không có vấn đề: Tôi có thể chạy từng trường hợp thử nghiệm trong JVM riêng của mình. phần thứ hai, tuy nhiên vẫn là một challene cho tôi. Tôi đã không quản lý để có được việc thực hiện paralle của các trường hợp thử nghiệm làm việc. Dưới đây là cách khai báo plugin của tôi trông giống như:Maven Chắc chắn: Không thể thực hiện kiểm tra song song song song

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.5</version> 
     <configuration> 
      <parallel>methods</parallel> 
      <forkMode>always</forkMode> 
       <argLine>-Xms512m -Xmx512m</argLine> 
     </configuration> 
</plugin> 

Tôi đã thử cả hai phương thức và lớp nhưng chưa thấy bất kỳ sự song song nào. Phiên bản JUnit của tôi là 4.7 như được hiển thị bởi tuyên bố khai báo:

<dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.7</version> 
     <scope>compile</scope> 
    </dependency>    

Bất kỳ trợ giúp nào sẽ được đánh giá cao.

Gregoire.

Trả lời

7

Tôi nghĩ rằng bạn có nghĩa vụ phải sử dụng tham số threadCount khi sử dụng parallel chế độ:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
     <forkMode>always</forkMode> 
     <argLine>-Xms512m -Xmx512m</argLine> 
     <parallel>methods</parallel> 
     <threadCount>4</threadCount> 
    </configuration> 
    </plugin> 
2

Hãy chắc chắn rằng bạn sẽ có được một cái gì đó thông điệp log như thế này

[INFO] Concurrency config is {perCoreThreadCount=false, threadCount=1, parallel=classes, configurableParallelComputerPresent=true} 

Ngay trước khi nhóm này:

------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 

Thông báo này cho biết rằng nhà cung cấp junit chắc chắn song song đang hoạt động.

Nếu đây không phải là hiện tại, chắc chắn có thể chọn một phiên bản junit khác với bạn nghĩ. Mọi thứ dưới 4.7 sẽ không hoạt động. Chạy phụ thuộc mvn: cây để kiểm tra phiên bản nào có mặt.

Bạn cũng nên nâng cấp lên chắc chắn 2.6 vì một số lỗi nhỏ liên quan đến hoạt động song song đã được khắc phục. Vì lý do tương tự, bạn nên sử dụng junit mới nhất.

+0

Bạn không muốn perCoreThreadCount là đúng? Nếu không có threadCount 1, có nghĩa là bạn đang chạy song song với chỉ một chuỗi, tức là nối tiếp? – Nicolai

+0

Không, bạn muốn các luồng được phân phối trên mỗi lõi có sẵn, không phải tất cả các luồng trên một lõi. Thật không may, họ đặt mặc định là perCoreThreadCount = true, thực thi tất cả các luồng trên một lõi. – rwst

0

Bạn có chắc là nó không hoạt động? Bạn có thể không đạt được nhiều tốc độ nếu thử nghiệm của bạn không chứa nhiều phương pháp thử nghiệm. Với forkMode = luôn luôn tốt nhất bạn có thể làm là chạy tất cả các phương thức thử nghiệm trong một lớp, song song.

1

Hãy thử thay đổi forkMode của bạn từ luôn thành "không bao giờ". Nó không tuyên bố điều này trong tài liệu của họ, nhưng bạn không thể có ngã ba cộng song song tại thời điểm này (chúng tôi tìm thấy điều này sau khi đào qua mã chắc chắn.)

Chỉ cần bạn biết, có thể bạn sẽ chạy thử nghiệm không chủ đề an toàn do nhiều thư viện kiểm tra/hỗ trợ (easymock, powermock, v.v.) làm mất hiệu lực khả năng song song các bài kiểm tra của bạn.

4

tôi đã cùng một vấn đề, bởi vì tôi đã được sử dụng chắc chắn hơn phiên bản 2.7, sau khi nâng cấp lên 2.12 nó làm việc với các cấu hình sau:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.12</version> 
    <configuration> 
    <parallel>classes</parallel> 
    <forkMode>perthread</forkMode> 
    <threadCount>4</threadCount> 
    </configuration> 
</plugin> 

Nó sinh ra 4 bài, mỗi chạy, điều đó JVM riêng.

+1

Giải pháp này có lỗi được giải quyết trong plugin maven-surefire 2.13. Kiểm tra chủ đề này để biết thêm thông tin: http://stackoverflow.com/questions/11098073/maven-surefire-failsafe-forkmode-perthread-is-not-working-a-workaround – ggarciao

0

Chắc chắn 2.16 cố định thực hiện song song liên quan đến các kiểm tra JUnit.