﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
28153	Add a method to DiscoverRunner to allow populating a database with test data	Marcos Diez	nobody	"Although Django makes very easy for one to extend ` django.test.runner.DiscoverRunner ` , it's ` setup_databases() ` does too much.

Currently, it

- creates all the test databases (for single thread unit tests)
- duplicates all the test databases (in case of parallel unit tests)

In case I am running not running tests in parallel, I can just populate the DB after running unit tests without any issues.

But if I care about my time and want to run tests in parallel, I can either:

a) populate my data after setup_databases() is executed, once for each thread of the parallel tests, which is slow
b) get my hands dirty and reimplement ` setup_databases() `

I propose (and I am sending the code to do so) a better solution. We just have to break `setup_databases()` in 3 functions:

`DiscoverRunner.prepare_databases() `
`DiscoverRunner.populate_databases() # noop by default `
`DiscoverRunner.duplicate_databases_if_necessary()`


The idea is quite simple: in order to be backward compatible, ` setup_databases() `, will still exist but only call three functions above in that order.

The first function will create all the test databases necessary for non parallel tests to run.

` populate_databases() `, which should be a no op, can be overwritten by the user who  extends ` django.test.runner.DiscoverRunner ` so his/her data can be populated 

Afterwards, all the test DBs are copied as many times as necessary in case parallel tests are run via ` DiscoverRunner.duplicate_databases_if_necessary() `


I believe this change on Django will have no downside, will be backward compatible and help people who needs to populate real data on the DB for their tests.


The PR with the changes for this to work is available here: https://github.com/django/django/pull/8437





"	New feature	closed	Testing framework	dev	Normal	wontfix			Unreviewed	1	0	0	0	0	0
