2009-09-14 28 views
14

Tôi đang di chuyển một vài dự án từ một kiến ​​xây dựng lên một con quạ. Máy chủ xây dựng là, và sẽ vẫn còn, Hudson.Phạm vi mã Java ở Hudson

Tôi gặp sự cố khi ghi lại phạm vi mã trong hudson với cobertura do số tests run and recorded twice problem.

Dự án đa mô-đun và sẽ tốt đẹp, mặc dù không bắt buộc, để có kết quả tổng hợp của dữ liệu bao trùm mã.

Tất cả trong tất cả, giải pháp tôi đang tìm bắt buộc:

kiểm tra
  • chạy tự động cho tất cả các mô-đun và ghi lại các kết quả lần;
  • hiển thị phạm vi mã mô-đun riêng lẻ ở Hudson;
  • được cấu hình dễ dàng một lần cho toàn bộ dự án, không phải trong mọi mô-đun.

Giải pháp có thể dựa trên Cobertura hoặc Emma hoặc bất kỳ công cụ bảo vệ mã java nào khác.


Cập nhật: Chạy thử nghiệm với Emma vẫn bản sao kết quả và không có khả năng merge, vì vậy nó không thực sự có thể sử dụng với nhiều mô-đun xây dựng.

Trả lời

1

Robert,

Tôi có vấn đề này như là tốt và tìm thấy rằng Hudson không thực hiện báo cáo gấp đôi nếu bạn thiết lập các dự án như một dự án tự do chứ không phải là một dự án Maven2. Bạn mất một số tính độc đáo của việc có một dự án maven2, nhưng đối với chúng tôi, đó là một giao dịch mà chúng tôi phải thực hiện.

Jeff

+0

Cảm ơn câu trả lời. Nó là tốt để biết và tôi sẽ có điều này như là tùy chọn dự phòng. –

+0

Chắc chắn. Ngoài ra, tôi không chắc chắn 100%, nhưng tôi tin rằng điều xảy ra là mã được thiết kế kết thúc trên đường dẫn lớp trước mã không có tài liệu và sau đó khi kiểm tra đơn vị được chạy bởi plugin chắc chắn, nó sẽ chạy mã được thiết bị dẫn đến kết quả được tính hai lần. Nếu bạn có các plugin khác chạy thử nghiệm đơn vị, bạn sẽ thấy số lần kiểm tra nhân lại. Bạn có thể chạy xây dựng của bạn với mvn -X để có được thông tin gỡ lỗi mà nên cung cấp cho classpath. –

1

Chúng tôi sử dụng các dự án kiểu miễn phí và không gặp vấn đề này, như được chỉ ra, đây có thể là nguồn gốc của sự cố của bạn.

Để cung cấp tính năng hợp nhất, chúng tôi đã tạo kho lưu trữ đồ tạo tác riêng của mình (chúng tôi không sử dụng Maven). Vào cuối mỗi bản dựng, chúng tôi sao chép tệp cobertura.ser vào một mạng chia sẻ, đổi tên nó trong tiến trình. Chúng tôi có một công việc xem hợp nhất sao chép tất cả các tập tin cobertura và các tập tin mã nguồn (xây dựng một artifact sao chép vào mạng chia sẻ) vào thư mục xây dựng địa phương và tạo ra các báo cáo Cobertura.

Việc thiếu một kho lưu trữ đồ tạo tác tiêu chuẩn trong Hudson là một chút bực bội, nhưng nó có ý nghĩa cho các tác giả thường sử dụng Maven cho những nhu cầu đó. Quá trình xây dựng của chúng tôi chạy trên nhiều máy chủ để chúng tôi không thể chỉ sử dụng đường dẫn tương đối vào các thư mục công việc khác.

Lưu ý, chúng tôi làm tương tự cho các số liệu khác: kết quả kiểm tra, JavaNCSS, vv. và tham gia bằng cách sử dụng các công cụ chính xác hoặc một số mã tùy chỉnh.

Chúng tôi sử dụng cùng một kho lưu trữ cho các tạo phẩm xây dựng truyền thống: DLL, JAR, tập lệnh cài đặt.

1

Bạn đã xem Atlassian's Clover chưa?

Plugin maven-clover2 có mục tiêu mới: clover2:setup sẽ chỉ đơn giản là đưa ra các bài kiểm tra của bạn mà không cần sử dụng vòng đời hoặc chạy thử nghiệm hai lần.

Bạn sẽ xác định các mục tiêu để chạy trong Hudson như vậy:

mvn clover2:setup verify clover2:aggregate clover2:clover 

Các maven-clover2-plugin là hoàn toàn miễn phí để thử trong 30 ngày.

+0

Cảm ơn bạn đã trả lời. Tôi đã xem xét Clover, nhưng AFAIK nó không làm việc với công việc M2 Hudson, chỉ với một trong những tự do. –

+0

Hi Robert, Tôi sẽ xem xét điều đó.Nó chắc chắn hoạt động nếu bạn sử dụng một công việc maven tự do mặc dù. Chúc mừng, Nick – npellow

6

Hơi khó hiểu, nhưng cách tiếp cận tôi đang sử dụng là sử dụng modified version of the Maven cobertura plugin (là available from their repo). Nó cung cấp một mục tiêu cobertura: generate-report, để bạn có thể chèn cobertura: instrument và cobertura: tạo báo cáo vào vòng đời của bạn trước và sau khi chạy thử nghiệm, tương ứng. Điều đó sẽ giúp bạn có được dữ liệu về mức độ phù hợp mà bạn muốn mà không cần thực hiện bản ghi/thực hiện kiểm tra trùng lặp.

Vấn đề cơ bản là tất cả các plugin bảo vệ không phải là clover Maven mà tôi chạy vào đều được xây dựng xung quanh ý tưởng chạy thử nghiệm với vùng phủ sóng riêng biệt từ lần thực hiện thử nghiệm chính trong vòng đời Maven. Điều này, rõ ràng, kết quả trong hai bộ thực thi kiểm tra. Nếu bạn đang sử dụng một dự án tự do, bạn sẽ chỉ nhận được một tập hợp các bài kiểm tra được ghi lại (kể từ khi, ngay cả với hai lần thực thi kiểm tra, chỉ có một bản sao của kết quả thử nghiệm), nhưng kiểu dự án Maven thực sự chặn các thực thi mojo Maven và hồ sơ kiểm tra đầu ra/kết quả tại thời gian thực hiện kiểm tra, thay vì tất cả cùng một lúc ở cuối của xây dựng như các dự án tự do làm. Điều này có rất nhiều lợi thế, nhưng nó cũng có những bất lợi khá rõ ràng rằng một thử nghiệm duy nhất được thực hiện hai lần được tính là hai xét nghiệm. Điều đó nói rằng, trong khi tôi đã nhìn thấy các đối số mạnh mẽ để chạy các thử nghiệm đối với cả mã không có dụng cụ và nhạc cụ, tôi chỉ muốn chạy các kiểm tra một lần, chống lại mã được thiết kế - không chỉ vì các vấn đề Maven/Hudson, nhưng bởi vì khi bạn đã có các bài kiểm tra mất 45 phút, có vẻ khá thẳng thắn ngớ ngẩn khi chạy chúng hai lần để tạo ra kết quả tương tự.

+0

Có vẻ thú vị, cảm ơn. –

+0

Liên kết không hoạt động nữa, có thể bạn có thể cập nhật chúng? Cảm ơn! – dhiller

1

Xem Phạm vi kiểm tra Java SD cho một công cụ trên không cực kỳ thấp với giao diện đẹp. Tôi không chắc tôi hiểu vấn đề "chạy hai lần" của bạn, nhưng nếu bạn chạy thử nghiệm cùng một lần với các công cụ SD, bạn sẽ nhận được dữ liệu kiểm tra tương tự, ví dụ: idempotent của nó. Nếu thử nghiệm của bạn không xác định, bạn sẽ nhận được hai lần chạy thử khác nhau, nhưng những công cụ này dễ dàng kết hợp các kết quả của một vài lần chạy vào một bản tóm tắt tổng thể duy nhất.

Chúng cũng xử lý các ứng dụng cực lớn và xử lý nhiều ứng dụng luồng khá tốt (mảnh vỡ thời gian nhỏ có thể khiến câu trả lời không chính xác về mặt lý thuyết, nhưng thực hành điều này không đơn giản là vấn đề).

+0

Cảm ơn câu trả lời. Có bằng cách thay đổi một plugin maven cho công cụ này không? Tôi đã không thể tìm thấy một. –

+0

Xin lỗi, không có plugin maven. –

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