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的gevent框架下执行异步的Solr查询的教程
Apr 16 Python
python实现清屏的方法
Apr 30 Python
总结Python中逻辑运算符的使用
May 13 Python
Python爬虫模拟登录带验证码网站
Jan 22 Python
python2.7无法使用pip的解决方法(安装easy_install)
Apr 03 Python
将python运行结果保存至本地文件中的示例讲解
Jul 11 Python
python如何保证输入键入数字的方法
Aug 23 Python
利用pyecharts读取csv并进行数据统计可视化的实现
Apr 17 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 Python
python的链表基础知识点
Sep 13 Python
Selenium环境变量配置(火狐浏览器)及验证实现
Dec 07 Python
Python制作简单的剪刀石头布游戏
Dec 10 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
《Re:从零开始的异世界生活》剧情体验,手游新作定名
2020/04/09 日漫
建立动态的WML站点(二)
2006/10/09 PHP
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
2017/04/17 jQuery
Vue Ajax跨域请求实例详解
2017/06/20 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
vue组件中使用iframe元素的示例代码
2017/12/13 Javascript
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
vue过滤器实现日期格式化的案例分析
2020/07/02 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
js实现简单的倒计时
2021/01/28 Javascript
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
python+opencv实现高斯平滑滤波
2020/07/21 Python
python使用sessions模拟登录淘宝的方式
2019/08/16 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
Python图片的横坐标汉字实例
2019/12/04 Python
django使用JWT保存用户登录信息
2020/04/22 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
自荐信需注意事项
2014/01/25 职场文书
大学毕业生个人自荐书
2014/07/02 职场文书
Django开发RESTful API实现增删改查(入门级)
2021/05/10 Python
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android