浅谈Django之单元测试

一、什么是++单元测试++

单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。如果测试通过则说明我们这个函数或功能能够正常工作,如果失败要么++测试用例++不正确,要么函数有bug需要修复。

二、如何使用单元测试

python 复制代码
   from django.test import TestCase
  from app01.models import *
  class AuthorTestCase(TestCase):

测试开始前的工作

python 复制代码
    def setUp(self):
  auths = Author.objects.all().values()
  print(auths)

测试结束的收尾工作

python 复制代码
   def tearDown(self):
  Author.objects.filter(name="Steven").delete()
  auths = Author.objects.all().values()
  print(auths)

自己定义的测试方法,必须以"test_"开头

python 复制代码
    def test_insert_data(self):
  Author.objects.create(name="Steven", hobby="骑行")
  auths = Author.objects.all().values()
  print(auths)

输出:

python 复制代码
  <QuerySet []>
  <QuerySet [{'name': 'Steven', 'id': 1, 'hobby': '骑行'}]>
  <QuerySet []>

Django的单元测试实际是基于Python的unittest模块,"setUp"方法是测试开始前的工作,"tearDown"方法是测试结束的收尾动作,这些方法名都是固定的,不允许随意修改,里面内容你也可以不写直接"pass"。"test_insert_data"是我自己定义的测试内容,方法名必须以"test_"开头,可以任意写多个自定义测试方法。

Django单元测试注意点:

  1. 对于每一个测试方法都会讲setUp()和tearDown()方法执行一遍

  2. Django会在++数据库++中自动新建一个测试数据库来进行数据库方面的测试,默认在测试完成后销毁。所以不用担心它会影响你实际的生成数据库!

三、运行单元测试

  1. 测试项目中所有的应用

python3 manage.py test

  1. 测试项目中单独的应用

python3 manage.py test app01

  1. 运行项目中某个应用的测试文件中的一个Case

python3 manage.py test app01.test2.AuthorTestCase

  1. 运行项目中某个应用的测试文件中的一个Case中的其中一个测试方法

python3 manage.py test app01.test2.AuthorTestCase.test_insert_data

  1. 运行单元测试结束时不自动删除测试数据库(保留测试数据库)

python3 manage.py test app01 --keepdb

为什么要有这个呢?如果你有很多测试用例,定义了许多测试方法,那么每次在做数据库操作时都会创建数据库、删除数据库,严重影响执行效率。这样我们就保留测试数据库,记得下次执行测试时也要带上--keepdb,不然会提示你删除上一次的测试数据库

四、指定测试数据库的字符集

这是我之前踩过的一个坑,之前用Pycharm写过的一个项目执行测试没有任何问题,过几天重新打开执行单元测试,结果报了字符集错误,然后测试数据库没有自动删除。我经过仔细排查,发现自动创建的测试数据库字符集竟然是"latin1",我数据库表中有中文,所以直接报错了。知道错误原因就好办了,我查询了官方文档,在setting.py文件中强制设置测试数据库字符集是"UTF8"。

python 复制代码
   DATABASES = {
  'default': {
  'ENGINE': 'django.db.backends.mysql',
  'NAME': 'xxx',
  'USER': 'xxx',
  'PASSWORD': 'xxx',
  'HOST': '',
  'PORT': '',
  'TEST': {'CHARSET': 'utf8', },
  }
  }

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
程序员Rock15 小时前
上位机开发-MODBUS面试常见问题
c语言·c++·面试·职场和发展·上位机
测试修炼手册19 小时前
[测试技术] TestNG 入门与实战:分组、数据驱动与并行执行
junit·单元测试·log4j
晚笙coding21 小时前
LeetCode 98:验证二叉搜索树 —— 从局部判断到全局范围约束的递归思想
算法·leetcode·职场和发展
星栈独行1 天前
Node 接口该写同步还是异步?
服务器·开发语言·后端·程序人生·node.js
haolly1 天前
「主流网页高亮插件横评」—— Acorny 事实卡 + 完整正文
经验分享·程序人生·学习方法
川石课堂软件测试2 天前
安全测试|常见SQL注入攻击方式、实例及预防
服务器·数据库·sql·功能测试·测试工具·安全·单元测试
在水一缸2 天前
深入浅出 Catch2:现代 C++ 测试框架的优雅实践
开发语言·c++·单元测试·log4j·测试框架·catch2
星栈独行2 天前
Node 框架怎么选?Express、Koa、Egg、NestJS 场景化选型指南
后端·程序人生·node.js
zzz_23682 天前
码上面试平台测试报告:功能、后台管理、异常状态与 JMeter 性能验证
jmeter·面试·职场和发展
浩哥学JavaAI2 天前
2026年最新AI agent面试(10)_通信与行业动态
人工智能·面试·职场和发展