我已经使用StaticLiveServerCase
. 这非常适合本地测试,但现在我也想测试我的登台服务器。我正在阅读的这本书的作者建议以下技巧:
import sys
[...]
class NewVisitorTest(StaticLiveServerCase):
@classmethod
def setUpClass(cls):
for arg in sys.argv:
if 'liveserver' in arg:
cls.server_url = 'http://' + arg.split('=')[1]
return
super().setUpClass()
cls.server_url = cls.live_server_url
@classmethod
def tearDownClass(cls):
if cls.server_url == cls.live_server_url:
super().tearDownClass()
# Now use self.server_url instead of self.live_server_url
当不使用“临时服务器”时,我将其调整为调用super(LiveServerTestCase, cls).setUpClass()
(以及),因为直截了当地忽略(祖)父母的实现感觉不对。tearDownClass
仍然是一个黑客,我想知道是否存在更清洁的解决方案。Django 确实有--liveserver
自己的参数,但它只能用于更改临时服务器的绑定。
到目前为止,我提出了以下想法:
- 子类
StaticLiveServerCase
化以解析参数,相应地更改live_server_url
属性,并让临时服务器在未使用的情况下启动/停止。花费一些性能,理论上,使测试不太可靠。 - 利用 Python 的动态类型在运行时确定基类(
StaticLiveServerCase
或某些StagingServerTestCase
子类TransactionTestCase
)。这一点也不逊色,而且我的 IDE 也可能不会喜欢它。 - 编写委托给
StaticLiveServerTestCase
或TransactionTestCase
(组合而不是继承)的第三个类。看起来要完成这一件事需要做很多工作。