Django Rest框架测试是否使用;模拟;数据库
我正试图找到测试POST-only端点的最佳方法,该端点使用有效负载并从该数据创建6个不同的对象。我试图发送有效负载,然后断言应该创建的所有对象都已创建。最后一个块(新行之后)尝试重新发布相同的加载,并确保未创建重复项 我的问题是,如果我运行此测试,是否使用现有数据库?还是建立一个“模拟”数据库,并在测试运行后将其拆除?我不想这些数据影响我的数据库Django Rest框架测试是否使用;模拟;数据库,django,unit-testing,django-rest-framework,Django,Unit Testing,Django Rest Framework,我正试图找到测试POST-only端点的最佳方法,该端点使用有效负载并从该数据创建6个不同的对象。我试图发送有效负载,然后断言应该创建的所有对象都已创建。最后一个块(新行之后)尝试重新发布相同的加载,并确保未创建重复项 我的问题是,如果我运行此测试,是否使用现有数据库?还是建立一个“模拟”数据库,并在测试运行后将其拆除?我不想这些数据影响我的数据库 class APITests(APITestCase): def test_job_start(self): url = '
class APITests(APITestCase):
def test_job_start(self):
url = '/api/v1/job_start/'
response = self.client.post(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(Platform.objects.count(), 1)
self.assertEqual(Platform.objects.get().name, 'andr')
self.assertEqual(CdTool.objects.count(), 1)
self.assertEqual(CdTool.objects.get().name, 'https://jenkins-andr.test.com')
self.assertEqual(Job.objects.count(), 1)
self.assertEqual(Job.objects.get().name, 'ANDR_master_CI')
self.assertEqual(JobExecution.objects.count(), 1)
self.assertEqual(JobExecution.objects.get().build_id, '3500')
# Send the same payload, make sure no duplicate records are created
response = self.client.post(url, data, format='json')
self.assertEqual(Platform.objects.count(), 1)
self.assertEqual(CdTool.objects.count(), 1)
self.assertEqual(Job.objects.count(), 1)
self.assertEqual(JobExecution.objects.count(), 1)
1)来自官方Django:
需要数据库的测试(即模型测试)不会使用“真实”(生产)数据库。为测试创建单独的空白数据库。无论测试通过还是失败,当所有测试都已执行时,测试数据库都将被销毁
2)您的APITestCase
扩展了TestCase
,它根据:
另一方面,测试用例在测试后不会截断表。相反,它将测试代码封装在测试结束时回滚的数据库事务中。显式提交(如transaction.commit())和隐式提交(可能由transaction.atomic()引起)都被替换为nop操作。这保证了测试结束时的回滚将数据库恢复到其初始状态