我想知道是否可以使用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 ...
到目前为止,我已经提供了以下解决方案,但这些解决方案无效:
最基本的:使用LiveServerTestCase一次启动两个webdrivers。即
class MySeleniumTests(LiveServerTestCase):
@classmethod
def setUpClass(cls):
cls.selenium_chrome = webdriver.Chrome()
cls.selenium_firefox = webdriver.Firefox()
super(MySeleniumTests, cls).setUpClass()
但这不起作用,因为两个webdrivers都将在同一个端口上运行,并且不允许在每个服务器上进行不同的设置。
将django nose与多进程选项(https://github.com/nosedjango/nosedjango#parallel-test-running-via-multiprocess)一起使用。但这只是分开运行测试。
使用此处所述的pyvows(https://realpython.com/blog/python/asynchronous-testing-with-django-and-pyvows/)。这个选项实际上在多个端口上启动多个应用程序,但是结果非常不一致(线程找不到它们的服务器等)。此外,从另一个服务器请求一台服务器在没有黑客攻击的情况下不起作用。
有什么想法?非常感谢你。
答案 0 :(得分:1)
您可以使用多个LiveServerThread而不是一个来实现自己的LiveServerTestCase mixin。