2010-08-16 31 views
6

Chúng tôi có một bộ kiểm tra đơn vị phong nha về mã của chúng tôi và các kiểm tra đơn vị đó chạy trong chưa đầy 2 phút. Chúng tôi cũng sử dụng TeamCity để thực hiện việc xây dựng và chạy thử nghiệm sau mỗi lần đăng ký. Tuy nhiên, chúng tôi vẫn gặp sự cố khi một nhà phát triển "quên" chạy tất cả các kiểm tra trước khi cam kết dẫn đến thất bại TeamCity nếu việc kiểm tra này được thực hiện lúc 6 giờ chiều có thể bị phá vỡ qua đêm.Nhớ chạy thử nghiệm trước khi cam kết

"Forgets" là một thuật ngữ chung, có một vài lý do phổ biến khác tại sao thậm chí nhớ để chạy các bài kiểm tra có thể dẫn đến TeamCity thất bại. Nhu la.

-> Nhà phát triển chỉ kiểm tra một số tệp được sửa đổi trong không gian làm việc của mình.
-> Một tệp đã được sửa đổi bên ngoài nhật thực sao cho góc nhìn đồng bộ hóa của nhật thực không phát hiện ra nó là bẩn.

Bạn giải quyết vấn đề này như thế nào trong tổ chức của mình?

Chúng tôi đang nghĩ đến việc giới thiệu "thủ tục kiểm tra" cho nhà phát triển sẽ là một công cụ tự động sẽ tự động chạy tất cả các kiểm tra đơn vị và sau đó cam kết tất cả các tệp "bẩn" trong không gian làm việc của bạn. Bạn đã có kinh nghiệm với quá trình này chưa? Bạn có biết bất kỳ công cụ nào có thể tạo thuận lợi cho quá trình này không? Môi trường dev của chúng tôi là Python sử dụng plugin PyDev của Eclipse.

+0

Điều này có thể hoặc không thể giúp ích, tôi chỉ sử dụng nó cho Visual Studio và một tập lệnh msbuild bao gồm các bài kiểm tra đơn vị. Có một nhật thực thêm trong đó hiện một xây dựng (với các bài kiểm tra đơn vị nếu cần thiết) trước khi kiểm tra in Có vẻ như có một điều tương tự cho nhật thực. http://www.jetbrains.com/teamcity/features/supported_platforms.html#Supported_IDEs – MatthewMartin

Trả lời

3

Đối với mercurial bạn có thể sử dụng móc, sẽ chạy thử nghiệm và chỉ cho phép đẩy thành công. Nhưng điều này có thể đòi hỏi rất nhiều thời gian cho một cú đẩy (nhưng nhà phát triển vẫn phải chạy các kiểm thử đó).

Hoặc bạn chỉ có thể có tập hợp các tập lệnh bash riêng, sẽ chạy thử nghiệm và chỉ sau đó chạy lệnh cam kết. Ví dụ cho django và svn cam kết nó có thể nhìn như đơn giản như thế này:

./manage.py test && svn commit [email protected] 

Hoặc có một cách khác: nếu có ai cam mã, mà không vượt qua kiểm tra, ông trả một số tiền. Chẳng bao lâu mọi người sẽ nhớ thử nghiệm, vì họ sẽ không thích khái niệm trả tiền ;-)

+0

Tôi làm bí danh bí danh svnci = "bundle exec rspec spec && svn ci -m" –

4

Tôi nghĩ rằng đó là một vấn đề xã hội hơn là thiếu các hệ thống tự động.

Có, bạn có thể cải thiện các hệ thống tại chỗ, nhưng chúng sẽ không phù hợp cho ai đó nghĩ về các tác động của cam kết của chúng và kiểm tra nó trước khi chúng đạt cam kết.

+0

Tôi đồng ý với điều này và rất nhiều việc có thể được thực hiện với đào tạo. Chúng tôi cũng đã cố gắng sử dụng các cơ chế phản hồi khác nhau và đã nhận được nhiều thứ tốt hơn. Nhưng vẫn có một thất bại ít nhất một lần một tuần. Vì vậy, tôi tự hỏi nếu yêu cầu mọi người liên tục thực hiện quy trình kiểm tra nhiều bước là quá nhiều để hỏi và chúng tôi chỉ nên có một công cụ cho điều đó. – Kozyarchuk

+0

+1. Odd mà tôi đọc điều này khi tôi nhìn chằm chằm vào một chính bị hỏng trong 24 giờ qua do một người nào đó cam kết và rời đi. Nhóm của tôi đã khá tốt về quy trình "cam kết và đảm bảo", nhưng nó đã bắt đầu trượt gần đây. Một nhóm lớn hơn, chúng tôi làm việc với nhau để cung cấp cho mọi người 1 giờ để khắc phục sự cố xây dựng của họ hoặc thay đổi được hoàn nguyên. Khi thực hiện đào tạo và thảo luận với nhóm của bạn, họ cần phải tham gia vào cam kết với cây phát triển chung có nghĩa là bạn cam kết và đảm bảo các thay đổi là hợp lệ. Nếu không, bạn đang cản trở khả năng của đồng đội của bạn để làm công việc của họ. – dirtybird

6

Trong một trong các đội tôi đã làm việc trước khi chúng tôi có thỏa thuận rằng bất kỳ ai vi phạm các bài kiểm tra đều mua bánh mì kẹp thịt xông khói cho cả đội vào sáng hôm sau. Cực đoan của nó, nhưng nó hoạt động hoàn hảo!

3

TeamCity có một số hỗ trợ cho pretested commit; nếu nhóm phát triển của bạn đang sử dụng một IDE được hỗ trợ, bạn có thể xem xét điều đó.

Trong công ty của tôi, chúng tôi không lo lắng quá nhiều - mẫu của chúng tôi trông giống như thế này.

(a) mỗi nhà phát triển có cấu hình dự án của riêng họ trong TeamCity, với gốc trỏ đến hộp cát riêng của họ. Họ được phép làm bất cứ điều gì họ thích ở đây.

(b) nhóm phát triển có hộp cát tích hợp, nơi tất cả thay đổi được phân phối. Một dự án gói gọn các cấu hình giám sát nhánh này trong hệ thống điều khiển nguồn. Dev Leads nhận được để tạo nên các quy tắc ở đây, nhưng quy tắc đó hầu như luôn luôn "nó phải ở lại màu xanh". Tôi phải xem xét tỷ lệ phần trăm chính xác của các bản xây dựng sạch - nó không phải là một bản ghi hoàn hảo, nhưng nó đủ cao đến mức tôi chưa bao giờ bị cám dỗ để nhấn mạnh rằng các nhà phát triển có kỷ luật hơn về chạy thử nghiệm.

(c) phân phối thực tế đến từ luồng Chính, trong đó Shall Stay Green (tm). Dev lead chịu trách nhiệm phân phối ảnh chụp nhanh tích hợp tới luồng chính theo lịch được xác định rõ. Dự án này là dự án thực sự tạo trình cài đặt được phân phối để thử nghiệm, các bit đi vào ký quỹ, v.v.

Một lý do khiến bạn có thể có được một chính sách tích cực hơn là chu kỳ xây dựng của chúng tôi chậm - theo thứ tự bốn giờ. Nếu chúng tôi có một thứ tự độ lớn nhỏ hơn, với tỷ lệ thành công thấp, tôi có thể tranh luận một trường hợp khác.

+0

Bạn có làm điều này với subversion hoặc DVCS? Nếu subversion, làm thế nào để bạn quản lý sandbox nhà phát triển? – Kozyarchuk

+0

Các chính sách được hình thành trong khi chúng tôi sử dụng Perforce; mỗi sandbox được ánh xạ tới một nhánh. – VoiceOfUnreason

0

Đối với git bạn có thể: http://francoisgaudin.com/2011/02/16/run-django-tests-automatically-before-committing-on-git/

Run Django kiểm tra tự động trước khi cam kết trên Git

Vì tôi thường quên chạy thử nghiệm đơn vị trước khi cam kết, tôi dành nhiều thời gian tìm kiếm cái xấu cam kết khi tôi tìm thấy hồi quy 3 cam kết sau.

Tuy nhiên, thật dễ dàng để chạy thử nghiệm tự động trước mỗi cam kết . Trong .git/móc/pre-cam kết, đưa:

python manage.py 
test exit $? 

sau đó chmod 755 tập tin này và nó được thực hiện. Tôi thực sự yêu thích git :-)

Đừng quên mã nguồn ảo của bạn trước khi cam kết.

Lưu ý rằng các thử nghiệm được chạy trên cây đang hoạt động của bạn chứ không phải cam kết , vì vậy nếu bạn chỉ cam kết một phần cây đang hoạt động, nó có thể bị lỗi trong khi cam kết của bạn vượt qua kiểm tra.

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