写点什么

Django 单元测试用法及 Fixtures 用法

用户头像
Young先生
关注
发布于: 2020 年 08 月 12 日
Django单元测试用法及Fixtures用法

Django的单元测试用法:

Django的单元测试常用操作。

具体的操作方法:

# 测试整个工程
python manage.py test
# 只测试某个子项目
python manage.py test appname
# 只测试某个子项目下的class
python manage.py test appname.tests.TestClass
# 只测试某个具体方法
python manage.py test appname.tests.TestClass.test_function

遇到的问题:



前文注意事项中的第三点提到,测试数据的问题。为了减少创建和删除数据库的时间,需要在命令中加入: --keepdb 以保留每次的测试的数据库。虽然保留了数据库,但是测试中产生的数据,还是会在测试结束时,销毁的。



Django单元测试的注意事项:



1、对于每一个测试方法都会将setUp()和tearDown()方法执行一遍



2、每一个测试(Clas下的每个测试方法))会单独新建一个测试数据库来进行数据库的操作方面的测试,默认在测试完成后销毁。



3、在测试方法中对数据库进行增删操作,最后都会被清除。如果migrations文件过多,则会耗费大量时间



Django单元测试的Fixtures用法



在使用单元测试时,有时候需要测试数据库中有数据,这时我们可以使用Django的Fixtures来生成测试数据。



基础配置

  1. 在settings.py 中配置如下内容:(如果你想要单独指定Fixture的目录)

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

补充:

Django默认情况下,会在每个应用程序内的目录中查找fixtures。您可以将FIXTURE_DIRS设置为Django应查找的其他目录的列表。



  1. 在要测试的app中,增加目录fixtures

  2. 在新增的fixtures目录下,新建文件myapp.json,文件名自己定,后缀必须是.json



配置myapp.json

文件中内容格式如下,实际使用时,要删除掉实际情况,使用数据,并删除掉注释,如果需要多条数据,可以多写几个{}的内容:

[ {
"model": "myapp.user", # 数据库名
"pk": "a864340d850f484bb89ea2981047bc5e", # 要导入的数据
"fields": { # 要导入的字段,字段名跟数据库(models)内的字段一样,值,根据实际需要设置
"username": "zhangsan",
"user_num": "000",
"zh_name": "张三",
"mobile": "18712345678",
"mail": "zhangsan@abc.com",
"is_deleted": false,
"create_time": "2013-01-16",
"update_time": "2013-01-16"
}
},
]

配置tests.py

class Test_user_name(TestCase):
'''测试人员名称是否正常'''
fixtures = ['myapp.json'] # 在这里选择你要导入要测试的用户数据
def test_user_name(self):
user = User.objects.get(username='zhangsan')
self.assertEqual(user.name, "zhangsan")



下边就可以运行你的单元测试了



提醒:

如果你配置了测试的Models 的Signals,这部分的代码也会被执行



参考内容:

  1. Django fixtures

  2. 提供模型初始数据¶



本文首发于BigYoung小站(http://www.bigyoung.cn)

发布于: 2020 年 08 月 12 日阅读数: 76
用户头像

Young先生

关注

Python工程师/书虫/极客/ 2020.04.22 加入

伸手摘星,即使徒劳无功,也不至于满手泥污。 欢迎大家访问我的BigYoung小站(bigyoung.cn)

评论

发布
暂无评论
Django单元测试用法及Fixtures用法