我是Django的新手并尝试编写一些测试用例。
在我的代码中,我正在进行一些交易。为此,我在django中使用select_for_update锁定了我的代码。现在我想测试一下锁是否正常工作。我正在同时运行2个或更多进程,因此它只允许第一个进程并在此等待完成第一个进程,然后进行其他进程。
#here XYZ and ABC are models.
@transaction.commit_on_success
def transaction_func():
exp1 = ABC(a = 5)
exp1.save()
process_list =[]
for i in xrange(2):
p = Process(target=row_lock_method, args=('some_string',))
p.start()
time.sleep(3)
process_list.append(p)
for each in process_list:
each.join()
raise
def row_lock_method(code):
exp2 = XYZ(b = code)
exp2.save()
client = Client()
client.login(username='gaurav@example.com', password='sample123')
response = client.post('some_url',{'exp2':exp2},follow=True)
这里的代码在其他视图文件中。所以我在这里用cron job在django中运行这个文件。我在transaction_func中使用进程调用row_lock_method两次。由于测试运行成功,但这是在真正的数据库中,所以我想回滚在这个作业中完成的所有更改,所以我在两个for循环之后放置 raise 条件。因为这个异常发生在这里,它将回滚它 transaction.commit_on_success 。但我的问题是回滚在这里不起作用。即使没有错误消息即将到来。
我做错了什么。请回复。在此先感谢。