上章博客写的Restful接口测试使用的是python里的Unittest测试框架,而本章使用Django自带的测试模块。
Django的单元测试使用python的unittest模块,这个模块使用基于类的方法来定义测试。类名为django.test.TestCase,继承于python的unittest.TestCase。
项目的目录结构:
|-- Django_Study
| |-- django_restful
| | |-- __ init__.py
| | |-- settings.py
| | |-- urls.py
| | |-- wsgi.py
– manage.py
| |-- api
| | |-- __ init__.py
| | |-- admin.py
| | |-- apps.py
| | |-- models.py
| | |-- serializers.py
| | |-- test_unittest.py
| | |-- tests.py
| | |-- views.py
打开Django工程目录的api>tests.py ,将上章的代码粘贴到 tests.py并修改代码
修改前 | 修改后 |
---|---|
import unittest | # import unittest |
class UserTest(unittest.TestCase): | class UserTest(TestCase): |
if name == “main”: unittest.main() | # if name == “main”: # unittest.main() |
修改后的代码如下
from django.test import TestCase
# Create your tests here.
import requests
# import unittest
#class UserTest(unittest.TestCase):
class UserTest(TestCase):
def setUp(self):
self.base_url = 'http://127.0.0.1:8000/users'
self.auth = ('user001','pass001')
#GET查询接口username参数
def test_get_user(self):
r = requests.get(self.base_url+'/1/',auth=self.auth)
result = r.json()
self.assertEqual(result['username'],'user001')
self.assertEqual(result['email'],'[email protected]')
#POST添加创建用户
def test_add_user(self):
form_data = {'username':'user0016','email':'[email protected]','groups':'http://127.0.0.1:8000/groups/2/'}
r = requests.post(self.base_url+'/',auth=self.auth,data=form_data)
result = r.json()
self.assertEqual(result['username'], 'user0016')
#DELETE删除一条用户数据
def test_delete_user(self):
r = requests.delete(self.base_url + '/6/', auth=self.auth)
self.assertEqual(r.status_code, 204)
#UPDATE局部更新参数
def test_update_user(self):
form_data={'email':'[email protected]'}
r = requests.patch(self.base_url+'/6/',auth=self.auth,data=form_data)
result = r.json()
self.assertEqual(result['email'],'[email protected]')
#GET验证无权限时接口返回参数值
def test_no_auth(self):
r = requests.get(self.base_url)
result = r.json()
self.assertEqual(result['detail'], 'Authentication credentials were not provided.')
print(result['detail'])
# if __name__ == "__main__":
# unittest.main()
确保Django 是在运行的情况下,打开命令提示符输入以下命令
#进入Django目录下
D:
cd D:\Django_Study\django_restful
#执行api项目下tests包里的测试:
python manage.py test api.tests.UserTest
运行结果:
注意:如果测试是基于数据库访问的(读取、查询Model),一定要用django.test.TestCase建立测试类,而不要用unittest.TestCase。
执行目录下所有的测试(所有的test*.py文件):
python manage.py test
执行animals项目下tests包里的测试:
python manage.py test api.tests
执行animals项目里的test测试:
python manage.py test api
单独执行某个test case:
python manage.py test test api.tests.UserTest
单独执行某个测试方法:
python manage.py test api.tests.UserTest.test_get_user
为测试文件提供路径:
python manage.py test animals/
通配测试文件名:
python manage.py test --pattern="tests_*.py"
启用warnings提醒:
python -Wall manage.py test
为了保证所有的测试都从干净的数据库开始,执行顺序如下:
1.所有的TestCase子类首先运行。
2.所有其他的单元测试(unittest.TestCase,SimpleTestCase,TransactionTestCase)。
3.其它的测试(例如doctests等)