2013-05-07 44 views
24

Có cách nào để tăng tốc độ thực thi lặp lại py.test không? Nó dường như dành nhiều thời gian để thu thập các bài kiểm tra, ngay cả khi tôi chỉ định tệp nào sẽ thực thi trên dòng lệnh. Tôi biết nó không phải là một vấn đề tốc độ đĩa hoặc kể từ khi chạy pyflakes trên tất cả các tập tin .py là rất nhanh.Làm thế nào để tăng tốc độ py.test

+1

Bạn có chắc chắn rằng giai đoạn "thu thập" chậm không? Hãy thử chạy py.test bằng '--collectonly'. – alecxe

+1

Vâng, đó là bộ sưu tập chậm. Tôi có thể thấy số lượng thu thập bắt đầu bằng 0, chuyển đến 2, sau đó 7. Tôi đã xác minh lại số này bằng '--collectonly'. Việc thu thập bài đăng thực hiện gần như ngay lập tức. –

+1

Tôi có một dự án với hơn 400 bài kiểm tra và giai đoạn thu thập rất nhanh. Ngoài ra tôi có conftest.py bổ sung rất nhiều phép thuật, rất nhiều 'parametrize', fixtures, và 'pytest_generate_tests' mà làm cho việc thu thập chậm hơn, mặc dù việc thu thập này nhanh trong trường hợp của tôi. Kiểm tra xem bạn không có mã riêng có tương tác với pha thu thập pytest và làm cho nó chậm hơn. Nếu không, bạn có thể chạy profiler như profiler dòng để xem mã nào chậm. – spinus

Trả lời

9

Sử dụng tùy chọn norecursedirs trong pytest.ini hoặc tox.ini có thể tiết kiệm rất nhiều thời gian thu thập, tùy thuộc vào những tệp khác bạn có trong thư mục làm việc của mình. Thời gian thu thập của tôi là khoảng một nửa cho một bộ 300 bài kiểm tra khi tôi có mà tại chỗ (0,34 vs 0,64).

Nếu bạn đã sử dụng tox như tôi, bạn chỉ cần thêm dòng sau trong tox.ini của bạn:

[pytest] 
norecursedirs = docs *.egg-info .git appdir .tox 

Bạn cũng có thể thêm nó vào một tập tin pytest.ini miễn phí-đứng.

Tài liệu pytest có more details on py.test configuration files.

+0

Ngoài ra (hoặc thay vào đó), bạn nên định cấu hình 'testpaths', nghĩa là' testpaths = src/tests'. Sau đó, bạn không cần phải bỏ qua '.git',' .tox', vv .. – blueyed

4

Tôi đã gặp vấn đề tương tự khi tôi gọi số py.test tại gốc của dự án và các thử nghiệm của tôi là ba thư mục con. Bộ sưu tập đã lấy 6-7 giây trước 0,4 giây thực hiện kiểm tra thực tế.

Giải pháp của tôi ban đầu là để gọi py.test với đường dẫn tương đối so với các bài kiểm tra:

py.test src/www/tests/ 

Nếu làm điều đó tăng tốc bộ sưu tập của bạn cũng vậy, bạn có thể thêm đường dẫn tương đối so với các xét nghiệm để kết thúc addopts thiết lập trong bạn pytest.ini - ví dụ:

[pytest] 
addopts = --doctest-glob='test_*.md' -x src/www/tests/ 

này giảm bộ sưu tập + thời gian thực hiện xuống khoảng một giây và tôi có thể vẫn chỉ gọi py.test như tôi trước kia.

+1

Cách tốt hơn là định cấu hình điều này bằng 'testpaths', tức là' testpaths = src/www/tests'. – blueyed

1

Với xdist bạn có thể song song chạy py.test. Nó cho phép thậm chí gửi thử nghiệm đến các máy từ xa. Tùy thuộc vào thiết lập của bạn, nó có thể tăng tốc khá một chút :)

2

Trong trường hợp đặc biệt, nơi bạn đang chạy dưới python của Cygwin, xử lý tệp kiểu unix của nó chậm. Xem pytest.py test very slow startup in cygwin để biết cách tăng tốc mọi thứ trong tình huống đặc biệt đó.

0

Nếu bạn có một số phần mềm chống vi-rút đang chạy, hãy thử tắt nó đi. Tôi đã có cùng một vấn đề này. Việc thu thập thử nghiệm chạy cực kỳ chậm. Nó hóa ra là phần mềm chống vi-rút của tôi (Avast) đã gây ra sự cố. Khi tôi tắt phần mềm chống vi-rút, bộ sưu tập thử nghiệm chạy nhanh gấp năm lần. Tôi đã thử nghiệm nó nhiều lần, bật và tắt chống vi-rút, vì vậy tôi không nghi ngờ gì là nguyên nhân trong trường hợp của tôi.

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