2013-12-16 13 views
14

Tôi hiện đang làm việc để làm sạch các bài kiểm tra chức năng Django của mình để sử dụng LiveServerTestCase hơn là bật các bài kiểm tra dựa trên selenium trên môi trường phát triển đang chạy trong nền và tôi đã đâm vào tường. Mỗi lần tôi cố gắng chạy một thử nghiệm LiveServerTestCase, tôi nhận được lỗi sau:LiveServerTestCase của Django luôn luôn không do địa chỉ xung đột ... Mặc dù địa chỉ xuất hiện miễn phí

====================================================================== 
ERROR: setUpClass (fun_tests.tests.backend.TestCmsLogin) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/user/Documents/env/local/lib/python2.7/site-packages/django/test/testcases.py", line 1187, in setUpClass 
    raise cls.server_thread.error 
error: [Errno 98] Address already in use 

siêu vui vẻ, xem xét sudo netstat -netp | grep 8081 mang lại gì cả. Một số nền: Tôi đang sử dụng Django 1.6, và tôi đã sử dụng mũi, django-mũi, mũi loại trừ, nhưng tôi đã cắt xén chúng một cách hiệu quả để giúp chẩn đoán vấn đề. Mã tôi đang sử dụng rất đơn giản:

from django.test import LiveServerTestCase 
class TestCmsLogin(LiveServerTestCase): 
    def test_a_test_itself(self): 
     self.assertTrue(True) 

Tôi không thể tìm thấy bất kỳ nghệ thuật nào về chủ đề này và trình theo dõi lỗi của Djangoproject vẫn sạch sẽ. Tôi đang thiếu gì?

Chỉnh sửa: Sáng nay vấn đề là không thể sản xuất được, bất cứ điều gì đã gắn cờ cổng 8081 là mở không còn gây ra sự cố.

edit2: Mistyped 8081 là 8082 trong ghi chú của tôi, cố định (và kiểm tra để đảm bảo rằng tôi đã có nó ngay tại thời điểm đó).

+1

Cổng mặc định là 8081. – iMom0

Trả lời

12

Bạn có thể thiết lập (trong settings.py) biến môi trường DJANGO_LIVE_TEST_SERVER_ADDRESS để bao gồm nhiều dãy cổng sẽ được cố gắng:

os.environ['DJANGO_LIVE_TEST_SERVER_ADDRESS']="localhost:8000-8010,8080,9200-9300" 

Đã cùng một vấn đề bản thân mình, có lẽ đây sẽ giúp người ngoài.

13

Điều này bắt đầu xảy ra với tôi khi chạy thử nghiệm tiếp theo sau khi thử nghiệm trước tạo lỗi máy chủ nội bộ. Trên một mac, sử dụng lsof để tìm chương trình bằng cách sử dụng cổng và giết nó. Ví dụ:

$ sudo lsof -i :8081 
COMMAND PID USER FD TYPE   DEVICE SIZE/OFF NODE NAME 
firefox-b 1097 username 3u IPv4 0x94495559c6dea35  0t0 TCP localhost:sunproxyadmin (LISTEN) 

$ kill -9 1097 
+1

Nếu sử dụng chromedriver, 'pkill chromedriver' làm việc (linux) –

3

Nếu biến môi trường DJANGO_LIVE_TEST_SERVER_ADDRESS không được đặt địa chỉ mặc định để khởi động máy chủ thử nghiệm trực tiếp là localhost: 8081. Xem mã src LiveServerTestCase.

# Launch the live server's thread 
    specified_address = os.environ.get(
     'DJANGO_LIVE_TEST_SERVER_ADDRESS', 'localhost:8081') 

Vì hệ điều hành dường như đang phàn nàn về cổng 8081 đang được sử dụng. Người ta có thể nhanh chóng chọn một cổng khác (nói 9000) bằng cách chạy các thử nghiệm như dưới đây.

/manage.py test functional_tests --liveserver :9000 

Tuy nhiên, đặt rõ ràng DJANGO_LIVE_TEST_SERVER_ADDRESS sẽ là lý tưởng.

export DJANGO_LIVE_TEST_SERVER_ADDRESS="localhost:9000" 
0

Thay đổi phương pháp teardown của bạn nếu bạn đang đi để tách các trường hợp thử nghiệm của bạn

kiểm tra trong một tập tin không quan trọng để sử dụng phương pháp .close()

def tearDown(self): 
    self.browser.close() 

nghiệm trong nhiều file sẽ yêu cầu khởi động chủ đề mới.

def tearDown(self): 
    self.browser.quit() 
+0

Điều này có vẻ như nó có thể là một câu trả lời tốt nhưng bạn cần phải mở rộng trên đó, và cũng có thể mã định dạng dưới dạng mã (chọn nó và nhấp vào biểu tượng {}). – blm

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