我正在使用django.test.SimpleTestCase
进行集成测试。
运行python manage.py test
后,测试成功运行,终端挂起并显示以下消息:
---------------------------
Ran 5 tests in 1.365s
OK
问题是目前我使用CTRL + C返回终端,但我希望在CI / CD管道中进行自动化测试。
我在执行测试的方式上做错了吗?或者这种行为是否正常?在这种情况下,Bash中是否有一种方式以编程方式执行然后退出测试?
编辑:
在深入分析我的应用程序后,我能够确定导致该行为的原因。我在threading
中使用views.py
,如下所示:
def __pooling():
wait_time = 10
call_remote_server()
threading.Timer(wait_time, __pooling).start()
__pooling()
基本上我需要我的应用程序不时地异步执行某些操作。我应该改变我的汇集方式吗?或者我应该在测试期间禁用它(如何?)?
我能够确定造成这种行为的原因。我在
threading
中使用views.py
,如下所示:def __pooling(): wait_time = 10 call_remote_server() threading.Timer(wait_time, __pooling).start() __pooling()
基本上我需要我的应用程序不时地异步执行某些操作。我应该改变我的汇集方式吗?
我并不完全了解您的需求,但更传统的方法是在Django本身之外安排任务(可能是management command)。像cron或Windows Task Scheduler这样的操作系统级调度程序,如APScheduler,或像Celery这样的任务队列都是合理的选择。
或者我应该在测试期间禁用它(如何?)?
我不建议继续使用你今天存在的__pooling()
功能。在我看来,这种事情不属于你的views.py
。但如果你想保留它,就像
from django.conf import settings
if not settings.DEBUG:
__pooling()
可能有帮助。你的__pooling()
函数只会在DEBUG
为假时被调用,因为它应该在生产中。 (如果它在您的CI环境中也是假的,您可以选择另一个现有设置,或者专门为settings.py
添加一些内容来控制它。)