Python Django如何获取live_服务器的url?

Python Django如何获取live_服务器的url?,python,django,port,netstat,Python,Django,Port,Netstat,我从中学习了Django功能测试,并根据我的项目进行了调整 我的FT非常简单,请查看url的标题 我使用live\u server\u url通过selenium进行测试。 但它会转到另一个端口号(56458),而不是8000。 (当我读这本书的时候,它不是) 我的功能测试/tests.py是: from django.test import LiveServerTestCase from selenium import webdriver from selenium.webdriver.co

我从中学习了Django功能测试,并根据我的项目进行了调整

我的FT非常简单,请查看url的标题

我使用
live\u server\u url
通过selenium进行测试。 但它会转到另一个端口号(56458),而不是8000。 (当我读这本书的时候,它不是)

我的
功能测试/tests.py
是:

from django.test import LiveServerTestCase

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import WebDriverException

from time import time, sleep


class NewVistorTest(LiveServerTestCase):

    def setUp(self):
        self.browser = webdriver.Firefox()
        self.browser.implicitly_wait(3)


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

    def test_render_a_list_of_candiates_in_home(self):
        self.browser.get(self.live_server_url)
        h1_text = self.browser.find_element_by_tag_name('h1').text

        self.assertEqual(self.browser.title, 'Voting Dapp')
        self.assertEqual(h1_text, 'A Simple Voting Application')
说:

live server侦听localhost并绑定到端口0,该端口使用操作系统分配的空闲端口。在测试期间,可以使用self.live_server_URL访问服务器的URL

因此,我尝试寻找监听端口(我认为我不太适合这一部分):


您可以使用LiveServerTestCase。它会为您启动Django服务器。无需像上一章那样启动服务器

LiveServerTestCase与TransactionTestCase基本相同,但有一个额外的功能:它在安装时在后台启动一个live Django服务器,在拆卸时关闭它。这允许使用除Django虚拟客户端(例如,Selenium客户端)之外的自动测试客户端在浏览器内执行一系列功能测试,并模拟真实用户的操作

因此,测试服务器应该具有开发服务器以外的其他端口。此外,测试服务器是一个带有空数据库的空项目。因此,您的测试需要在执行实际测试用例之前创建所需的内容

或者,您可以使用
--liveserver-liveserver
将测试指向其他环境。请参见
python manage.py test-h


我认为针对开发服务器进行测试是错误的,因为这些数据可以更改(手动或通过以前的测试),因此是不可复制的。我相信测试应该是完全自包含的,这样它可以单独运行,也可以与任何数量的其他测试用例任意组合运行。

我也在阅读TDD Python书籍。我使用的是Django 2.1,而不是Django 1.11。 我面临着与你描述的相同的问题。我在setUpClass()中发现,必须调用super().setUpClass()


类似于tearDownClass()。

我也遇到了和你一样的问题。同样的误解。 所以,真正的问题是我的主页url。其中我的主页url类似:
http://127.0.0.1:8000/api/
但服务器正在尝试使用
http://localhost:56458/

self.browser.get(('%s%s' % (self.live_server_url, '/api/')))

您可以添加functional_test/tests.py的内容吗?我敢打赌你的测试正在启动它自己的服务器。这没关系,因为您总是希望测试一个干净且空的项目。您不希望测试被开发数据污染的站点。还有,为什么要测试域和端口?对于大多数项目,这是在Web服务器中配置的,而不是在Django项目中配置的。我认为域名和端口超出了范围。您应该可以只测试绝对路径。@allcaps谢谢!添加了functional_test/tests.py。我像TDD书一样练习。谢谢!现在工作。你是说你已经开发了django的部分?>I启动I启动>它启动。所以LiveServerTestCase启动了。更新了。我的错误这在Django 1.10之后不再有效。还有什么选择?
$ netstat | grep LISTEN
$ # nothing printed!
@classmethod
def setUpClass(cls):
    super().setUpClass()
self.browser.get(('%s%s' % (self.live_server_url, '/api/')))
from selenium import webdriver
from django.urls import reverse
import time

class TestApiPages(StaticLiveServerTestCase):
  
  def setUp(self):
      self.browser = webdriver.Chrome('functional_test/chromedriver.exe')
  
  def tearDown(self):
      self.browser.close()
  
  def test_api_list_displayed(self):
      self.browser.get(('%s%s' % (self.live_server_url, '/admin/')))