tests.py
https://docs.djangoproject.com/zh-hans/3.1/topics/testing/tools/
https://docs.djangoproject.com/zh-hans/3.1/topics/testing/advanced/
单个测试文件
vim app/tests.py
from django.test import TestCase
多个测试文件
mkdir -p app/tests
vi test_case1.py
vi test_case2.py
配置和运行
默认情况下运行 manage.py test 会创建测试数据库运行testcase,完成后自动销毁测试数据库.
测试相关配置
vim project/settings.py
DATABASES = {
'default': {
'NAME': 'mydb',
'TEST': {
// 默认测试数据库是'NAME'前加'test_' (eg: 'test_mydb')
// 可以通过TEST.NAME指定测试数据库
'NAME': 'mytestdb'
}
}
}
# 指定runner
## 默认 django.test.runner.DiscoverRunner
TEST_RUNNER = 'site_main.base_tests.TestRunner
# 指定fixture文件路径
FIXTURE_DIRS = (os.path.join(BASE_DIR, 'app', 'fixtures'), )
运行测试程序:
$ python3 manage.py test // 查找test 开头的文件运行里面的 unittest.TestCase的子类.
$ python3 manage.py test <package> // 运行指️定应用内的测试
$ python3 manage.py test <module> // 运行指定模块内的测试
$ python3 manage.py test <module>.tests.MyTestCase // 运行一个指定的testcase
$ python3 manage.py test <module>.tests.MyTestCase.test_method // 运行一个指定的test method
--keepdb // 保留测试数据库
--parallel // 并行运行测试。
-v/--verbosity 0/1/2/3 测试输出信息级别,默认为1, 0表示不输出。
-d/--debug-sql 输出测试执行的sql语句.
Client
测试客户端是一个 Python 类,它充当一个虚拟的 Web 浏览器, 允许你测试视图并以编程方式与 Django 驱动的应用程序交互。
from django.test import Client
测试Class
SimpleTestCase
SimpleTestCase继承自unittest.TestCase.
TransactionTestCase
TransactionTestCase继承自SimpleTestCase.
LiveServerTestCase
LiveServerTestCase继承自TransactionTestCase.
LiveServerTestCase 和 TransactionTestCase` 的功能基本相同, 但多了一个功能:它在设置时在后台启动一个实时的 Django 服务器,并在关闭时将其关闭。 这就允许使用 Django 虚拟客户端 以外的自动化测试客户端, 例如,Selenium 客户端,在浏览器内执行一系列功能测试,并模拟真实用户的操作。
TestCase
TestCase继承自TransactionTestCase.
fixtures
fixtures是类属性, 可以通过模拟在数据库中插入数据进行测试.
在setUp的时候会插入fixtures指定的json文件中的数据。
在tearDown的时候会销毁数据。
# 导出数据为json格式,用于单元测试
$ python3 manage.py dumpdata > test_data.json
databases
databases是类属性