2013-12-16 4 views
14

मैं वर्तमान में पृष्ठभूमि में चल रहे विकास पर्यावरण के उदाहरण सेलेनियम आधारित परीक्षणों को उछालने के बजाय लाइवसेवरटेस्टकेस का उपयोग करने के लिए अपने Django कार्यात्मक परीक्षणों को साफ करने पर काम कर रहा हूं , और मैंने एक दीवार मारा है। हर बार जब मैं एक LiveServerTestCase परीक्षण चलाने का प्रयास, मैं निम्नलिखित त्रुटि मिलती है:Django के LiveServerTestCase हमेशा विवादित पते के कारण विफल रहता है ... पते के बावजूद नि: शुल्क

====================================================================== 
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 

सुपर मज़ा, sudo netstat -netp | grep 8081 कुछ भी नहीं पैदावार पर विचार। कुछ पृष्ठभूमि: मैं Django 1.6 का उपयोग कर रहा हूं, और मैं नाक, डीजेंगो-नाक, नाक-बहिष्कार का उपयोग कर रहा था, लेकिन मैंने समस्या का निदान करने में मदद के लिए प्रभावी रूप से उन्हें बाहर निकाल दिया है। कोड मैं उपयोग कर रहा हूँ काफी सरल है:

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

मैं विषय पर किसी पूर्व कला नहीं मिल रहा है, और Djangoproject के बग ट्रैकर साफ है। मैं क्या खो रहा हूँ?

संपादित करें: आज सुबह यह मुद्दा अपरिवर्तनीय है, जो भी बंदरगाह 8081 को फ्लैग करने वाला था, अब समस्याएं उत्पन्न नहीं कर रहा है।

संपादित 2: मेरे लेखन में 8080 के रूप में मिस्टीड 8081, तय (और यह सुनिश्चित करने के लिए जांच की गई कि मुझे उस वक्त सही था)।

+1

डिफ़ॉल्ट पोर्ट 8081. – iMom0

उत्तर

12

आप बंदरगाहों में से एक से अधिक श्रेणियों कि प्रयास किया जाएगा शामिल करने के लिए (settings.py में) सेट कर सकते हैं वातावरण चर DJANGO_LIVE_TEST_SERVER_ADDRESS:

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

ही समस्या अपने आप था, हो सकता है यह किसी को मदद करता है बाहर।

13

पिछली बार एक आंतरिक सर्वर त्रुटि उत्पन्न करने के बाद बाद में परीक्षण चलाते समय यह मेरे साथ हो रहा था। एक मैक पर, बंदरगाह का उपयोग कर प्रोग्राम खोजने के लिए lsof का उपयोग करें, और इसे मार डालो। उदाहरण के लिए:

$ 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

chromedriver कोड के रूप में प्रारूप कोड का उपयोग कर रहे हैं, तो 'pkill chromedriver' काम करता है (लिनक्स) –

3

यदि पर्यावरण परिवर्तनीय DJANGO_LIVE_TEST_SERVER_ADDRESS लाइव परीक्षण सर्वर प्रारंभ करने के लिए डिफ़ॉल्ट पता सेट नहीं किया गया है तो स्थानीयहोस्ट: 8081। LiveServerTestCase src कोड देखें।

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

चूंकि ओएस पोर्ट 8081 उपयोग में होने के बारे में शिकायत कर रहा है। नीचे दिए गए परीक्षणों को चलाकर कोई दूसरा बंदरगाह (9 000 कह सकता है) जल्दी से चुन सकता है।

/manage.py test functional_tests --liveserver :9000 

हालांकि, स्पष्ट रूप से DJANGO_LIVE_TEST_SERVER_ADDRESS को आदर्श रूप से सेट करना आदर्श होगा।

export DJANGO_LIVE_TEST_SERVER_ADDRESS="localhost:9000" 
0

अपने टियरडाउन विधि बदलें आप एक फ़ाइल में अपने परीक्षण मामलों को अलग करने के

परीक्षण जा रहे हैं एक से अधिक फ़ाइलों में .close() विधि

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

परीक्षणों का प्रयोग कर शुरू की आवश्यकता होगी ठीक है नए धागे

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

इस तरह यह एक अच्छा जवाब हो सकता है लगता है, लेकिन आप उस पर विस्तार करने के लिए की जरूरत है, और यह भी (है इसे चुनें और {} आइकन पर क्लिक करें)। – blm

संबंधित मुद्दे