Django 测试
参考文档
- https://docs.djangoproject.com/zh-hans/4.0/topics/testing/overview/
- https://docs.djangoproject.com/zh-hans/4.0/topics/testing/tools/
- https://docs.djangoproject.com/zh-hans/4.0/intro/tutorial05/
编写测试
以测试接口为例,向一个接口发送请求,并获取请求返回的数据(一般为json格式的数据),验证携带不同的参数发送请求的响应状态是否与预期一致。
默认在 tests.py
文件内编写测试代码。 为每个api编写测试自定义测试类,该类继承 unittest.TestCase
,类名为 ***Test
形式。每个类都实现 setUp
方法,用于创建一个 client,模拟发送请求。
import unittest
from django.test import Client
class UserLoginTest(unittest.TestCase):
""" 测试用户登录api """
def setUp(self):
# 为每个测试创建一个 client
self.client = Client()
以测试用户登录api为例
测试用户名错误
每个测试类中的方法名以 test_
开头,根据api文档中的请求参数的描述和示例值设置请求参数,携带设置的参数发送请求,然后验证响应是否与预期一致。
def test_login_success(self):
""" 测试登录成功 """
# 请求参数
params = {
"account": "18379559476",
"password": "123456"
}
# 发送请求
response = self.client.post('http://211.82.97.230:4088/patentApp/v1/user/login/', params)
# 验证返回的json数据是否与预期一致
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json()['code'], 10000)
self.assertEqual(response.json()['role'], 2)
完整测试案例代码
# from django.test import TestCase
import unittest
from django.test import Client
# Create your tests here.
class UserLoginTest(unittest.TestCase):
""" 测试用户登录api """
def setUp(self):
# 为每个测试创建一个 client
self.client = Client()
def test_login_success(self):
""" 测试登录成功 """
params = {
"account": "18379559476",
"password": "123456"
}
response = self.client.post('http://211.82.97.230:4088/patentApp/v1/user/login/', params)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json()['code'], 10000)
self.assertEqual(response.json()['role'], 2)
def test_account_error(self):
""" 测试账号错误 """
params = {
"account": "18379559987",
"password": "123456"
}
response = self.client.post('http://211.82.97.230:4088/patentApp/v1/user/login/', params)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json()['code'], 10001)
self.assertEqual(response.json()['role'], 2)
def test_password_error(self):
""" 测试密码错误 """
params = {
"account": "18379559476",
"password": "123"
}
response = self.client.post('http://211.82.97.230:4088/patentApp/v1/user/login/', params)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json()['code'], 10001)
self.assertEqual(response.json()['role'], 2)
运行测试
# 默认情况下,发现当前工作目录下任何名为“test*.py”的文件中的测试
python manage.py test
可以通过向 **python manage.py test
提供任意数量的 “测试标签” 来指定要运行的特定测试。每个测试标签可以是指向包、模块、TestCase
**子类或测试方法的点分隔 Python 路径。例如:
# 运行 patentApp.tests 模块下的所有测试
python manage.py test patentApp.tests
# 运行 patentApp.tests.UserLoginTest 中的所有测试用例
python manage.py test patentApp.tests.UserLoginTest
# 仅运行 patentApp.tests.UserLoginTest 中的 test_login_success 这个测试用例
python manage.py test patentApp.tests.UserLoginTest.test_login_success
测试全通过
有测试用例未通过