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和GO语言实现的消息摘要算法示例
Mar 10 Python
python求解水仙花数的方法
May 11 Python
Python卸载模块的方法汇总
Jun 07 Python
VTK与Python实现机械臂三维模型可视化详解
Dec 13 Python
pandas使用apply多列生成一列数据的实例
Nov 28 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
python执行CMD指令,并获取返回的方法
Dec 19 Python
对python中xlsx,csv以及json文件的相互转化方法详解
Dec 25 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
Jan 23 Python
Django Haystack 全文检索与关键词高亮的实现
Feb 17 Python
Python开发企业微信机器人每天定时发消息实例
Mar 17 Python
windows安装python超详细图文教程
May 21 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数据库支持的简易留言本的编写
2006/10/09 PHP
比较简单实用的PHP无限分类源码分享(思路不错)
2011/10/13 PHP
php实现cookie加密的方法
2015/03/10 PHP
一段实用的php验证码函数
2016/05/19 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
Linux系统中为php添加pcntl扩展
2016/08/28 PHP
showModelessDialog()使用详解
2006/09/07 Javascript
prototype Element学习笔记(篇一)
2008/10/26 Javascript
XHTML下,JS浮动代码失效的问题
2009/11/12 Javascript
一个简单的js树形菜单
2011/12/09 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
javascript使用数组的push方法完成快速排序
2014/09/15 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
vue中利用iscroll.js解决pc端滚动问题
2020/02/15 Javascript
[01:50]2014DOTA2西雅图邀请赛 专访欢乐周宝龙
2014/07/08 DOTA
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
2018/10/21 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
python numpy实现rolling滚动案例
2020/06/08 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
材料采购员岗位职责
2013/12/17 职场文书
新学期红领巾广播稿
2014/01/14 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
物资采购管理制度
2015/08/06 职场文书
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL