improve speed of cucumber tests

This commit is contained in:
2019-08-14 22:41:46 +02:00
parent 7dffc005b9
commit 17746d9b1e
2 changed files with 50 additions and 40 deletions

View File

@@ -4,6 +4,7 @@ import cucumber.api.java8.En
import cucumber.api.junit.Cucumber
import feature.Context
import fr.dcproject.config
import fr.dcproject.module
import fr.dcproject.utils.LoggerDelegate
import fr.postgresjson.connexion.Connection
import fr.postgresjson.connexion.Requester
@@ -11,10 +12,11 @@ import fr.postgresjson.migration.Migrations
import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.server.testing.TestApplicationEngine
import io.ktor.server.testing.createTestEnvironment
import io.ktor.server.testing.withTestApplication
import io.ktor.util.KtorExperimentalAPI
import org.junit.runner.RunWith
import org.koin.test.KoinTest
import org.koin.test.inject
import org.koin.test.get
import org.slf4j.Logger
import java.util.concurrent.TimeUnit
import feature.Context.Companion.current as contextCurrent
@@ -26,28 +28,27 @@ var unitialized: Boolean = false
@RunWith(Cucumber::class)
@CucumberOptions(plugin = ["pretty"])
class RunCucumberTest: En, KoinTest {
private val migrations: Migrations by inject()
private val connection = Connection("test", "test", "test")
private val logger: Logger? by LoggerDelegate()
init {
Before(-2) { _: Scenario ->
if (!unitialized) {
config.database = "test"
config.username = "test"
config.password = "test"
withTestApplication({ module() }) {
migrations()
fixtures()
}
unitialized = true
}
}
Before(-1) { scenario: Scenario ->
config.database = "test"
config.username = "test"
config.password = "test"
contextCurrent = Context(TestApplicationEngine(createTestEnvironment()) {}, scenario)
beforeAll()
logger?.info("Fixtures Begin")
//language=PostgreSQL
connection.sendQuery("""truncate table "user" cascade;""")
//language=PostgreSQL
connection.sendQuery("""SET fixture.quantity.multiple = '50';""")
getFixturesRequester()
.getQueries()
.sortedBy { it.name }
.forEach { it.sendQuery() }
logger?.info("Fixtures Done")
}
After { _: Scenario ->
@@ -55,18 +56,33 @@ class RunCucumberTest: En, KoinTest {
}
}
private fun beforeAll()
{
if (!unitialized) {
migrations.forceAllDown()
migrations.run()
unitialized = true
}
private fun migrations() {
config.database = "test"
config.username = "test"
config.password = "test"
val migrations: Migrations = get()
migrations.forceAllDown()
migrations.run()
}
private fun fixtures() {
logger?.info("Fixtures Begin")
val connection: Connection = get()
//language=PostgreSQL
connection.sendQuery("""truncate table "user" cascade;""")
//language=PostgreSQL
connection.sendQuery("""SET fixture.quantity.multiple = '50';""")
getFixturesRequester()
.getQueries()
.sortedBy { it.name }
.forEach { it.sendQuery() }
logger?.info("Fixtures Done")
}
private fun getFixturesRequester(): Requester {
return Requester.RequesterFactory(
connection = connection,
connection = get(),
queriesDirectory = config.sqlFiles.resolve("fixtures")
).createRequester()
}