Django之Restful接口测试-Django自带测试模块(七)

传送门:
Django之安装(一)
Django之创建项目与配置(二)
Django之添加API(三)
Django之Swagger接口文档生成(四)
Django之Restful接口测试-Postman(五)
Django之Restful接口测试-Python+Requests+Unittest(六)
Django之Restful接口测试-Django自带测试模块(七)

Django自带测试模块

上章博客写的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

运行结果:
Django之Restful接口测试-Django自带测试模块(七)_第1张图片
注意:如果测试是基于数据库访问的(读取、查询Model),一定要用django.test.TestCase建立测试类,而不要用unittest.TestCase。

Runing tests

执行目录下所有的测试(所有的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等)

你可能感兴趣的:(Django,python,requests)