测试的作用

单元测试在开发中有这些作用:

  • 开发新功能时,确保写好的代码可以正常工作
  • 重构、修改旧代码时,确保改动的代码不影响以前开发的功能

此外,单元测试也是持续集成的基础,所以提升代码质量,首先从单元测试开始。

django单元测试

django提供了一个测试框架,可以模拟请求、数据修改、测试输出。大致的测试代码如下:

from django.test import TestCase

class SomeTest(TestCase):
    def setUp(self, *args, **kwargs):
        ``` init data here```
        pass
        
    def test_somefunction(self):
        """ test somefunction"""
        self.assertEqual(a, b)
        response = self.client.post(self.token_url, self.data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

运行测试

测试写好后,就可以开始测试这个app下面的所有testcase

python manage.py test app_name.tests

或者运行某个特定的测试用例:

python manage.py test app_name.tests.SomeTestCase

数据库建立加速

django在测试的时候,会使用一个测试数据库,通常就是在数据库名字前面加上test_。如果使用mysql/postgresql,django会创建一个真实的测试数据库,需要很长的数据库建立时间。

如果测试没有涉及到mysql/postgresql特有的功能,可以用sqlite作为测试数据库,django在测试的时候会在内存中创建一个sqlite数据库,这样可以大大提高数据库的建立速度。

具体措施在settings.py中加入:

if 'test' in sys.argv:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': 'main',
            'USER': 'user',
            'PASSWORD': '123',
            'HOST': '',
            'PORT': '',
        }
    }

django的一些测试工具

  • selenium:自动化浏览器测试工具,在django下有django_selenium
  • nose:扩展了python的unittest,在django下有django_nose


comments powered by Disqus