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使用clear方法清除字典内全部数据实例
Jul 11 Python
python字符串与url编码的转换实例
May 10 Python
对Python 内建函数和保留字详解
Oct 15 Python
Python3实现腾讯云OCR识别
Nov 27 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
Apr 01 Python
浅析python 中大括号中括号小括号的区分
Jul 29 Python
python BlockingScheduler定时任务及其他方式的实现
Sep 19 Python
Python爬取爱奇艺电影信息代码实例
Nov 26 Python
python中提高pip install速度
Feb 14 Python
解决tensorflow 释放图,删除变量问题
Jun 23 Python
浅谈如何使用python抓取网页中的动态数据实现
Aug 17 Python
python工具dtreeviz决策树可视化和模型可解释性
Mar 03 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
UCenter Home二次开发指南
2009/05/28 PHP
PHP Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
PHP调用Webservice实例代码
2011/07/29 PHP
php ajax 静态分页过程形式
2011/09/02 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
js异步加载的三种解决方案
2013/03/04 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
webpack+vue.js实现组件化详解
2016/10/12 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
Node.js简单入门前传
2017/08/21 Javascript
vue的一个分页组件的示例代码
2017/12/25 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
微信小程序 wxParse插件显示视频问题
2019/09/27 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
零基础写python爬虫之HTTP异常处理
2014/11/05 Python
Python中自定义函数的教程
2015/04/27 Python
Python实现处理管道的方法
2015/06/04 Python
Python栈类实例分析
2015/06/15 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
jupyter实现重新加载模块
2020/04/16 Python
html5 学习简单的拾色器
2010/09/03 HTML / CSS
新护士岗前培训制度
2014/02/02 职场文书
简历中自我评价怎么写
2014/02/12 职场文书
高中教师考核方案
2014/05/18 职场文书
总结Pyinstaller打包的高级用法
2021/06/28 Python