使用的包
pip install coverage
编写测试用例
引用TestCase基类:
django.test继承了python标准库unittest,所以自己的测试用例类继承django.test.TestCase即可:
from django.test import TestCase
class MyClassTestCase(TestCase):
def SetUp(self):
# 环境构造
pass
def test_my_func(self):
# 测试my_func方法
pass
如示例,一般一个测试用例类对应一个业务类,在这个测试类中完成对该业务类中各方法的单元测试。
用例执行
python manage.py test
默认用例执行语句:会发现当前目录下所有以test开头的py文件,并执行;此外用户也可以自己指定用例所在目录以及用例文件名匹配规则。
Client使用:
主要用于模仿url请求,调用并返回请求结果。
response = self.client.get('/vpc/list')
self.assertEquals(response.status_code, 302)
RequestFactory使用:
主要用于构造request对象,与Client对比,没有发生url接口的调用。
request = self.request_factory.post('vpc/list', data={'start': 0, 'length': 10})
vpc_manage = VpcManage(request)
断言(Assertions):
判断用例执行结果的主要手段,断言测试函数返回结果跟预期结果的一致性。
self.assertEquals(res['recordsTotal'], 0)
覆盖率测试案例
运行测试
python manage.py test -v 2
Creating test database for alias 'default' ('test_assets')...
Operations to perform:
Synchronize unmigrated apps: messages, rest_framework, rest_framework_swagger, staticfiles
Apply all migrations: admin, assets_control, auth, contenttypes, sessions
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying assets_control.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying sessions.0001_initial... OK
System check identified no issues (0 silenced).
test_my_func (assets_control.tests.MyTestCase) ... ok
----------------------------------------------------------------------
Ran 1 test in 0.008s
OK
出现OK成功测试APP通过
查看覆盖率
覆盖率报告
coverage report
Name Stmts Miss Cover
---------------------------------------------------------------
assets/__init__.py 2 0 100%
assets/middleware.py 22 22 0%
assets/settings.py 36 0 100%
assets/swagger_views.py 24 24 0%
assets/urls.py 7 0 100%
assets/wsgi.py 9 9 0%
assets_control/__init__.py 0 0 100%
assets_control/admin.py 1 0 100%
assets_control/apps.py 3 3 0%
assets_control/migrations/0001_initial.py 8 0 100%
assets_control/migrations/__init__.py 0 0 100%
assets_control/mo.py 16 16 0%
assets_control/models.py 260 95 63%
assets_control/serializers.py 77 36 53%
assets_control/tests.py 7 1 86%
assets_control/url.py 5 0 100%
assets_control/views.py 1114 988 11%
manage.py 9 2 78%
util/__init__.py 0 0 100%
util/datadict.py 14 0 100%
util/page.py 6 0 100%
util/pyutil.py 192 164 15%
---------------------------------------------------------------
TOTAL 1812 1360 25%