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 相关文章推荐
Apache如何部署django项目
May 21 Python
python生成随机图形验证码详解
Nov 08 Python
Python实现的读写json文件功能示例
Jun 05 Python
Python使用pandas对数据进行差分运算的方法
Dec 22 Python
利用Python正则表达式过滤敏感词的方法
Jan 21 Python
python实现弹跳小球
May 13 Python
python多进程下实现日志记录按时间分割
Jul 22 Python
在Python中os.fork()产生子进程的例子
Aug 08 Python
Python爬虫爬取杭州24时温度并展示操作示例
Mar 27 Python
使用python批量修改XML文件中图像的depth值
Jul 22 Python
python 装饰器的使用示例
Oct 10 Python
关于Python中进度条的六个实用技巧分享
Apr 05 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过滤危险html代码的函数
2008/07/22 PHP
PHP在线生成二维码代码(google api)
2013/06/03 PHP
thinkPHP自定义类实现方法详解
2016/11/30 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
JS中style属性
2006/10/11 Javascript
AutoSave/自动存储功能实现
2007/03/24 Javascript
javascript下过滤数组重复值的代码
2007/09/10 Javascript
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
理解javascript封装
2016/02/23 Javascript
javascript模块化简单解析
2016/04/07 Javascript
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
js观察者模式的弹幕案例
2020/11/23 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
Python3实战之爬虫抓取网易云音乐的热门评论
2017/10/09 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
python3 批量获取对应端口服务的实例
2019/07/25 Python
python 实现音频叠加的示例
2020/10/29 Python
python urllib和urllib3知识点总结
2021/02/08 Python
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
二手房购房意向书范本
2014/04/01 职场文书
世界读书日的活动方案
2014/08/20 职场文书
高中校园广播稿
2014/10/21 职场文书
土地租赁协议书
2015/01/29 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
Django框架模板用法详解
2022/06/10 Python