Django使用unittest模块进行单元测试过程解析


Posted in Python onAugust 02, 2019

Django测试框架非常简单,首选方法是使用python标准库中的unittest模块。

Writing tests

Django的单元测试使用python的unittest模块,这个模块使用基于类的方法来定义测试。类名为django.test.TestCase,继承于python的unittest.TestCase。

from django.test import TestCase
from myapp.models import Animal
 
class AnimalTestCase(TestCase):
  def setUp(self):
    Animal.objects.create(name="lion", sound="roar")
    Animal.objects.create(name="cat", sound="meow")
 
  def test_animals_can_speak(self):
    """Animals that can speak are correctly identified"""
    lion = Animal.objects.get(name="lion")
    cat = Animal.objects.get(name="cat")
    self.assertEqual(lion.speak(), 'The lion says "roar"')
    self.assertEqual(cat.speak(), 'The cat says "meow"')

运行测试的时候,测试程序会在所有以test开头的文件中查找所有的test cases(inittest.TestCase的子类),自动建立测试集然后运行测试。

注意:如果测试是基于数据库访问的(读取、查询Model),一定要用django.test.TestCase建立测试类,而不要用unittest.TestCase。

Runing tests

执行目录下所有的测试(所有的test*.py文件):

$ python manage.py test

执行animals项目下tests包里的测试:

$ python manage.py test animals.tests

执行animals项目里的test测试:

$ python manage.py test animals

单独执行某个test case:

$ python manage.py test animals.tests.AnimalTestCase

单独执行某个测试方法:

$ python manage.py test animals.tests.AnimalTestCase.test_animals_can_speak

为测试文件提供路径:

$ python manage.py test animals/

通配测试文件名:

$ python manage.py test --pattern="tests_*.py"

启用warnings提醒:

$ python -Wall manage.py test

数据库

测试是需要数据库的,django会为测试单独生成数据库。不管你的测试是否通过,当你所有的测试都执行过后,这个测试数据库就会被销毁。

默认情况下,测试数据库的名字是test_DATABASE_NAME,DATABASE_NAME是你在settings.py里配置的数据库名.如果 你需要给测试数据库一个其他的名字,在settings.py中指定TEST_DATABASE_NAME的值。使用sqlite3时,数据库是在内存中创建的。

除了数据库是单独创建的以外,测试工具会使用相同的数据库配置--DATABASE_ENGINE, DATABASE_USER, DATABASE_HOST等等.创建测试数据库的用户DATABASE_USER(settings中)指定,所以你需要确认 DATABASE_USER有足够的权限去创建数据库。

测试执行顺序

为了保证所有的测试都从干净的数据库开始,执行顺序如下:

1.所有的TestCase子类首先运行。

2.所有其他的单元测试(unittest.TestCase,SimpleTestCase,TransactionTestCase)。

3.其它的测试(例如doctests等)

加速测试

可以将PASSWORD_HASHERS设置为更快的算法:

PASSWORD_HASHERS = (
  'django.contrib.auth.hashers.MD5PasswordHasher',
)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python多线程经典问题之乘客做公交车算法实例
Mar 22 Python
利用Python破解斗地主残局详解
Jun 30 Python
Python 私有函数的实例详解
Sep 11 Python
Python 文件操作的详解及实例
Sep 18 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
django-crontab 定时执行任务方法的实现
Sep 06 Python
numpy实现神经网络反向传播算法的步骤
Dec 24 Python
解决pytorch报错:AssertionError: Invalid device id的问题
Jan 10 Python
基于Tensorflow的MNIST手写数字识别分类
Jun 17 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
Jun 24 Python
PyTorch 中的傅里叶卷积实现示例
Dec 11 Python
教你怎么用Python selenium操作浏览器对象的基础API
Jun 23 Python
pip安装python库的方法总结
Aug 02 #Python
python twilio模块实现发送手机短信功能
Aug 02 #Python
python代码 FTP备份交换机配置脚本实例解析
Aug 01 #Python
Windows系统Python直接调用C++ DLL的方法
Aug 01 #Python
Python CVXOPT模块安装及使用解析
Aug 01 #Python
Python Selenium 之数据驱动测试的实现
Aug 01 #Python
Python 一键获取百度网盘提取码的方法
Aug 01 #Python
You might like
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
不安全的常用的js写法
2009/09/15 Javascript
在图片上显示左右箭头类似翻页的代码
2013/03/04 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
vue.js的提示组件
2017/03/02 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
2019/09/06 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
django文档学习之applications使用详解
2018/01/29 Python
python删除过期log文件操作实例解析
2018/01/31 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
Django Serializer HiddenField隐藏字段实例
2020/03/31 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
详解HTML5中的Communication API基本使用方法
2016/01/29 HTML / CSS
物流管理应届生求职信
2013/11/07 职场文书
应届大学生的推荐信
2013/11/20 职场文书
区域总监的岗位职责
2013/11/21 职场文书
关于赌博的检讨书
2014/01/08 职场文书
2014年人事部工作总结
2014/12/03 职场文书
中学图书馆工作总结
2015/08/11 职场文书
nginx如何将http访问的网站改成https访问
2021/03/31 Servers
详解Redis集群搭建的三种方式
2021/05/31 Redis
Spring实现内置监听器
2021/07/09 Java/Android
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL
python如何将mat文件转为png
2022/07/15 Python