Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更快地运行django单元测试(通过manage.py)_Django_Unit Testing_Testing - Fatal编程技术网

如何更快地运行django单元测试(通过manage.py)

如何更快地运行django单元测试(通过manage.py),django,unit-testing,testing,Django,Unit Testing,Testing,当我为django应用程序开发单元测试时,我发现自己一遍又一遍地运行manage.py测试。我使用的是MySQL后端,项目中有许多模型,因此创建所有测试数据库的启动时间大约为30秒 如何使用“manage.py test”命令来保持创建的数据库表,并在运行“manage.py test”命令之间清除所有记录,从而加快每个单元测试的速度?我没有尝试过它,但最近有一次检入,它允许测试在事务内部运行,然后回滚: 请注意,您不必每次都运行整个测试套件。通过运行manage.py test appname

当我为django应用程序开发单元测试时,我发现自己一遍又一遍地运行manage.py测试。我使用的是MySQL后端,项目中有许多模型,因此创建所有测试数据库的启动时间大约为30秒


如何使用“manage.py test”命令来保持创建的数据库表,并在运行“manage.py test”命令之间清除所有记录,从而加快每个单元测试的速度?

我没有尝试过它,但最近有一次检入,它允许测试在事务内部运行,然后回滚:


请注意,您不必每次都运行整个测试套件。通过运行
manage.py test appname
(或使用
manage.py test app1 app2…
)一次运行多个应用程序,您可以只运行单个应用程序的测试套件


我通常的工作流程是在我工作时只运行我正在使用的应用程序的测试,然后在我提交下一组更改之前运行整个套件。

您可以使用sqlite数据库后端运行测试。它不适合于完整的测试运行(因为db是不同的),但对于健全性检查,它可以节省大量时间。请参阅:

我在MySQL数据库中使用ram磁盘,fast甚至没有对其进行描述,再加上只在您正在使用的特定应用程序中测试特定测试,可以大大缩短测试时间。有一些脚本可以自动为您的数据库创建ramdisk,我使用的是我的一个同事编写的,这个版本是针对Mac OS X的。还有一个版本是针对Linux的。我花了大约30秒为django-dev设置整个程序,我的测试有时运行不到5秒钟,包括创建默认的测试数据库

如本文所述:,我创建了一个测试套件,可以针对生产数据库(在我的本地开发机器上,通过“manage.py shell”)或常规django“manage.py test”测试套件运行。对于我来说,在开发过程中进行快速的健全性检查和提交时间验证可以节省很多时间。在这两种情况下,我都是针对同一个db(MySQL)运行的,并在测试中获取django ORM。

您可以使用以下标志防止在django 1.8+中的测试运行之间破坏您的测试db:

--keepdb
--parallel
()

在Django 1.9+中,如果您有多核处理器,另一个很好的选择是标志:

--keepdb
--parallel

这要求您pip安装tblib,但允许您在多个内核上同时运行单元测试。()

然而,它仍然为已安装的应用程序中的每个模块创建数据库,这需要更多的时间。