2016-03-12 20 views
9

Tôi đã tìm kiếm câu trả lời trong vài ngày qua và không thể tìm thấy câu trả lời. Câu trả lời gần nhất tôi có thể tìm thấy là this không trả lời chính xác những câu hỏi tôi có.Thi hành song song với tài sản MaxParallelForks Gradle

Nhân tiện, tôi có Dự án thử nghiệm Selenium dựa trên Gradle. Chúng tôi xây dựng dự án trên Jenkins chạy thử nghiệm trong 20 chủ đề đồng thời. Tổng số các lớp thử nghiệm duy nhất tôi có là 87. Vì vậy, tôi mong đợi gradle để exeute ít nhất 5 đợt Dự án thử nghiệm được xây dựng bằng cách sử dụng Cucumber JVM, xây dựng và kích hoạt các bài kiểm tra của Jenkins cho Selenium Hub. Tôi đã cố gắng tăng tính song song của các bài kiểm tra bằng cách sử dụng lưới càng nhiều càng tốt. Nhưng, vấn đề bắt đầu khi số lượng các bài kiểm tra bắt đầu phát triển.

Khi tôi bắt đầu thử nghiệm từ Jenkins, tôi quan sát thấy ở lần đầu tiên thử nghiệm đã thực hiện tất cả 20 quy trình thử nghiệm và tôi thấy lô thứ hai cũng bắt đầu với cùng một số quy trình. Sau đợt thứ hai, các quá trình quay trở lại chế độ đơn và toàn bộ công việc mất 14 giờ để hoàn thành việc đánh bại mục đích của việc thực thi kiểm tra song song.

tính Gradle:

jvmArgs '-Xms128m', '-Xmx1024m', '-XX:MaxPermSize=128m' 
Runtime.runtime.availableProcessors().toString()) as int   
maxParallelForks = PropertyUtils.getProperty('test.parallel', '15') as int 
forkEvery = PropertyUtils.getProperty('test.forkEvery', '0') as int 

CLI:

gradle clean test -Dtest.single=*TestRun --info 

Tôi đã đọc toàn bộ hồ sơ tôi có thể thể tìm thấy nhưng không nhận được câu trả lời. Nó sẽ được đánh giá rất cao nếu ai đó có thể giúp tôi với những câu hỏi này

1. Làm thế nào Gradle bó thử nghiệm nội bộ? Ví dụ nếu 20 người thi hành bắt đầu và kiểm tra 1,2,3 thực hiện thực thi nhanh hơn những người khác, thì ba người thi hành có thêm ba lớp thử nghiệm hay chờ cho toàn bộ lô thực hiện xong không?

2. Can forkEvery tác động đến cách thực thi hoạt động trong khi thử nghiệm song song?

Jenkins đăng nhập

quá trình bắt đầu thành công 'Gradle thử nghiệm Executor 6'

quá trình bắt đầu thành công 'Gradle thử nghiệm Executor 13'

quá trình bắt đầu thành công 'Gradle thử nghiệm Executor 14'

Quá trình bắt đầu thành công 'Trình kiểm tra Gradle 5'

quá trình bắt đầu thành công 'Gradle thử nghiệm Executor 16'

quá trình bắt đầu thành công 'Gradle thử nghiệm Executor 8'

quá trình bắt đầu thành công 'Gradle thử nghiệm Executor 19'

quá trình bắt đầu thành công 'Gradle thử nghiệm Executor 4 '

Quy trình bắt đầu thành công' Gradle Test Executor 2 '

Đã bắt đầu quá trình thành công' Gradle Test Executor 11'

quá trình bắt đầu thành công 'Gradle thử nghiệm Executor 10'

quá trình bắt đầu thành công 'Gradle thử nghiệm Executor 18'

quá trình bắt đầu thành công 'Gradle thử nghiệm Executor 1'

quá trình bắt đầu thành công ' Gradle Test Executor 20 '

Quá trình bắt đầu thành công' Gradle Test Executor 7 '

quá trình bắt đầu thành công 'Gradle thử nghiệm Executor 9'

quá trình bắt đầu thành công 'Gradle thử nghiệm Executor 3'

quá trình bắt đầu thành công 'Gradle thử nghiệm Executor 15'

quá trình bắt đầu thành công 'Gradle thử nghiệm Executor 17'

Đã bắt đầu thành công quá trình 'Nhân viên kiểm tra Gradle 12'

Trình kiểm tra Gradle Người thực thi bắt đầu thực hiện kiểm tra.

Gradle Test Executor 14 bắt đầu thực hiện kiểm tra.

Gradle Test Executor 6 bắt đầu thực hiện các kiểm tra.

Gradle Test Executor 5 bắt đầu thực hiện kiểm tra.

Gradle Test Executor 16 bắt đầu thực hiện kiểm tra.

Gradle Test Executor 19 bắt đầu thực hiện kiểm tra.

Gradle Test Executor 8 bắt đầu thực hiện kiểm tra.

Gradle Test Executor 4 bắt đầu thực hiện kiểm tra.

Gradle Test Executor 2 bắt đầu thực hiện các kiểm tra.

Gradle Test Executor 10 bắt đầu thực hiện kiểm tra.

Gradle Test Executor 11 bắt đầu thực hiện kiểm tra.

Gradle Test Executor 18 bắt đầu thực hiện kiểm tra.

Gradle Test Executor 1 bắt đầu thực hiện các kiểm tra.

Gradle Test Executor 20 bắt đầu thực hiện kiểm tra.

Gradle Test Executor 7 bắt đầu thực hiện kiểm tra.

Gradle Test Executor 3 bắt đầu thực hiện kiểm tra.

Gradle Test Executor 9 bắt đầu thực hiện kiểm tra.

Gradle Test Executor 17 bắt đầu thực hiện kiểm tra.

Kiểm tra Gradle Người điều hành 15 bắt đầu thực hiện các kiểm tra.

Kiểm tra Gradle Executor 12 bắt đầu thực hiện các kiểm tra.

+0

Bạn biết chạy 20 trình duyệt (giả sử selenium) có thể sẽ chậm hơn 1 lần phải không? –

+0

@tim_yates true. Nhưng, tôi sử dụng lưới selen và nhiều máy. Đó có phải ý của bạn? – Saifur

Trả lời

3

Giá trị mặc định của forkEvery là 0

Theo the documentation forkEvery là

Số lượng tối đa của các lớp học thử nghiệm để thực hiện trong một quá trình thử nghiệm chia hai. Quá trình thử nghiệm được chia đôi sẽ được khởi động lại khi đạt đến giới hạn này. Giá trị mặc định là 0 (không tối đa).

Vì vậy, gradle (và có thể junit) sẽ chia theo lớp không phải kiểm tra trong lớp. Có vẻ như một vài trong số 87 lớp thử nghiệm có các bài kiểm tra chạy dài hoặc một số lượng lớn các bài kiểm tra và chúng kết thúc trong một quá trình kiểm tra phân chia. Tôi sẽ xem xét việc thiết lập forkEvery thành 1. Điều này sẽ đảm bảo rằng mỗi lớp thử nghiệm được gửi đến một ngã ba mới. Nếu vẫn còn một vấn đề, bạn có thể cần phải tìm các lớp thử nghiệm nào đang dùng nhiều thời gian nhất. Xem xét chia các lớp này thành các nhóm nhỏ hơn các bài kiểm tra để các bài kiểm tra được lan truyền trên mỗi jvm. Nếu nó là một thử nghiệm mà mất mãi mãi xem xét thiết kế lại nó và có thể tạo ra các bài kiểm tra nhỏ hơn từ nó.

Tôi không tin rằng gradle chạy thử nghiệm theo lô. Khi một nhân viên trở nên có sẵn, phải mất một lớp thử nghiệm từ hàng đợi các bài kiểm tra còn lại. Bạn thực sự sẽ phải xem xét cách JUnit hoạt động như tôi chắc chắn gradle chỉ đơn giản là truyền các cấu hình này cho JUnit.

Các vấn đề liên quan