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的爬虫包Beautiful Soup中用正则表达式来搜索
Jan 20 Python
Python Flask-web表单使用详解
Nov 18 Python
Flask框架响应、调度方法和蓝图操作实例分析
Jul 24 Python
解决python有时候import不了当前的包问题
Aug 28 Python
python pillow模块使用方法详解
Aug 30 Python
Python随机数函数代码实例解析
Feb 09 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
Feb 12 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
python爬虫实例之获取动漫截图
May 31 Python
python+appium+yaml移动端自动化测试框架实现详解
Nov 24 Python
python 日志模块logging的使用场景及示例
Jan 04 Python
python 模块重载的五种方法
Apr 24 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 反向排序和随机排序代码
2010/06/30 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
javascript下string.format函数补充
2010/08/24 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
React-Native之定时器Timer的实现代码
2017/10/04 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
[03:01]完美世界DOTA2联赛PWL S2 集锦第二期
2020/12/03 DOTA
python标准日志模块logging的使用方法
2013/11/01 Python
python 的列表遍历删除实现代码
2020/04/12 Python
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
python运行时间的几种方法
2016/06/17 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
Sanic框架路由用法实例分析
2018/07/16 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
浅谈python3 构造函数和析构函数
2020/03/12 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
浅析HTML5 Landmark
2020/09/11 HTML / CSS
英国Office鞋店德国网站:在线购买鞋子、靴子和运动鞋
2018/12/19 全球购物
数据库连接池的工作原理
2012/09/26 面试题
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
举例说明类变量和实例变量的区别
2016/06/30 面试题
平面设计自荐信
2013/10/07 职场文书
餐厅周年庆活动方案
2014/08/25 职场文书
单位单身证明样本
2014/10/11 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
工人先进事迹材料
2014/12/26 职场文书
国家助学金感谢信
2015/01/21 职场文书
2019广播稿怎么写
2019/04/17 职场文书
python之django路由和视图案例教程
2021/07/26 Python