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='123@qq.com',
            profession='test1',qq='3333',phone='1234',
        )

    # 以test_开头的为测试方法,均独立运行
    def test_create_and_sex_show(self):
        student = Student.objects.create(
            name='sk',sex=1,email='1223@qq.com',
            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='123@qq.com', 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中直接运行测试文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值