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
本例的测试结果如下: