2013-06-15 44 views
9

Trong tất cả các hướng dẫn tôi đã đọc cho Test::Class, có vẻ là một tập lệnh runner tải tất cả các lớp. Và tôi nghĩ từ quan điểm của Test::Harness đây chỉ là một thử nghiệm khổng lồ. Tôi không nghĩ rằng nó có thể song song các bài kiểm tra bên trong Á hậu.Có thể kiểm tra :: Các bài kiểm tra lớp được chạy song song không? (hoặc làm thế nào để tính ra các bài kiểm tra siêu lớp)

Vấn đề X của tôi là tôi đang cố gắng tính các hành vi siêu hạng khi kiểm tra các lớp con. Mỗi phân lớp phải có kiểm tra phân lớp riêng của nó (có thể được song song), nhưng cũng có các hành vi tập thể dục được thừa kế từ lớp cha. Làm thế nào mà?

Chỉnh sửa: Tôi đã tìm thấy hai bài đăng này từ năm 2007 dường như ngụ ý rằng những gì tôi yêu cầu không tương thích/không thể. Bất kỳ cập nhật nào kể từ đó?

+0

bạn có thể xem 'forkprove' nhưng tôi không phải là sur e nếu nó hoạt động với 'Test :: Class' một cách chính xác – Taras

+1

Rõ ràng,' Test :: Harness' không có kiểm soát thực hiện kiểm tra song song: http://stackoverflow.com/questions/11977015/how-to-run-some-but -không-tất cả các bài kiểm tra-in-a-perl-test-suite-song song – fenway

+0

Tất nhiên là có. Nhưng tôi đang sử dụng Test :: Class, không phải Test :: Harness. –

Trả lời

5

Test::Class không hỗ trợ parallelisation ngày của riêng mình. Có lẽ là giải pháp đơn giản nhất sẽ là có các vận động viên .t riêng biệt cho từng lớp thử nghiệm của bạn (hoặc cho các nhóm thử nghiệm hợp lý) và chạy bằng cách sử dụng ví dụ: prove -j9.

Nếu bạn thực sự muốn chạy tất cả các thử nghiệm song song, bạn có thể viết một kịch bản đơn giản để tự động tạo một tệp .t cho mỗi lớp thử nghiệm. Bạn sẽ mất lợi ích hiệu suất khi chạy nhiều lớp thử nghiệm trong một trình thông dịch perl duy nhất, nhưng việc song song có thể bù đắp cho chi phí khởi động bổ sung. Và tôi cho rằng không có vấn đề bao nhiêu Test::Class cố gắng để cung cấp cô lập thử nghiệm, nó không thể đảm bảo rằng trong Perl. Một khi bạn bắt đầu tận dụng lợi thế của việc sửa đổi bảng biểu tượng cho mục đích chế nhạo, vv, các xét nghiệm của bạn sẽ bắt đầu can thiệp với nhau trừ khi bạn luôn nhận được quyền dọn dẹp. Chạy từng thử nghiệm trong một trình thông dịch riêng biệt perl là cách tốt hơn để cung cấp sự cách ly được bảo đảm.

3

Để thực hiện kiểm tra :: Lớp song song, tôi đã sử dụng cơ chế sau. Hy vọng nó có thể giúp bạn.

Tôi đã sử dụng mô-đun Parallel::ForkManager để gọi thử nghiệm. Nhưng có

tham số biến môi trường TEST_METHOD, do đó các xét nghiệm cần được chạy

trong mỗi thread song song

này cung cấp một sự cô lập trong các bài kiểm tra khác bởi vì, mỗi bài kiểm tra được gọi một cách độc lập, và

quy trình xử lý được quản lý để chờ cho đến khi tất cả quy trình con được hoàn thành

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