Django 使用内置的单元测试

1、在你的app内的tests.py文件内添加测试用例代码

本例的代码结构如下:
在这里插入图片描述
由于我的app较多,也为了方便管理,我将app统一放在了apps目录下,想要达到这样的效果,只需在settings.py配置文件中增加以下代码

...
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, BASE_DIR)
sys.path.insert(0, os.path.join(BASE_DIR, 'apps')) # 整合app统一到apps目录内的必要配置


# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '0b($)a_$n$!grvsj!pob$5z4(q+u3fo_)aoz!g)3^=pk@7g770sdfgertgsdf'
...

本例想要的测试效果是:测试/test/接口,并展示测试结果
本例编写user目录下的tests.py,增加代码如下:

from django.test import TestCase
from django.test import Client

# Create your tests here.
class TestSubtract(TestCase):

    def test_test(self):
        """
        未传参数
        :return:
        """
        # self.client 是 django TestCase提供的一个可以在django运行时使用http客户端,用于发送请求得到响应
        res = self.client.get('/test/') # 这传入的参数是path,该path是你项目中存在的路径
        status_code = res.status_code
        res_data = res.json()
        self.assertEqual(status_code, 200)
        self.assertEqual(res_data.get('errorCode'), 0)

    def test_test_params(self):
        """
        传入相关参数
        :return:
        """
        res = self.client.get('/test/', {
    
    'page': 1, 'page_size': 10}) # 这传入的参数是path和params
        status_code = res.status_code
        res_data = res.json()
        self.assertEqual(status_code, 200)
        self.assertEqual(res_data.get('errorCode'), 0)

2、编辑配置文件,配置单元测试时使用的数据库

修改settings.py配置文件

...
# 使用mysql数据库
DATABASES = {
    
    
    'default': {
    
    
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'base-api', # 实际数据库
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'TEST': {
    
    
            'NAME': 'test_api',  # 配置单元测试时使用的测试数据库,会自动创建,因此 USER 用户需要有相关权限
            'CHARSET': 'utf8mb4', # 配置测试数据库的字符集,注意:根据需求修改,不然容易出问题
        },
        'OPTIONS': {
    
    
            "init_command": "SET foreign_key_checks = 0;",  # 去除强制外键约束
            'charset': 'utf8mb4',
            'sql_mode': 'traditional'
        }
    },
}
....

3、启动单元测试

运行命令时需要指定app

$ python manage.py test user

本例的测试结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/haeasringnar/article/details/107774283