Нагрузочные тесты Gatling и модульные тесты ScalaTest в одном проекте Play

До сих пор мы использовали ScalaTestPlusPlay для тестов в нашем проекте, но недавно решили опробовать некоторые нагрузочные тесты Гатлинга. Нам нужны 3 группы тестов, которые можно запускать отдельно:

  1. Обычные модульные тесты (через «тест»)
  2. Интеграционные тесты (через «it:test»)
  3. Нагрузочные тесты (через "gatling-it:test")

К сожалению, мне удалось сделать так, чтобы группы 1 и 2 или 2 и 3 были доступны в любой момент времени. Если плагин Gatling не включен, можно выполнять модульные и интеграционные тесты.

Но если я добавлю:

enablePlugins(GatlingPlugin)

в build.sbt я получаю возможность запускать нагрузочные тесты Гатлинга, но за счет исходных модульных тестов. Задача «тест» все еще может быть выполнена, но тестовые классы не найдены/запущены.

встроенный.sbt

libraryDependencies ++= Seq(
  "org.postgresql" % "postgresql" % "9.3-1100-jdbc4",
  "org.flywaydb" % "flyway-sbt" % "3.0",
  "org.dbunit" % "dbunit" % "2.5.1" % "test,it",
  "org.scalatest" %% "scalatest" % "2.2.4" % "test,it",
  "org.scalatestplus" %% "play" % "1.4.0-M3",
  "org.jdom" % "jdom" % "1.1.2"  notTransitive(),
  "org.pac4j" % "play-pac4j-scala_2.11"  % "1.5.0",
  "org.pac4j" % "pac4j-http" % "1.7.1",
  "jp.t2v" %% "play2-auth"      % "0.13.2",
  "jp.t2v" %% "play2-auth-test" % "0.13.2" % "test,it",
  "javax.jms" % "javax.jms-api" % "2.0.1",
  "org.apache.activemq" % "activemq-all" % "5.11.1",
  "io.gatling.highcharts" % "gatling-charts-highcharts" % "2.1.7" % "test",
  "io.gatling"            % "gatling-test-framework"    % "2.1.7" % "test",
  "com.typesafe.play" %% "anorm" % "2.4.0",
  jdbc,
  ws,
  cache
)

Defaults.itSettings

lazy val ItTest = config("it") extend(Test)

lazy val GatlingTest = config("gatling-it") extend(ItTest) 

enablePlugins(GatlingPlugin)

def loadTestFilter(name: String): Boolean = (name endsWith "LoadTest")

def itTestFilter(name: String): Boolean = (name endsWith "IntegrationTest")

def unitTestFilter(name: String): Boolean = ((name endsWith "Suite"))

sourceDirectory in IntegrationTest := baseDirectory.value / "test/it"

testOptions in Gatling := Seq(Tests.Filter(loadTestFilter))

testOptions in ItTest := Seq(Tests.Filter(itTestFilter))

testOptions in Test := Seq(Tests.Filter(unitTestFilter))

lazy val root = (project in file("."))
  .enablePlugins(PlayScala)
  .configs(ItTest) settings( inConfig(ItTest)(Defaults.testTasks) : _*)

// Failed attempt at isolating gatling tests
lazy val gatling = project.in(file("."))
  .enablePlugins(GatlingPlugin)
))

проект /plugins.sbt

resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"

// The Play plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.2")  // It works from Play 2.3.2

addSbtPlugin("com.typesafe.sbt" % "sbt-gzip" % "1.0.0")

addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "0.6.0")

// Generate ctags for project. Yes, I am probably the only one who cares
addSbtPlugin("net.ceedubs" %% "sbt-ctags" % "0.1.0")

resolvers += "sonatype-releases" at "https://oss.sonatype.org/content/repositories/releases/"

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.1")

// Gatling Stress Testing
addSbtPlugin("io.gatling" % "gatling-sbt" % "2.1.7")

Итак, как мне получить доступ к новым тестам Гатлинга, не потеряв при этом все модульные тесты?


person Bill Frasure    schedule 18.09.2015    source источник


Ответы (2)


сопровождающий плагин Gatling SBT здесь.

К сожалению, вы не первый, кто столкнулся с этой проблемой, и я работаю над исправлением. В качестве временного обходного пути вы можете вернуть свои модульные тесты и запустить их, используя test:test вместо test. Это должно быть исправлено для Gatling 2.1.8 ;)

person Pierre DAL-PRA    schedule 19.09.2015
comment
Быстрое обновление: исправлено, обязательно появится в 2.1.8! - person Pierre DAL-PRA; 21.09.2015

Обычно я перемещаю гатлинг в такой подпроект в build.sbt:

lazy val gtl = Project("gtl", File("gtl")).settings(....).enablePlugins(GatlingPlugin)
aggregate in Test := false

затем выполнить через sbt

gtl/it:test or gtl/test 
person ddkr    schedule 21.09.2015
comment
Каковы некоторые преимущества этого подхода к подпроектам, помимо возможности использовать команду test без префикса пространства имен? - person Bill Frasure; 23.09.2015
comment
@swoogles в основном не загрязняет файлы сборки специфичными для тестирования параметрами, такими как среда выполнения jvm и конфликтующие библиотеки. И да, это был обход упомянутой выше ошибки. - person ddkr; 25.09.2015