当前位置:   article > 正文

[Django]的单元测试(TestCase|Client|测试数据库配置等)_django单元测试使用正式数据库

django单元测试使用正式数据库

1 啥是单元测试

写好了一个项目之后,要确定各个模块是不是稳定运行,有没有bug,比如一个项目有100个路由,可以手动一个一个URL的输入,查看响应有没有毛病,但这样不符合程序员的逼格。
由此,诞生了单元测试与集成测试

2 单元测试的配置

2.1 数据库的配置

由于单元测试可能测试模型类的增删改查,就免不了要往里面添加一些数据,但又不希望测试的数据影响现有的数据库造成影响,所以Django可以让我们配置一个测试数据库。
比如说:

DATABASES = {
    'default': {
        'ENGINE' : 'django.db.backends.mysql',
        'HOST': 'localhost',
        'PORT': '3306',
        'NAME': 'django_db1', # 真实的数据库
        'USER': 'root',
        'PASSWORD': '12345',
        'TEST':{
            'NAME':'django_db_test' # 用于单元测试的数据库
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.2 单元测试的py文件

在每个APP里面,都有一个test.py文件,可以在里面去定义测试类,并可以直接运行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bWC9FQzu-1578390196685)(_v_images/20200107173157406_12605.png)]

from django.test import TestCase,Client
from .models import User

# Create your tests here.
class UserTestCase(TestCase):
    # 相当于初始化方法
    def setUp(self):
        pass

    # 测试模型类
    def test_models(self):
        # 添加一个user对象
        User(
            account='account1',
            username='name1',
            gender=0
        ).save()
        # 测试,self.asserEqual接收3个参数
        #   (被测试对象,正确的测试结果,如果不正确输出什么)
        # 如果第一个参数的返回值不等于第二个参数,输出第三个参数
        self.assertEqual(
            User.objects.filter(account='account1').count(),
            1,
            '没有插入成功'
        )
    # 测试首页的访问
    def test_index(self):
        # 创建一个客户端
        client = Client()
        # 模拟客户端访问首页
        response = client.get('/')
        # 测试首页返回的状态码
        self.assertEqual(
            response.status_code,
            200,
            'index的状态码不为200'
        )

if __name__ == '__main__':
    userTestCase = UserTestCase()
    userTestCase.test_models()
    userTestCase.test_index()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

运行效果:
在这里插入图片描述

测试开始的时候,先创建数据库
测试完成后,删除数据库

2.3 如果单元测试有错误,会怎么显示?

这里

  • 把User.objects.filter(account=“account1”).count()的测试正确结果定义为2
  • 把首页返回的状态码的测试正确结果,定义为400
from django.test import TestCase,Client
from .models import User

# Create your tests here.
class UserTestCase(TestCase):
    # 相当于初始化方法
    def setUp(self):
        pass

    # 测试模型类
    def test_models(self):
        # 添加一个user对象
        User(
            account='account1',
            username='name1',
            gender=0
        ).save()
        # 测试,self.asserEqual接收3个参数
        #   (被测试对象,正确的测试结果,如果不正确输出什么)
        # 如果第一个参数的返回值不等于第二个参数,输出第三个参数
        self.assertEqual(
            User.objects.filter(account='account1').count(),
            2,
            '没有插入成功'
        )
    # 测试首页的访问
    def test_index(self):
        # 创建一个客户端
        client = Client()
        # 模拟客户端访问首页
        response = client.get('/')
        # 测试首页返回的状态码
        self.assertEqual(
            response.status_code,
            400,
            'index的状态码不为200'
        )

if __name__ == '__main__':
    userTestCase = UserTestCase()
    userTestCase.test_models()
    userTestCase.test_index()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

在这里插入图片描述

3 简化代码

测试数据库可以不预先创建,也可以不配置,即:

DATABASES = {
    'default': {
        'ENGINE' : 'django.db.backends.mysql',
        'HOST': 'localhost',
        'PORT': '3306',
        'NAME': 'django_db1',
        'USER': 'root',
        'PASSWORD': '12345',
        # 'TEST':{
        #     'NAME':'django_db_test2' # 用于单元测试的数据库
        # }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

这样也行

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/44615
推荐阅读
相关标签
  

闽ICP备14008679号