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

作者:再见紫罗兰 时间:2021-04-03 13:09:08 

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',
)

来源:https://www.cnblogs.com/linxiyue/p/3885949.html

标签:django,unittest,模块,单元,测试
0
投稿

猜你喜欢

  • css清除浮动“clear:both;”的应用

    2008-03-17 12:54:00
  • 在 CentOS 7 中安装 MySQL 8 的教程详解

    2024-01-17 03:33:56
  • python实现简单http服务器功能

    2023-03-24 15:36:58
  • 使用Python的Tornado框架实现一个Web端图书展示页面

    2022-04-23 07:23:48
  • Python读写Excel表格的方法

    2022-11-10 20:43:18
  • Linux安装Python3如何和系统自带的Python2并存

    2023-08-25 03:42:09
  • Python数据结构之双向链表的定义与使用方法示例

    2023-06-29 06:20:45
  • Python3之文件读写操作的实例讲解

    2023-07-27 15:57:45
  • 不要跳转或刷新 实现网页区域选择显示

    2010-07-02 16:25:00
  • Python利用PaddleOCR制作个搜题小工具

    2022-07-22 16:18:18
  • Python中星号的五种用法小结

    2022-12-06 16:17:23
  • python3+requests接口自动化session操作方法

    2022-09-22 19:30:40
  • python光学仿真通过菲涅耳公式实现波动模型

    2022-10-25 06:08:19
  • Python 调用 ES、Solr、Phoenix的示例代码

    2023-10-03 04:52:57
  • CSS Sprites 样式生成工具 2.0下载

    2009-05-13 12:41:00
  • 将python图片转为二进制文本的实例

    2021-04-23 17:21:45
  • Python matplotlib实用绘图技巧汇总

    2023-10-05 01:12:39
  • Pandas处理时间序列数据操作详解

    2021-06-19 07:21:45
  • anaconda安装后打不开解决方式(亲测有效)

    2023-01-21 09:40:15
  • JavaScript禁止右击保存图片,禁止拖拽图片的实现代码

    2024-05-11 09:07:16
  • asp之家 网络编程 m.aspxhome.com