django单元测试

测Django的东西仅限于在MTV模型。哪些可以测?哪些不可以。

1、html里的东西不能测。

  • Html里的HTML代码大部分都是写死的,嵌套在html中的Django模板语言也不能测,即使有部分逻辑。但写测试用例时至少要调用一个类或者方法。模板语言没有出参也没有入参,不能测

2、models模型可测。属于数据库层

3、views视图层可以测。有入参、有方法。

综上:根据Django语言特点,可测models和views

1、在创建Django app时,已经自动生成了tests.py文件,我们直接在tests.py中编写我们的测试用例


from django.test import TestCase
from sign.models import Guest, Event

class ModelTest(TestCase):

    def setUp(self):
        Event.objects.create(id=1, name="oneplus 3 event", status=True, limit=2000,address='shenzhen', start_time='2016-08-31 02:18:22')
        Guest.objects.create(id=1, event_id=1, realname='alen',phone='13711001101', email='alen@mail.com', sign=False)

    def test_event_models(self):
        result = Event.objects.get(name="oneplus 3 event")
        self.assertEqual(result.address, "shenzhen")
        self.assertTrue(result.status)

    def test_guest_models(self):
        result = Guest.objects.get(phone='13711001101')
        self.assertEqual(result.realname, "alen")
        self.assertFalse(result.sign)

2、执行tests.py文件

Django中,通过test命令可以查找并运行所有TestCase的子类

1)运行所有的测试用例

python manage.py test

2)运行某个app下面的所有的测试用例

python manage.py test someapp

3)运行某个app下面的tests.py文件

python manage.py test someapp.tests

4)运行某个app下面的tests.py文件中指定的class类ModeTest

python manage.py test someapp.tests.ModeTest

5)执行ModeTest类下的某个测试方法

python manage.py test someapp.tests.ModeTest.methodname

…等等

注意:

  • 有两个assertEquals()的重载函数稍有不同。用来比较double和float的版本需要第三个参数:”精确程度”。这个精确程度确定了两个浮点值需要有多接近才能被认为它们是相等的。因为浮点运算并不是完全精确的,你可能会决定”这两个值如果相差不超过0.0001,那么它们就足够相近了”,用函数的方式来表达就是assertEquals(expectedDouble, actualDouble, 0.0001d)。
from django.test import TestCase

def add(x, y):
    return x + y

class FuncTest(TestCase):

    def setUp(self):
        self.x = 1
        self.y = 2

    def add_test(self):
        self.assertEquals(add(self.x, self.y), int(4))
from django.test import TestCase
from lianxi.models import User

class TestUserModel(TestCase):

    def setUp(self):
        self.user = User.objects.update_or_create(username='testuser', password='password')

    def test_str(self):
        self.assertEquals(self.user.__str__(), 'testuser')

from django.test import TestCase
from django.test import Client

class APITest(TestCase):

    def test_index_get(self):
"""
        未传参数
        :return:
"""

        res = self.client.get('/index/')
        status_code = res.status_code
        res_data = res.json()
        self.assertEqual(status_code, 200)
        self.assertEqual(res_data.get('errorCode'), 0)

    def test_index_get_params(self):
"""
        传入相关参数
        :return:
"""
        res = self.client.get('/index/', {'page': 1, 'page_size': 10})
        status_code = res.status_code
        res_data = res.json()
        self.assertEqual(status_code, 200)
        self.assertEqual(res_data.get('errorCode'), 0)

转载:看的太多前辈的资料整理出来的也找不到网址了抱歉!!!

Original: https://blog.csdn.net/yuanfei0501/article/details/118959904
Author: 鲨鱼哟
Title: django单元测试

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/737298/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球