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正则表达式re模块详细介绍
May 29 Python
在Python的Django框架中显示对象子集的方法
Jul 21 Python
Python字符编码判断方法分析
Jul 01 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 Python
python 自定义装饰器实例详解
Jul 20 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
如何基于python生成list的所有的子集
Nov 11 Python
python itsdangerous模块的具体使用方法
Feb 17 Python
Python响应对象text属性乱码解决方案
Mar 31 Python
Jupyter 无法下载文件夹如何实现曲线救国
Apr 22 Python
Python3爬虫中Selenium的用法详解
Jul 10 Python
python生成随机数、随机字符、随机字符串
Apr 06 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 面向对象的一个例子
2011/04/12 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
php变量作用域的深入解析
2013/06/03 PHP
php二维数组合并及去重复的方法
2015/03/04 PHP
PHP表单验证内容是否为空的实现代码
2016/11/14 PHP
学习ExtJS fit布局使用说明
2009/10/08 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
与Math.pow 相反的函数使用介绍
2014/08/04 Javascript
JS实现很酷的EMAIL地址添加功能实例
2015/02/28 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
浅谈javascript运算符——条件,逗号,赋值,()和void运算符
2016/07/15 Javascript
Angular路由简单学习
2016/12/26 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
微信小程序中显示倒计时代码实例
2019/05/09 Javascript
微信小程序点餐系统开发常见问题汇总
2019/08/06 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
跟老齐学Python之集合的关系
2014/09/24 Python
学习python之编写简单乘法口诀表实现代码
2016/02/27 Python
Django实现发送邮件功能
2019/07/18 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
HTML5拖拉上传文件的简单实例
2017/01/11 HTML / CSS
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
优秀士兵先进事迹
2014/02/06 职场文书
公司总经理工作职责管理办法
2014/02/28 职场文书
另类冲刺标语
2014/06/24 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
教你怎么用python爬取爱奇艺热门电影
2021/05/20 Python
Python 数据可视化之Matplotlib详解
2021/11/02 Python