我将在我的项目中开始使用django-rq。
Django与基于Redis的Python队列库RQ集成。
使用RQ测试django应用程序的最佳实践是什么?
例如,如果我想将我的应用程序作为一个黑匣子进行测试,在用户执行一些操作之后,我想要执行当前队列中的所有作业,然后检查我的DB中的所有结果。我怎么能在我的django测试中做到呢?
发布于 2012-09-05 02:22:58
我刚刚找到了django-rq,它允许您在一个测试环境中旋转一个工作人员,该环境执行队列中的任何任务,然后退出。
from django.test impor TestCase
from django_rq import get_worker
class MyTest(TestCase):
def test_something_that_creates_jobs(self):
... # Stuff that init jobs.
get_worker().work(burst=True) # Processes all jobs then stop.
... # Asserts that the job stuff is done.发布于 2013-01-26 19:07:31
我把我的rq测试分成几个部分。
rq的测试套件应该涵盖这一点)。正在测试的代码:
def handle(self, *args, **options):
uid = options.get('user_id')
# @@@ Need to exclude out users who have gotten an email within $window
# days.
if uid is None:
uids = User.objects.filter(is_active=True, userprofile__waitlisted=False).values_list('id', flat=True)
else:
uids = [uid]
q = rq.Queue(connection=redis.Redis())
for user_id in uids:
q.enqueue(mail_user, user_id)我的测试:
class DjangoMailUsersTest(DjangoTestCase):
def setUp(self):
self.cmd = MailUserCommand()
@patch('redis.Redis')
@patch('rq.Queue')
def test_no_userid_queues_all_userids(self, queue, _):
u1 = UserF.create(userprofile__waitlisted=False)
u2 = UserF.create(userprofile__waitlisted=False)
self.cmd.handle()
self.assertItemsEqual(queue.return_value.enqueue.mock_calls,
[call(ANY, u1.pk), call(ANY, u2.pk)])
@patch('redis.Redis')
@patch('rq.Queue')
def test_waitlisted_people_excluded(self, queue, _):
u1 = UserF.create(userprofile__waitlisted=False)
UserF.create(userprofile__waitlisted=True)
self.cmd.handle()
self.assertItemsEqual(queue.return_value.enqueue.mock_calls, [call(ANY, u1.pk)])发布于 2013-03-22 01:53:25
我学习了一块地,它让你做到了:
from django.test impor TestCase
from django_rq import get_queue
class MyTest(TestCase):
def test_something_that_creates_jobs(self):
queue = get_queue(async=False)
queue.enqueue(func) # func will be executed right away
# Test for job completion这将使测试RQ作业更容易。希望这能帮上忙!
https://stackoverflow.com/questions/11282346
复制相似问题