Django测试 - 启动可以通信的多个测试服务器?

时间:2015-11-10 08:46:06

标签: python django selenium django-testing

我想知道是否可以使用TestCase或LiveServerTestCase运行可以模拟多个服务器存在的django测试。

例如,我想使用Firefox在localhost端口8081上启动“客户端服务器”,使用Chrome在端口8082上启动“资源服务器”。客户端服务器应该能够向资源服务器发出请求以检索json数据。每个服务器都应该可以使用自己的设置进行配置。总之,我想做一些像

这样的事情
MyTestCase(LiveServerTestCase):
    @override_settings(DATABASE={... client db config ...})
    def launch_client(self):
        self.client = webdriver.Firefox() # on port 8081

    @override_settings(DATABASE={... resource db config ...})
    def launch_resource(self):
        self.resource = webdriver.Chrome() # on port 8082   

    def test_get_json(self):
        self.client.get('http://127.0.0:8082/get/data/') # which should return data from the resource server ...

到目前为止,我已经提供了以下解决方案,但这些解决方案无效:

  1. 最基本的:使用LiveServerTestCase一次启动两个webdrivers。即

    class MySeleniumTests(LiveServerTestCase):
    
        @classmethod
        def setUpClass(cls):
            cls.selenium_chrome = webdriver.Chrome()
            cls.selenium_firefox = webdriver.Firefox()
            super(MySeleniumTests, cls).setUpClass()
    
  2. 但这不起作用,因为两个webdrivers都将在同一个端口上运行,并且不允许在每个服务器上进行不同的设置。

    1. 将django nose与多进程选项(https://github.com/nosedjango/nosedjango#parallel-test-running-via-multiprocess)一起使用。但这只是分开运行测试。

    2. 使用此处所述的pyvows(https://realpython.com/blog/python/asynchronous-testing-with-django-and-pyvows/)。这个选项实际上在多个端口上启动多个应用程序,但是结果非常不一致(线程找不到它们的服务器等)。此外,从另一个服务器请求一台服务器在没有黑客攻击的情况下不起作用。

    3. 有什么想法?非常感谢你。

1 个答案:

答案 0 :(得分:1)

您可以使用多个LiveServerThread而不是一个来实现自己的LiveServerTestCase mixin。