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中实现定制类的特殊方法总结
Sep 28 Python
Python实现ping指定IP的示例
Jun 04 Python
python实现贪吃蛇小游戏
Mar 21 Python
Python中正则表达式的用法总结
Feb 22 Python
零基础使用Python读写处理Excel表格的方法
May 02 Python
python实现一个函数版的名片管理系统过程解析
Aug 27 Python
Python实现投影法分割图像示例(一)
Jan 17 Python
将tensorflow模型打包成PB文件及PB文件读取方式
Jan 23 Python
全网首秀之Pycharm十大实用技巧(推荐)
Apr 27 Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 Python
keras读取h5文件load_weights、load代码操作
Jun 12 Python
Python实现简单的俄罗斯方块游戏
Sep 25 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扩展函数
2006/10/09 PHP
php类常量用法实例分析
2015/07/09 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
javascript div 弹出可拖动窗口
2009/02/26 Javascript
js 上传图片预览问题
2010/12/06 Javascript
apycom出品的jQuery精美菜单破解方法
2011/02/18 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
JavaScript 数组中最大最小值
2016/06/05 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
详解封装基础的angular4的request请求方法
2018/06/05 Javascript
vue3.0 CLI - 3.2 路由的初级使用教程
2018/09/20 Javascript
js实现json数组分组合并操作示例
2019/02/12 Javascript
解决vuex刷新数据消失问题
2020/11/12 Javascript
如何实现vue的tree组件
2020/12/03 Vue.js
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
Under Armour安德玛意大利官网:美国高端运动科技品牌
2020/01/16 全球购物
Linux如何压缩可执行文件
2013/10/21 面试题
人力资源行政经理自我评价
2013/10/23 职场文书
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
酒店管理专业自荐信
2014/05/23 职场文书
应聘教师求职信
2014/07/19 职场文书
乡镇干部先进性教育活动个人整改措施
2014/09/16 职场文书
国防教育标语
2014/10/08 职场文书
2014年路政工作总结
2014/12/10 职场文书
电影圆明园观后感
2015/06/03 职场文书
成功的商业计划书这样写才最靠谱
2019/07/12 职场文书
Django cookie和session的应用场景及如何使用
2021/04/29 Python
vue实现同时设置多个倒计时
2021/05/20 Vue.js
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技