2017-05-29 84 views
2

Since Django 1.11,從manage.py test命令中刪除選項--liveserver使用Django從Docker Selenium運行LiveServerTestCase 1.11

我用這個選項允許liveserver是從機器的IP地址而不是localhost使用以下命令到達:

./manage.py test --liveserver=0.0.0.0:8000 

不幸的是,這個選項消失了,我期待一個新的解決方案允許我的Docker Selenium映像在測試期間訪問我的LiveServerTestCase。

+0

在某些情況下,你可以有一個專用的機器使用Selenium和要與運行你的Django測試硒這臺專用機器。所以你需要打開localhost以外的liveserver。 – VivienCormier

回答

3

我發現解決方案通過覆蓋StaticLiveServerTestCase並更改host屬性。

例子:

import socket 

from django.contrib.staticfiles.testing import StaticLiveServerTestCase 


class SeleniumTestCase(StaticLiveServerTestCase): 

    @classmethod 
    def setUpClass(cls): 
     cls.host = socket.gethostbyname(socket.gethostname()) 
     super(SeleniumTestCase, cls).setUpClass() 

有了這個解決方案我的機器的IP是考慮到LiverServerTestCasesetUpClass因爲default valuelocalhost

所以現在我liveserver可達我的本地主機之外,通過使用IP ..

0

this thread和VivienCormier有點幫助,這是爲我工作使用Django 1.11和碼頭工人,組成

version: '2' 
services: 
    db: 
    restart: "no" 
    image: postgres:9.6 
    ports: 
     - "5432:5432" 
    volumes: 
     - ./postgres-data:/var/lib/postgresql/data 
    env_file: 
     - .db_env 
    web: 
    build: ./myproject 
    command: python manage.py runserver 0.0.0.0:8000 
    ports: 
     - "8000:8000" 
    volumes: 
     - ./myproject:/usr/src/app 
    depends_on: 
     - db 
     - selenium 
    env_file: .web_env 
    selenium: 
    image: selenium/standalone-firefox 
    expose: 
     - "4444" 

import os 
from django.contrib.staticfiles.testing import StaticLiveServerTestCase 
from selenium import webdriver 
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 


class TestHomePageView(StaticLiveServerTestCase): 

    @classmethod 
    def setUpClass(cls): 
     cls.host = 'web' 
     cls.selenium = webdriver.Remote(
      command_executor=os.environ['SELENIUM_HOST'], 
      desired_capabilities=DesiredCapabilities.FIREFOX, 
     ) 
     super(TestHomePageView, cls).setUpClass() 

    @classmethod 
    def tearDownClass(cls): 
     cls.selenium.quit() 
     super(TestHomePageView, cls).tearDownClass() 

    def test_root_url_resolves_to_home_page_view(self): 

     response = self.client.get('/') 
     self.assertEqual(response.resolver_match.func.__name__, LoginView.as_view().__name__) 

    def test_page_title(self): 

     self.selenium.get('%s' % self.live_server_url) 
     page_title = self.selenium.find_element_by_tag_name('title').text 
     self.assertEqual('MyProject', page_title) 

.web_env文件

SELENIUM_HOST=http://selenium:4444/wd/hub 
0

使用StaticLiveServerTestCase似乎沒有必要:同樣的方法與其父類的工作:

class End2End(LiveServerTestCase): 
    host = '0.0.0.0' # or socket.gethostbyname(...) like @VivienCormier did 
+0

'LiveServerTestCase'工作,但不提供靜態文件。 –

+0

好點,謝謝。我不會注意到,因爲我只使用Django來提供數據API。 –