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

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

来看一个简单的测试用例

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

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

  1. class MyClass(object):
  2. """just a test case"""
  3. def __init__(self, x, y):
  4. self.x = int(x)
  5. self.y = int(y)
  6. def add(self):
  7. return self.x + self.y
  8. def sub(self):
  9. return self.x - self.y

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

  1. import unittest
  2. from m1 import MyClass
  3. class MyClassTest(unittest.TestCase):
  4. def setUp(self):
  5. self.calc = MyClass(7, 5)
  6. def tearDown(self):
  7. pass
  8. def test_add(self):
  9. ret = self.calc.add()
  10. self.assertEqual(ret, 12)
  11. def test_sub(self):
  12. ret = self.calc.sub()
  13. self.assertEqual(ret, 2)
  14. if __name__ == '__main__':
  15. # 构造测试集
  16. suite = unittest.TestSuite()
  17. suite.addTest(MyClassTest('test_add'))
  18. suite.addTest(MyClassTest('test_sub'))
  19. # 执行测试
  20. runner = unittest.TextTestRunner()
  21. runner.run(suite)

运行测试:

  1. demo1 $ python3 test.py
  2. ..
  3. ----------------------------------------------------------------------
  4. Ran 2 tests in 0.000s
  5. 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:

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

测试用例代码:

  1. # app01/tests.py
  2. from django.test import TestCase
  3. from app01.models import Book
  4. # Create your tests here.
  5. class BookModelTest(TestCase):
  6. def setUp(self):
  7. Book.objects.create(title='书名', price=11.11)
  8. def test_book_model(self):
  9. from decimal import Decimal
  10. result = Book.objects.get(title='书名')
  11. self.assertEqual(result.price, Decimal('11.11'))

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

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

测试用例OK…

视图部分单元测试用例

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

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

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

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

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

  1. $ python3 manage.py test
  2. Creating test database for alias 'default'...
  3. System check identified no issues (0 silenced).
  4. ..
  5. ----------------------------------------------------------------------
  6. Ran 2 tests in 0.027s
  7. OK
  8. 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. Erda MSP 系列 - 以服务观测为中心的 APM 系统设计:开篇词

    本文首发于 Erda 技术团队知乎账号,更多技术文章可点击 Erda 技术团队 作者:刘浩杨,端点科技 PaaS 技术专家,微服务治理和监控平台负责人,Apache SkyWalking PMC成员 ...

  2. Pandas——Series and DataFrane

    数据科学--pandas库 pandas中有两个主要的数据结构,一个是Series,另一个是DataFrame.通过这两类数据,可以下载数据.可视化数据.和分析数据. Pandas安装:pip ins ...

  3. Smith Numbers(分解质因数)

    Smith Numbers Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14173   Accepted: 4838 De ...

  4. IIS6目录解析漏洞的实验

    ​​​​​​​​​​Windows 打开IIS管理器的方式 这个是网站IIS网站目录 右击默认网站中的属性,可以查看网站的属性,比如网站根目录,或者是端口 这个是网站的目录C:\www,有三个文件分别 ...

  5. 内存回收导致关键业务抖动案例分析-论云原生OS内存QoS保障

    蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. 导语 云原生场景,相比于传统的IDC场景,业务更加复杂 ...

  6. vue中的nextTick

    ​ 今天在浏览elementUI官网时,又一次看到了nextTick,其实nextTIck我已经不是第一次看到了,但之前都没怎么弄懂,这次决定好好研究一番-- 异步说明 vue是异步执行DOM更新的. ...

  7. promise用法解析

    Promise的理解 Promise是对异步操作的一种解决方案,一般情况下,如果有异步操作,就需要使用Promise对这个异步操作进行封装 使用Promise后可以使代码看起来更加优雅并且易于维护 使 ...

  8. FHD 4K 8K分辨率

    4K(2160P,即4096×2160的像素分辨率)和8K(4320P,即7,680 × 4,320的像素分辨率)属于UHDTV. FHD是FULL HD(Full High Definition)的 ...

  9. 分析型CRM系统都分析什么?

    在之前的文章中我们曾经讲过,目前市面上常见的CRM系统大概可以分为通用型.协助型和分析型三种类型.由于每个企业的类型.业务的不同,就需要选择一款适合的CRM客户关系管理系统.今天我们就来说一说,分析型 ...

  10. Redis泛泛而谈(详细2W字)

    本文适合于刚接触redis的,文章内容比较基础,大佬请绕道. 一.NoSQL入门和概述 Ⅰ-入门概述 1.为什么用NoSQL 1)单机MySQL的美好年代 在90年代,一个网站的访问量一般都不大,用单 ...