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 相关文章推荐
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
Jun 25 Python
python根据路径导入模块的方法
Sep 30 Python
使用XML库的方式,实现RPC通信的方法(推荐)
Jun 14 Python
python实现生命游戏的示例代码(Game of Life)
Jan 24 Python
Python实现通讯录功能
Feb 22 Python
python根据url地址下载小文件的实例
Dec 18 Python
scrapy-redis的安装部署步骤讲解
Feb 27 Python
深入浅析Python 中 is 语法带来的误解
May 07 Python
Python获取统计自己的qq群成员信息的方法
Nov 15 Python
深入浅析python的第三方库pandas
Feb 13 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
python中的yield from语法快速学习
Nov 06 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
FCKeditor的安装(PHP)
2007/01/13 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
JS启动应用程序的一个简单例子
2008/05/11 Javascript
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
判断多个input type=file是否有已经选择好文件的代码
2012/05/23 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
Python Requests模拟登录实现图书馆座位自动预约
2018/04/27 Python
基于Django与ajax之间的json传输方法
2018/05/29 Python
Python实现的读取电脑硬件信息功能示例
2018/05/30 Python
python format 格式化输出方法
2018/07/16 Python
python进阶之自定义可迭代的类
2019/08/20 Python
python在OpenCV里实现投影变换效果
2019/08/30 Python
python实现多进程通信实例分析
2019/09/01 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
HTML5 Web 存储详解
2016/09/16 HTML / CSS
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
详解HTML5中download属性的应用
2015/08/06 HTML / CSS
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
德国BA保镖药房韩文网:kr.ba.de
2017/09/04 全球购物
公司年会晚宴演讲稿
2014/01/06 职场文书
司仪主持词两篇
2014/03/22 职场文书
婚前保证书
2014/04/29 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
酒店员工管理制度
2015/08/05 职场文书
毕业生自我鉴定范文
2019/05/13 职场文书
JS如何使用剪贴板操作Clipboard API
2021/05/17 Javascript
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL