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代码制作configure文件示例
Jul 28 Python
Python中的XML库4Suite Server的介绍
Apr 14 Python
python多进程实现进程间通信实例
Nov 24 Python
python实现猜单词小游戏
May 22 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
Jan 29 Python
详解PANDAS 数据合并与重塑(join/merge篇)
Jul 09 Python
python 使用pdfminer3k 读取PDF文档的例子
Aug 27 Python
Python爬虫使用代理IP的实现
Oct 27 Python
Python模块/包/库安装的六种方法及区别
Feb 24 Python
Python selenium键盘鼠标事件实现过程详解
Jul 28 Python
python 读取串口数据的示例
Nov 09 Python
Pytorch中的数据集划分&正则化方法
May 27 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
php的access操作类
2008/04/09 PHP
php download.php实现代码 跳转到下载文件(response.redirect)
2009/08/26 PHP
关于PHP中Object对象的笔记分享
2011/06/28 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
php使用正则表达式获取图片url的方法
2015/01/16 PHP
通过php修改xml文档内容的方法
2015/01/23 PHP
利用“多说”制作留言板、评论系统
2015/07/14 PHP
javascript实现二分查找法实现代码
2007/11/12 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
javascript判断机器是否联网的2种方法
2013/08/09 Javascript
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
python封装对象实现时间效果
2020/04/23 Python
python如何为创建大量实例节省内存
2018/03/20 Python
在Python中COM口的调用方法
2019/07/03 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
8种常用的Python工具
2020/08/05 Python
zooplus波兰:在线宠物店
2019/07/21 全球购物
工作表现评语
2014/01/19 职场文书
护士求职自荐信范文
2014/03/19 职场文书
学校文明单位申报材料
2014/05/06 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
地道战观后感300字
2015/06/04 职场文书
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang
MySQL 分页查询的优化技巧
2021/05/12 MySQL
什么是SOLID
2022/03/24 Javascript