Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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中并行运行测试?_Django_Testing_Parallel Processing - Fatal编程技术网

如何在Django中并行运行测试?

如何在Django中并行运行测试?,django,testing,parallel-processing,Django,Testing,Parallel Processing,在Django项目中,我使用sqlite数据库来运行测试。因为它只使用内存,所以比MySQL快得多,但仍然不够快。在测试期间,仅使用4个处理器中的一个,并且不会消耗太多内存。所以,我希望在内存中有4个sqlite数据库来并行运行4个测试 python manage.py test --parallel 有人尝试过吗?您可以通过以下方式轻松拆分linux上Parralallel上的应用程序测试: $ python manage.py test cms & \ python manage.

在Django项目中,我使用sqlite数据库来运行测试。因为它只使用内存,所以比MySQL快得多,但仍然不够快。在测试期间,仅使用4个处理器中的一个,并且不会消耗太多内存。所以,我希望在内存中有4个sqlite数据库来并行运行4个测试

python manage.py test --parallel

有人尝试过吗?

您可以通过以下方式轻松拆分linux上Parralallel上的应用程序测试:

$ python manage.py test cms & \
python manage.py test blog & \
python manage.py test store & \
python manage.py test registration
$ 

对于有很多应用程序的大型项目可能很有帮助,最好是每四个应用程序运行一次测试的bash脚本。

您可以使用Django和Twisted的并行测试运行程序,如下所述:(源代码位于此处-文章末尾的链接)。您可以按照Django文档中关于测试的描述使用它


还有一个nose并行测试运行程序。

自Django 1.9以来,Django可以使用其内置的单元测试功能并行运行测试


Django文档:

根据Django 3.0,您可以使用一个
--parallel
选项

--平行[N] 在单独的并行进程中运行测试。由于现代处理器有多个内核,这使得运行测试的速度大大加快

因此,您可以使用以下命令并行执行测试

python manage.py test --parallel
您可以通过将进程数作为选项的值提供,例如--parallel=4,或者通过设置DJANGO_TEST_processs环境变量来调整进程数


如果您有一个大型Django项目,其中有很多测试单元案例,那么这将有助于大大减少测试执行时间。

不起作用。后台测试行为异常,有些测试停止工作。此外,即使它们确实工作,输出也是混乱的(不是什么大问题)。最后,大多数应用程序完成得很快,而只有两个处理器处理两个繁重的应用程序…我很奇怪,后台测试的行为很奇怪,您有关于这个问题的更多数据吗?我明白了,在某种程度上,您想要的是一个测试一个测试地分配负载测试。。。有趣,不幸的是,我不清楚如何解决你的需求。如果您发现有什么有趣的事情要做,请随时更新此问题。您可以尝试使用Python的处理库并行运行测试并捕获输出。此外,您可能希望为每个数据库使用一个单独的sqlite db(通过--settings定义),以避免上面描述的猴子业务。通常不建议这样做,我发现测试通常可以通过sqllite,但不能通过postgres。