Python单元测试简介及Django中的单元测试

单元测试负责对最小的软件设计单元(模块)进行验证,unittest是Python自带的单元测试框架。 单元测试与功能测试都是日常开发中必不可少的部分,本文演示了Python中unittest单元测试框架的基本使用。

来看一个简单的测试用例

定义一个类,简单的实现addsub两个方法,并对其进行单元测试。

待测试的m1.py文件内容如下:

class MyClass(object):
"""just a test case"""
def __init__(self, x, y):
self.x = int(x)
self.y = int(y) def add(self):
return self.x + self.y def sub(self):
return self.x - self.y

在与m1.py同级的目录下创建test.py测试文件,使用unittest单元测试框架对A类的方法进行测试。代码内容如下:

import unittest
from m1 import MyClass class MyClassTest(unittest.TestCase):
def setUp(self):
self.calc = MyClass(7, 5) def tearDown(self):
pass def test_add(self):
ret = self.calc.add()
self.assertEqual(ret, 12) def test_sub(self):
ret = self.calc.sub()
self.assertEqual(ret, 2) if __name__ == '__main__':
# 构造测试集
suite = unittest.TestSuite()
suite.addTest(MyClassTest('test_add'))
suite.addTest(MyClassTest('test_sub'))
# 执行测试
runner = unittest.TextTestRunner()
runner.run(suite)

运行测试:

demo1 $ python3 test.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s OK

到此一个简单的单元测试就完成了。

unittest框架知识点

unittest框架中4个重要的概念:

  1. test fixture:是初始化和清理测试数据及环境,通过重写TestCase的setUp()tearDown()方法来实现
  2. test case:是测试用例
  3. test suite:是测试用例的集合(俗称测试套件),通过addTest加载TestCase到TestSuite中,返回一个TestSuite实例。
  4. test runner:的作用是运行测试用例并返回结果,通过TextTestRunner类提供的run()方法来执行test suitetest case

Django中的单元测试

Django项目的app目录下都默认生成了一个tests.py文件,我们可以把我们的测试用例代码都写在这个文件中。

Model部分单元测试用例

假设项目中有一个Book的model:

class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=10, decimal_places=2)

测试用例代码:

# app01/tests.py
from django.test import TestCase
from app01.models import Book
# Create your tests here. class BookModelTest(TestCase):
def setUp(self):
Book.objects.create(title='书名', price=11.11) def test_book_model(self):
from decimal import Decimal
result = Book.objects.get(title='书名')
self.assertEqual(result.price, Decimal('11.11'))

运行测试,在项目目录下运行:

$ python3 manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 0.003s OK
Destroying test database for alias 'default'...

测试用例OK…

视图部分单元测试用例

假设我们有个index视图,代码如下:

def index(request):
return render(request, 'index.html')

app01/tests.py文件中添加测试用例代码:

# app01/tests.py
class IndexPageTest(TestCase):
"""测试index页面"""
def test_index_page_renders_index_template(self):
"""测试index视图"""
response = self.client.get('/index/')
self.assertEqual(response.status_code, 200) # 判断状态码
self.assertTemplateUsed(response, 'index.html') # 判断渲染的模板是否正确

在项目根目录运行python manage.py test命令:

$ python3 manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 2 tests in 0.027s OK
Destroying test database for alias 'default'...

python manage.py test命令会查找当前项目中的tests.py文件,并运行测试用例。

结束语

本文只演示了最基本的基于unittest的单元测试示例,更多的单元测试示例,请自行搜索学习…

Python单元测试简介及Django中的单元测试的更多相关文章

  1. Celery简介以及Django中使用celery

    目录 Celery简介 消息中间件 任务执行单元 任务结果存储 使用场景 Celery的安装和配置 Celery执行异步任务 基本使用 延时任务 定时任务 异步处理Django任务 案例: Celer ...

  2. 在python的web框架Django中使用SQL Server

    在pycharm中安装 安装pyodbc和Django——pyodbc是一个用python写的ODBC引擎 安装Django-pyodbc-azure                  在后方网址中查 ...

  3. 好代码是管出来的——.Net Core中的单元测试与代码覆盖率

    测试对于软件来说,是保证其质量的一个重要过程,而测试又分为很多种,单元测试.集成测试.系统测试.压力测试等等,不同的测试的测试粒度和测试目标也不同,如单元测试关注每一行代码,集成测试关注的是多个模块是 ...

  4. Python项目中的单元测试

    引入 单元测试负责对最小的软件设计单元(模块)进行验证,unittest是Python自带的单元测试框架. 单元测试与功能测试都是日常开发中必不可少的部分,本文演示了Python中unittest单元 ...

  5. 在Android Studio中进行单元测试和UI测试

    本篇教程翻译自Google I/O 2015中关于测试的codelab,掌握科学上网的同学请点击这里阅读:Unit and UI Testing in Android Studio.能力有限,如有翻译 ...

  6. Django中的ORM如何通过数据库中的表格信息自动化生成Model 模型类?

    Inspectdb Django项目通过绑定的数据库中的相应表格直接自动化生成Model 模型类 python manage.py inspectdb Django 中的 ORM 可以实现对象关系映射 ...

  7. 在Django中使用Channels功能

    前言:最近后台写游戏更新版本功能,简单就是前端发送更新请求,后端需要对很多台服务器进行更新和各种操作,本来想着实现不难,后来发现因为后端需要执行很长时间,前端返回报错,后端会执行完毕,但是前端先断开了 ...

  8. Django 中的 csrf_token 与单元测试

    Django 中的 csrf_token 与单元测试 在<Python Web开发:测试驱动方法>一书中作者使用的 Django 版本是 1.7,而我使用的是1.9.7版(官网已经更新到1 ...

  9. Python框架学习之Flask中的蓝图与单元测试

    因为Flask框架的集成度很低,随着Flask项目文件的增多,会导致不太好管理.但如果对一个项目进行模块化管理的,那样子管理起来就会特别方便.而在Flask中刚好就提供了这么一个特别好用的工具蓝图(B ...

随机推荐

  1. xlrd、xlwt 库

    1. 安装与介绍 2. xlrd 3. xlwt 1. 安装与介绍 xlrd 模块实现对excel文件内容读取,xlwt 模块实现对excel文件的写入. 模块安装: pip install xlrd ...

  2. hdu4864 贪心

    题意:        给你n太机器,m个任务,每个任务和机器都有两个权值x,y,每个机器只能被一个任务使用,条件是机器的两个权值分别比任务的大于等于,每个任务获得的价值是x*500+y*2,问你最多能 ...

  3. Python爬虫 XPath语法和lxml模块

    XPath语法和lxml模块 什么是XPath? xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. X ...

  4. XCTF-wtf.sh-150

    wtf.sh-150 题目描述 没有描述 解题过程 打开之后是个论坛,有注册和登录功能点 抓包发现,登陆成功后会设置cookie <script>document.cookie = 'US ...

  5. (Py练习)输入某年某月判断天数

    # 输入某年某月,判断这一天是这一年的第几天 year = int(input("year:\n")) month = int(input("month:\n" ...

  6. 【JavaScript】Leetcode每日一题-移除元素

    [JavaScript]Leetcode每日一题-移除元素 [题目描述] 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用 ...

  7. typecho+宝塔搭建

    在这个互动视频中很详细的讲解到了 https://www.bilibili.com/video/BV1o4411r7x5?spm_id_from=pageDriver

  8. 浅谈自动特征构造工具Featuretools

    简介 特征工程在机器学习中具有重要意义,但是通过手动创造特征是一个缓慢且艰巨的过程.Python的特征工程库featuretools可以帮助我们简化这一过程.Featuretools是执行自动化特征工 ...

  9. c语言编程学习之二维数组

    二维数组 c语言按照行主序存储二维数组.也就是说,二维数组元素在内存中的位置是连续的,每行末尾元素(若不是最后一行)的下一个元素就是下一行的首元素. 如下图所示 接下来我们来分析一下如何将二维数组所有 ...

  10. Git 系列教程(7)- 撤销操作

    撤销操作 在任何一个阶段,你都有可能想要撤销某些操作 有些撤销操作是不可逆的 --amend 修补提交 有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了. 此时,就可以运行带有 -- ...