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 list中append()与extend()用法分享
Mar 24 Python
Python 分析Nginx访问日志并保存到MySQL数据库实例
Mar 13 Python
用python处理图片实现图像中的像素访问
May 04 Python
Python实现求解一元二次方程的方法示例
Jun 20 Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
May 31 Python
Python使用LDAP做用户认证的方法
Jun 20 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
Django中使用session保持用户登陆连接的例子
Aug 06 Python
Python中BeautifuSoup库的用法使用详解
Nov 15 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 Python
Python序列化与反序列化相关知识总结
Jun 08 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实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
Vue中render方法的使用详解
2018/01/26 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
JS数组求和的常用方法实例小结
2019/01/07 Javascript
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
Python的Flask框架应用程序实现使用QQ账号登录的方法
2016/06/07 Python
Python3连接SQLServer、Oracle、MySql的方法
2018/06/28 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
2012/11/29 HTML / CSS
网络通讯中,端口有什么含义,端口的取值范围
2012/11/23 面试题
网络维护管理员的自我评价分享
2013/11/11 职场文书
违反校纪校规检讨书
2014/02/15 职场文书
cf收人广告词大全
2014/03/14 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
餐厅保洁员岗位职责
2015/04/10 职场文书
运动会运动员赞词
2015/07/22 职场文书
nginx搭建图片服务器的过程详解(root和alias的区别)
2021/03/31 Servers
CSS3实现的文字弹出特效
2021/04/16 HTML / CSS