【发布时间】:2014-08-21 14:57:17
【问题描述】:
我已经使用StaticLiveServerCase 进行了一些功能测试。这非常适合本地测试,但现在我也想测试我的登台服务器。 the book I'm reading 的作者建议以下 hack:
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),因为直接忽略(祖)父级的实现感觉不对。
仍然是一个 hack,我想知道是否存在更清洁的解决方案。 Django 确实有自己的--liveserver 参数,但它只能用于更改临时服务器的绑定。
到目前为止,我提出了以下想法:
- 子类化
StaticLiveServerCase以解析参数,相应地更改live_server_url属性,并让临时服务器刚刚启动/停止而未使用。会消耗一些性能,并且在理论上会降低测试的可靠性。 - 在运行时利用 Python 的动态类型确定基类(
StaticLiveServerCase或某些StagingServerTestCase子类化TransactionTestCase)。这一点也不逊色,我的 IDE 可能也不喜欢它。 - 编写委托给
StaticLiveServerTestCase或TransactionTestCase的第三个类(组合而不是继承)。看起来要完成这一件事需要做很多工作。
【问题讨论】:
-
@hwjp 只是给你一个 ping 以便你也知道我的问题。
-
这里有同样的问题。在我的 Windows 机器上运行 FT 时出现以下错误:“[Errno 10013] 尝试以访问权限禁止的方式访问套接字”。我找到的解决方案是使用 --liveserver=localhost:8000 (或任何其他端口)。书中建议的 hack 破坏了我的 hacky 修复:-)
-
--liveserver 参数有什么问题?
-
老问题,但您实际上不是在谈论 StaticLiveServerTestCase
标签: python django unit-testing django-1.7