如何不在 `python manage.py 测试中 运行 celery 任务
how not to run celery task on `python manage.py test`
我有一个模型,我在 post_save
信号中向用户发送电子邮件和短信我正在多次创建模型,因此它会多次发送电子邮件和短信。
我正计划编写新测试来测试短信和电子邮件。
def send_activation_mail_sms(sender, instance, created, **kwargs):
if created :
mobile_activation = UserMobileActivation.objects.create(user=instance,randomword=randomword(50),ref=ref)
email_activation = UserEmailActivation.objects.create(user=instance,randomword=randomword(50),ref=ref)
url_email = "{0}view/v1/email/activation/{1}/".format(HOSTNAME,email_activation.randomword) short_url_email = url_shortener(long_url_email)
url_sms = "{0}view/v1/mobile/activation/{1}".format(HOSTNAME,mobile_activation.randomword)
app.send_task("apps.tasks.send_sms",
args=[TEXTLOCAL_APIKEY,mobile_activation.stockuser.user.username ,'TXTLCL','Activate your mobile here {0}'.format(url_sms)])
app.send_task("apps.tasks.send_email",
args=[email_activation.user.user.email, EMAIL_VERIFICATION_SUBJECT,
EMAIL_VERIFICATION_TEMPLATE, {"host": HOSTNAME, "verify_email_url": url_email}])
我在 post_save
信号中传递 created
arg 有什么方法可以在这里传递额外的 arg 以便在执行 python manage.py test
时它会跳过发送短信和电子邮件。我使用版本控制的一种方式,我想使用不同版本的 API 进行测试,但由于没有 request
来到这里,我无法在这里捕捉到 request.version
。请提出建议。
最初在您的 settings.py 中设置一些变量以识别当前工作的环境
# settings.py
MY_ENV = "DEVELOPMENT"
然后,运行基于MY_ENV
的celery tasks/additional脚本
<b>from django.conf import settings</b>
def send_activation_mail_sms(sender, instance, created, **kwargs):
if created <b>and settings.MY_ENV == "DEVELOPMENT":</b>
# do your stuff
Django 为我们提供了在测试期间覆盖设置配置的功能,请参阅文档 Override Settings。因此,您可以覆盖测试本身的 MY_ENV
值
我有一个模型,我在 post_save
信号中向用户发送电子邮件和短信我正在多次创建模型,因此它会多次发送电子邮件和短信。
我正计划编写新测试来测试短信和电子邮件。
def send_activation_mail_sms(sender, instance, created, **kwargs):
if created :
mobile_activation = UserMobileActivation.objects.create(user=instance,randomword=randomword(50),ref=ref)
email_activation = UserEmailActivation.objects.create(user=instance,randomword=randomword(50),ref=ref)
url_email = "{0}view/v1/email/activation/{1}/".format(HOSTNAME,email_activation.randomword) short_url_email = url_shortener(long_url_email)
url_sms = "{0}view/v1/mobile/activation/{1}".format(HOSTNAME,mobile_activation.randomword)
app.send_task("apps.tasks.send_sms",
args=[TEXTLOCAL_APIKEY,mobile_activation.stockuser.user.username ,'TXTLCL','Activate your mobile here {0}'.format(url_sms)])
app.send_task("apps.tasks.send_email",
args=[email_activation.user.user.email, EMAIL_VERIFICATION_SUBJECT,
EMAIL_VERIFICATION_TEMPLATE, {"host": HOSTNAME, "verify_email_url": url_email}])
我在 post_save
信号中传递 created
arg 有什么方法可以在这里传递额外的 arg 以便在执行 python manage.py test
时它会跳过发送短信和电子邮件。我使用版本控制的一种方式,我想使用不同版本的 API 进行测试,但由于没有 request
来到这里,我无法在这里捕捉到 request.version
。请提出建议。
最初在您的 settings.py 中设置一些变量以识别当前工作的环境
# settings.py
MY_ENV = "DEVELOPMENT"
然后,运行基于MY_ENV
<b>from django.conf import settings</b>
def send_activation_mail_sms(sender, instance, created, **kwargs):
if created <b>and settings.MY_ENV == "DEVELOPMENT":</b>
# do your stuff
Django 为我们提供了在测试期间覆盖设置配置的功能,请参阅文档 Override Settings。因此,您可以覆盖测试本身的 MY_ENV
值