在Django测试中使用的各种办法

Fixture

​ 在对Django项目做单元测试时,我们需要一些初始的数据来作为检测结果的依据,那么对于我们已经有正式数据库的模块来说,使用Fixture载入数据是简单有效的方法。

  1. 首先,你需要一份json格式的数据文件,Django对此提供了很好的支持—dumpdata 命令:

    python manage.py dumpdata myapp >myapp/fixtures/myapp.json
    # 这个命令将帮助你把数据库中myapp 导入到myapp/fixtures/test.json中
    # 这个myapp可以没有,会把数据库所有数据生成Json文件
    
  2. 然后在setting.py中加入

    FIXTURE_DIRS = ('/path/to/api/fixtures/',)
    
  3. 接着在test.py中 加入:

    fixtures = ['test.json']
    
  4. 最后么当然是运行test命令了:

     ./manage.py test
    
  5. 示例

    # coding=utf-8
    from __future__ import unicode_literals
    import json
    from rest_framework import status
    from rest_framework.test import APITestCase
    
    
    class DjangoUnittest01(APITestCase):
        fixtures = ["my_test.json"]
    
        def setUp(self):
    
            data = {
                "username": 't1',
                "password": 'admin123',
                "code": 666,
            }
            self.client.post('/base/admin/login/', data)
    
        def test_usergroup_user_information(self):# 以test开头的方法将会执行
    
            url = '/base/admin/teacher/usergroup/21/user/4/information/?otype=soldier'
            response = self.client.get(url)
            data = {
                "update_date": "2018-05-31 16:22:55",
                "task": "196311177981753978",
                "otype": "soldier",
                "task_name": "f_test1",
                "progress": 1.0,
                "id": 871
            }
    
            self.assertEqual(response.status_code, status.HTTP_200_OK)
            self.assertDictEqual(response.data["results"][0], data)
    
  6. 测试用例通过

    Creating test database for alias 'default'...
    System check identified no issues (0 silenced).
    .
    ----------------------------------------------------------------------
    Ran 1 test in 3.863s
    
    OK
    Destroying test database for alias 'default'...
    
  7. 常用断言

    assertEqual(a, b)     a == b      
    assertNotEqual(a, b)     a != b      
    assertTrue(x)     bool(x) is True      
    assertFalse(x)     bool(x) is False      
    assertIs(a, b)     a is b     
    assertIsNot(a, b)     a is not b     
    assertIsNone(x)     x is None    
    assertIsNotNone(x)     x is not None   
    assertIn(a, b)     a in b     
    assertNotIn(a, b)     a not in b    
    assertIsInstance(a, b)     isinstance(a, b)    
    assertNotIsInstance(a, b)     not isinstance(a, b)
    assertListEqual(a, b)      lists     
    assertTupleEqual(a, b)     tuples    
    assertDictEqual(a, b)      dicts
    
posted @ 2019-05-29 20:44  久末丶  阅读(427)  评论(0编辑  收藏  举报