Django中的单元测试

1.目的
让代码更健壮,尤其是在进行重构和业务增加的时候,跑通单元测试则意味着新加入的代码或者修改是没有问题的

2.配置数据库
对于SQLite数据库,django会帮我们创建一个基于内存的测试数据库用于测试,因此测试过程中产生的数据对开发环境或线上环境是没有影响的

但对于mysql,django会直接用配置的数据库用户名和密码创建一个测试数据库
测试数据库将使用默认的字符集,如果测试数据中包含中文,需修改数据库的默认字符集:
https://blog.csdn.net/weixin_43667990/article/details/102691522

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'root',
        'PASSWORD': '****',
        'NAME': 'student_sys',
        'HOST': '****',
        'PORT': 3306,
        'TEST': {
            'NAME': 'test_student_sys',  # 自定义的测试数据库 库名
        }
    }
}

3.测试代码:各个应用中的tests.py

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

class StudentTestCase(TestCase):
    # 初始化方法,用来创建初始化数据或准备其他工作
    def setUp(self):
        Student.objects.create(
            name='kzzf',sex=1,email='[email protected]',
            profession='test1',qq='3333',phone='1234',
        )

    # 以test_开头的为测试方法,均独立运行
    def test_create_and_sex_show(self):
        student = Student.objects.create(
            name='sk',sex=1,email='[email protected]',
            profession='test',qq='33334',phone='12345',
        )
        # 检查输出是否正确
        # sex_show为模型中定义的属性方法,返回性别
        # 第一个是输出结果,第二个是期望值,第三个是错误时提示的信息
        self.assertEqual(student.sex_show, '男', '性别字段展示错误')
	
	# 检查视图响应是否正常
    def test_post_student(self):
        client = Client()
        data = dict(name='test_for_post', sex=1, phone=1234, email='[email protected]', profession='docker', qq='123')
        response = client.post('/', data)
        # 提交数据后将会重定向到首页,测试状态码是否正确
        self.assertEqual(response.status_code, 302, 'status code must be 302')
        
        response = client.get('/')
        # 首页会显示所有用户信息,此处测试响应内容中是否有刚提交的用户名
        # response.content的内容是bytes类型的
        self.assertTrue(b'test_for_post' in response.content, '响应的数据中必须有test_for_post的信息')

4.运行测试用例

python manage.py test    # 运行所有的测试用例
python manage.py test app_name    # 运行指定app的测试用例
python manage.py test --keepdb    # 不清空上次的测试数据库

pycharm中直接运行测试文件
发布了106 篇原创文章 · 获赞 8 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43667990/article/details/103467707