Django之单元测试

1、什么是单元测试
python

    单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工做。若是测试经过则说明咱们这个函数或功能可以正常工做,若是失败要么测试用例不正确,要么函数有bug须要修复。mysql


2、如何使用单元测试sql

from django.test import TestCase
from app01.models import *

class AuthorTestCase(TestCase):

    # 测试开始前的工做
    def setUp(self):
        auths = Author.objects.all().values()
        print(auths)

    # 测试结束的收尾工做
    def tearDown(self):
        Author.objects.filter(name="Steven").delete()
        auths = Author.objects.all().values()
        print(auths)

    # 本身定义的测试方法,必须以"test_"开头
    def test_insert_data(self):
        Author.objects.create(name="Steven", hobby="骑行")
        auths = Author.objects.all().values()
        print(auths)
        

输出:
<QuerySet []>
<QuerySet [{'name': 'Steven', 'id': 1, 'hobby': '骑行'}]>
<QuerySet []>

    Django的单元测试实际是基于Python的unittest模块,“setUp”方法是测试开始前的工做,“tearDown”方法是测试结束的收尾动做,这些方法名都是固定的,不容许随意修改,里面内容你也能够不写直接“pass”。“test_insert_data”是我本身定义的测试内容,方法名必须以“test_”开头,能够任意写多个自定义测试方法。
数据库


Django单元测试注意点:
django

    1. 对于每个测试方法都会讲setUp()和tearDown()方法执行一遍
app

    2. Django会在数据库中自动新建一个测试数据库来进行数据库方面的测试,默认在测试完成后销毁。因此不用担忧它会影响你实际的生成数据库!
ide


3、运行单元测试函数

1. 测试项目中全部的应用单元测试

python3 manage.py test

2. 测试项目中单独的应用测试

python3 manage.py test app01

3. 运行项目中某个应用的测试文件中的一个Case

python3 manage.py test app01.test2.AuthorTestCase

4. 运行项目中某个应用的测试文件中的一个Case中的其中一个测试方法

python3 manage.py test app01.test2.AuthorTestCase.test_insert_data

5. 运行单元测试结束时不自动删除测试数据库(保留测试数据库)

python3 manage.py test app01 --keepdb

# 为何要有这个呢?若是你有不少测试用例,定义了许多测试方法,那么每次在作数据库操做时都会建立数据库、删除数据库,严重影响执行效率。这样咱们就保留测试数据库,记得下次执行测试时也要带上--keepdb,否则会提示你删除上一次的测试数据库


4、指定测试数据库的字符集

    这是我以前踩过的一个坑,以前用Pycharm写过的一个项目执行测试没有任何问题,过几天从新打开执行单元测试,结果报了字符集错误,而后测试数据库没有自动删除。我通过仔细排查,发现自动建立的测试数据库字符集居然是“latin1”,我数据库表中有中文,因此直接报错了。知道错误缘由就好办了,我查询了官方文档,在setting.py文件中强制设置测试数据库字符集是“UTF8”。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'xxx',
        'USER': 'xxx',
        'PASSWORD': 'xxx',
        'HOST': '',
        'PORT': '',
        'TEST': {'CHARSET': 'utf8', },
    }
}
相关文章
相关标签/搜索