当前位置: 首页 > 编程笔记 >

Django单元测试中Fixtures用法详解

庾波光
2023-03-14
本文向大家介绍Django单元测试中Fixtures用法详解,包括了Django单元测试中Fixtures用法详解的使用技巧和注意事项,需要的朋友参考一下

在使用单元测试时,有时候需要测试数据库中有数据,这时我们可以使用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用法内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 本文向大家介绍详解.Net单元测试方法,包括了详解.Net单元测试方法的使用技巧和注意事项,需要的朋友参考一下 1、测试异常 可以直接对方法进行异常测试,也可以对模拟对象进行异常测试,但是,对模拟对象进行异常测试,很少用,所以,这里就介绍对方法的异常测试。请看如下代码,当用户名为空的时候,抛出异常。 例如 测试代码如下 2、测试返回值 这里用到了一个LastCall的一个类,比较常用,一些辅助测试

  • 问题内容: 现在,我的Django单元测试位于。我希望有更多类似等等的东西,但是如果我以这种方式组织测试,Django就会倒闭。 有没有办法做我想做的事情,还是必须将所有测试都放在一个文件中? 问题答案: 从Django的1.6版开始,测试发现机制发生了变化。你不再需要从中导入所有内容,但是现在你必须确保所有包含测试的文件都与该模式匹配。 因此,而不是有和,现在你应该有和。 你还可以创建一个名为的

  • 本文向大家介绍详解Vue单元测试case写法,包括了详解Vue单元测试case写法的使用技巧和注意事项,需要的朋友参考一下 书接上文,karma+webpack搭建vue单元测试环境介绍了vue单元测试环境搭建及查看源文件的测试覆盖覆盖率。今天来说一下vue单元测试思路和case的写法。测试框架使用jasmine,语法参考。 代码地址:https://github.com/MarxJiao/vue

  • 问题内容: 我有一个使用elasticsearch的Django应用。我想拥有100%的代码测试覆盖率,因此我需要测试对Elasticsearch(本地“安装”)的API调用。 所以我的问题是:模拟整个elasticsearch更好还是应该运行elasticserver并检查结果? IMO最好模拟elasticsearch并仅检查python代码(测试是否使用正确的参数调用了所有内容)。 问题答案

  • 本文向大家介绍PHP单元测试配置与使用方法详解,包括了PHP单元测试配置与使用方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP单元测试配置与使用方法。分享给大家供大家参考,具体如下: php与其他语言不太一样,单元测试需要自己安装和配置,相对麻烦一点,不过单元测试对于提高库的稳定性和健壮性还是非常给力的,下面教大家怎么配置PHP单元测试 注意:php需升级到7.1版本以上 1

  • 本文向大家介绍详解Android单元测试方法与步骤,包括了详解Android单元测试方法与步骤的使用技巧和注意事项,需要的朋友参考一下 一、修改配置文件AndroidManifest.xml 说明:1、在Application节点中Activity前添加 <uses-library android:name="android.test.runner" /> 2、在Application节点的添加