Django单元测试中Fixtures的使用方法

江岸
江岸
发布时间:2026-10-13 | 6人浏览过
原创

本文详解Django单元测试中Fixtures的使用流程。通过dumpdata命令导出JSON数据,配置FIXTURE_DIRS并在测试类中加载,即可快速构建测试环境。结合APITestCase与常用断言方法,实现高效的数据校验与接口测试。

Django Fixtures基础与数据生成

在进行单元测试时,若需验证数据库交互逻辑,Django提供的Fixtures机制可高效生成所需的测试数据。

针对已有正式数据库的模块,在单元测试中载入Fixture数据是获取初始状态、验证结果的最简捷方案。

首先准备一份JSON格式的数据文件,Django内置的dumpdata命令对此提供了完美支持,具体操作如下:


python manage.py dumpdata myapp >myapp/fixtures/myapp.json
# 这个命令将帮助你把数据库中myapp 导入到myapp/fixtures/test.json中
# 这个myapp可以没有,会把数据库所有数据生成Json文件

Fixtures配置与测试执行

基础配置

需在settings.py文件中添加以下配置以指定Fixture目录:


FIXTURE_DIRS = ('/path/to/api/fixtures/',)

随后在test.py测试文件中引入该配置:


fixtures = ['test.json']

最后执行test命令以运行测试:


./manage.py test

测试用例示例与断言方法

示例代码


# coding=utf-8
from __future__ import unicode_literals
import json
from rest_framework import status
from rest_framework.test import APITestCase


class DjangoUnittest01(APITestCase):
 fixtures = ["my_test.json"]

 def setUp(self):

  data = {
   "username": 't1',
   "password": 'admin123',
   "code": 666,
  }
  self.client.post('/base/admin/login/', data)

 def test_usergroup_user_information(self):# 以test开头的方法将会执行

  url = '/base/admin/teacher/usergroup/21/user/4/information/?otype=soldier'
  response = self.client.get(url)
  data = {
   "update_date": "2018-05-31 16:22:55",
   "task": "196311177981753978",
   "otype": "soldier",
   "task_name": "f_test1",
   "progress": 1.0,
   "id": 871
  }

  self.assertEqual(response.status_code, status.HTTP_200_OK)
  self.assertDictEqual(response.data["results"][0], data)

测试用例执行成功,输出如下:

Creating test database for alias 'default'... System check identified no issues (0 silenced). . ---------------------------------------------------------------------- Ran 1 test in 3.863s

OK Destroying test database for alias 'default'...

常用断言


assertEqual(a, b)  a == b  
assertNotEqual(a, b)  a != b  
assertTrue(x)  bool(x) is True  
assertFalse(x)  bool(x) is False  
assertIs(a, b)  a is b  
assertIsNot(a, b)  a is not b  
assertIsNone(x)  x is None 
assertIsNotNone(x)  x is not None 
assertIn(a, b)  a in b  
assertNotIn(a, b)  a not in b 
assertIsInstance(a, b)  isinstance(a, b) 
assertNotIsInstance(a, b)  not isinstance(a, b)
assertListEqual(a, b)  lists  
assertTupleEqual(a, b)  tuples 
assertDictEqual(a, b)  dicts

本文介绍了Django单元测试中Fixtures的核心用法,更多相关内容可参考往期文章或继续浏览后续章节。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表