2010-06-24 35 views
7

Tôi có một thư mục chứa rất nhiều tệp .py (nói test_1.py, test_2.py và vv) Mỗi ​​tệp được viết đúng cách để sử dụng với mũi. Vì vậy, khi tôi chạy tập lệnh nosetests, nó tìm thấy tất cả các bài kiểm tra trong tất cả các tệp .py và thực thi chúng.Bắt các phép thử để song song bằng cách sử dụng mũi trong python

Bây giờ tôi muốn song song chúng để tất cả các thử nghiệm trong tất cả các tệp .py được coi là song song và được ủy quyền cho các quy trình công nhân.

Dường như theo mặc định, thực hiện:

nosetests --processes=2 

giới thiệu không xử lý song song ở tất cả và tất cả các bài kiểm tra trên tất cả các file py vẫn chạy chỉ trong một quá trình

Tôi đã thử đặt một _multiprocess_can_split_ = True ở mỗi tệp .py nhưng không có sự khác biệt

Cảm ơn mọi đầu vào!

+0

How are you xác định liệu nó trả song song ở tất cả? Tôi có một mục tiêu tương tự nhưng tôi nghĩ * Tôi có một vấn đề khác với bạn ... có thể là không. – fholo

Trả lời

12

Có vẻ như mũi, thực sự là plugin đa xử lý, sẽ chạy thử nghiệm song song. Thông báo trước là cách nó hoạt động, bạn có thể không thực hiện kiểm tra trên nhiều quy trình. Các plugin tạo ra một hàng đợi kiểm tra, sinh ra nhiều quy trình và sau đó mỗi quá trình tiêu thụ hàng đợi đồng thời. Không có công văn kiểm tra cho mỗi quá trình, do đó nếu thử nghiệm của bạn đang thực hiện rất nhanh, chúng có thể sẽ được thực hiện trong cùng một quá trình.

Ví dụ sau sẽ hiển thị beaviour này:

tập tin test1.py

import os 
import unittest 

class testProcess2(unittest.TestCase): 

    def test_Dummy2(self): 
     self.assertEqual(0, os.getpid()) 

tập tin test2.py

import os 
import unittest 

class testProcess2(unittest.TestCase): 

    def test_Dummy2(self): 
     self.assertEqual(0, os.getpid()) 

Running nosetests --processes = 2 kết quả đầu ra (chú ý quá trình giống hệt nhau id)

FF 
====================================================================== 
FAIL: test_Dummy2 (test1.testProcess2) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "C:\temp\test1.py", line 7, in test_Dummy2 
    self.assertEqual(0, os.getpid()) 
AssertionError: 0 != 94048 

====================================================================== 
FAIL: test_Dummy1 (test2.testProcess1) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "C:\temp\test2.py", line 8, in test_Dummy1 
    self.assertEqual(0, os.getpid()) 
AssertionError: 0 != 94048 

---------------------------------------------------------------------- 
Ran 2 tests in 0.579s 

FAILED (failures=2) 
.210

Bây giờ nếu chúng ta thêm một giấc ngủ tại một trong những thử nghiệm

import os 
import unittest 
import time 

class testProcess2(unittest.TestCase): 

    def test_Dummy2(self): 
     time.sleep(1) 
     self.assertEqual(0, os.getpid()) 

Chúng tôi nhận được (chú ý quá trình id khác nhau)

FF 
====================================================================== 
FAIL: test_Dummy1 (test2.testProcess1) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "C:\temp\test2.py", line 8, in test_Dummy1 
    self.assertEqual(0, os.getpid()) 
AssertionError: 0 != 80404 

====================================================================== 
FAIL: test_Dummy2 (test1.testProcess2) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "C:\temp\test1.py", line 10, in test_Dummy2 
    self.assertEqual(0, os.getpid()) 
AssertionError: 0 != 92744 

---------------------------------------------------------------------- 
Ran 2 tests in 1.422s 

FAILED (failures=2) 
Các vấn đề liên quan