Django单元测试中Fixtures用法详解


Posted in Python onFebruary 25, 2020

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

 Django是一个开放源代码的Web应用框架,由Python写成。采用了MVT的软件设计模式,即模型Model,视图View和模板Template。2005年7月在BSD许可证下发布。  

  在对Django项目做单元测试时,经常需要生成或者导入一些初始数据。对于已经有数据存在于正式数据库的app来说,使用Fixture 载入数据,是最简便有效的方法。

本文通过配置myapp.json,tests.py的实例代码给大家详细介绍。

基础配置

在settings.py 中配置如下内容:

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

在要测试的app中,增加目录 fixtures
在新增的 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,这部分的代码也会被执行

Fixture loading

 如果数据库里没有数据,那么对于一个基于数据库的网站来说,test case并无多大的用处.为了给测试数据库加入测试数据更方便,django提供了载入fixtures的方法. 

 fixture是一系列的数据集合,django知道如何将它导入数据库。

 创建fixture最直接的方法就是使用manage.py dumpdata.当然,这假设你的实际数据库里已经有数据了.

 注意:

   如果你运行过manage.py syncdb命令,那么你已经使用过fixture了--只是你不知道而已。当你使用syncdb去创建数据库时,会创建一个叫initial_data的fixture。
   其他名字的Fixture可以通过manage.py loaddata命令手动安装.

 一旦建立了一个fixture,并将它放在了某个django app的fixtures目录中,你就可以在你的测试类里使用它了:

from django.test import TestCase
from myapp.models import Animal
class AnimalTestCase(TestCase):
  fixtures = ['mammals.json', 'birds']
  def setUp(self):
    # Test definitions as before.
    call_setup_methods()
  def testFluffyAnimals(self):
    # A test that uses the fixtures.
    call_some_test_code()

这是具体发生的过程:

  1. 在setup()运行前,django会清空数据库,相当于你执行了syncdb。

  2.然后,所有的fixture会被安装.在例子中,django会安装任何一个名字为mammals的JSON格式的fixture和名为birds的fixture

总结

到此这篇关于Django单元测试中Fixtures用法详解的文章就介绍到这了,更多相关django fixtures用法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python批量重命名同一文件夹下文件的方法
May 25 Python
深入讲解Java编程中类的生命周期
Feb 05 Python
Python网络爬虫项目:内容提取器的定义
Oct 25 Python
OpenCV-Python实现轮廓检测实例分析
Jan 05 Python
python实现excel读写数据
Mar 02 Python
Window 64位下python3.6.2环境搭建图文教程
Sep 19 Python
Python 脚本拉取 Docker 镜像问题
Nov 10 Python
wxpython实现按钮切换界面的方法
Nov 19 Python
pytorch1.0中torch.nn.Conv2d用法详解
Jan 10 Python
python 使用elasticsearch 实现翻页的三种方式
Jul 31 Python
使用python操作lmdb对数据读取的实例
Dec 11 Python
Python jiaba库的使用详解
Nov 23 Python
python实现音乐播放器 python实现花框音乐盒子
Feb 25 #Python
python+selenium+PhantomJS抓取网页动态加载内容
Feb 25 #Python
python numpy生成等差数列、等比数列的实例
Feb 25 #Python
信号生成及DFT的python实现方式
Feb 25 #Python
Pycharm远程连接服务器并实现代码同步上传更新功能
Feb 25 #Python
python生成任意频率正弦波方式
Feb 25 #Python
python numpy库linspace相同间隔采样的实现
Feb 25 #Python
You might like
关于mysql 字段的那个点为是定界符
2007/01/15 PHP
PHP对字符串的递增运算分析
2010/08/08 PHP
PHP的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
php socket实现的聊天室代码分享
2014/08/16 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
超清晰的document对象详解
2007/02/27 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
JavaScript中的原始值和复杂值
2016/01/07 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
原生JS实现不断变化的标签
2017/05/22 Javascript
Node.js 使用流实现读写同步边读边写功能
2017/09/11 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
详解vue-cli脚手架中webpack配置方法
2018/08/22 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
[01:15:00]LGD vs Mineski Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
法拉利英国精品店:Ferraris Boutique UK
2019/07/20 全球购物
军训心得体会
2013/12/31 职场文书
电大会计学自我鉴定
2014/02/06 职场文书
书法比赛获奖感言
2014/02/10 职场文书
大学生在校学习的自我评价
2014/02/18 职场文书
暑期培训班招生方案
2014/08/26 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014年化妆品销售工作总结
2014/12/01 职场文书
工厂无线对讲系统解决方案
2022/02/18 无线电