2013-09-25 104 views
10

Tôi có Jenkins với plugin Xcode được cấu hình để chạy kiểm tra đơn vị bằng cách thêm hành động xây dựng thử nghiệm vào cài đặt Đối số xcodebuild tùy chỉnh. Để biết thêm thông tin về cách Jenkins chạy thử nghiệm đơn vị ở tất cả với Xcode 5, hãy xem số question này.xcodebuild làm hỏng kết quả kiểm tra đầu ra khi đầu ra được chuyển hướng đến tệp

Bây giờ tôi chạy nó, có vẻ như kết hợp đầu ra console từ các câu lệnh NSLog hoặc thông báo ** TEST SUCCEEDED ** cuối cùng với kết quả kiểm tra, do đó thỉnh thoảng vấp phải trình phân tích cú pháp chuyển đổi kết quả kiểm tra đơn vị sang định dạng JUnit cần thiết cho Jenkins.

Ví dụ, các bản ghi Jenkins cho thấy đầu ra như thế này:

Test Case '-[Redacted_Conversion_Tests testConvertTo_ShouldSetamount_WhenamountIsNotZero]' passed (** TEST SUCCEEDED ** 

0.000 seconds). 
Test Case '-[Redacted_Conversion_Tests testConvertTo_ShouldSetamount_WhenamountIsZero]' started. 

khi nó thực sự nên là:

Test Case '-[Redacted_Conversion_Tests testConvertTo_ShouldSetamount_WhenamountIsNotZero]' passed (0.000 seconds). 
Test Case '-[Redacted_Conversion_Tests testConvertTo_ShouldSetamount_WhenamountIsZero]' started. 
** TEST SUCCEEDED ** 

tôi đã nhìn vào này hơn nữa và kéo Jenkins ra của hình ảnh. Nếu tôi chạy lệnh xcodebuild trực tiếp tại dấu nhắc lệnh:

xcodebuild \ 
    -workspace project.xcworkspace \ 
    -scheme Tests \ 
    -configuration Release \ 
    -sdk iphonesimulator7.0 \ 
    -destination "platform=iOS Simulator,name=iPhone Retina (4-inch),OS=latest" \ 
    test 

đầu ra luôn xuất hiện tốt, theo thứ tự.

Tuy nhiên, nếu tôi ống đầu ra để một chương trình khác hoặc chuyển hướng đến một tập tin:

xcodebuild \ 
    -workspace project.xcworkspace \ 
    -scheme Tests \ 
    -configuration Release \ 
    -sdk iphonesimulator7.0 \ 
    -destination "platform=iOS Simulator,name=iPhone Retina (4-inch),OS=latest" \ 
    test > xcodebuild.out 
cat xcodebuild.out 

Đầu ra là out-of-trật tự như đã mô tả ở trên.

Điều này có thể do bộ đệm hoặc thiếu đệm khi không trực tiếp ghi vào chế độ xuất chuẩn không? Có ai biết tại sao điều này đang xảy ra và bất kỳ cách giải quyết nào mà tôi có thể thực hiện để sửa chữa nó?

+0

phân tích cú pháp nào bạn sử dụng để thay đổi sản lượng đến kết quả xét nghiệm junit? – kocodude

+0

[OCUnit2JUnit] (https://github.com/ciryon/OCUnit2JUnit) – GBegen

Trả lời

9

Nhờ điều này answer, tôi đã phát hiện ra một cách để vô hiệu hóa tính năng đệm bằng cách sử dụng lệnh script.

script -q -t 0 xcodebuild.out \ 
    xcodebuild \ 
     -workspace project.xcworkspace \ 
     -scheme Tests \ 
     -configuration Release \ 
     -sdk iphonesimulator7.0 \ 
     -destination "platform=iOS Simulator,name=iPhone Retina (4-inch),OS=latest" \ 
     test 
cat xcodebuild.out 
+0

nếu bạn đang dẫn đến lệnh khác * ho * ocunit2junit * ho * sau đó '' ' script -q/dev/null xcodebuild ... | ocunit2junit '' ' sẽ hoạt động – Jon

+5

Kết thúc trò chơi, nhưng cách khác để thực hiện điều này là với' env NSUnbufferedIO = YES xcodebuild ... '. Thử nghiệm trên Yosemite và Xcode 7. –

9

Theo ghi nhận của Malte trong một chú thích ở trên, một giải pháp sạch hơn có thể là

env NSUnbufferedIO=YES xcodebuild ... 
+0

Đó là giải pháp thực sự –