【问题标题】:Gatling load tests and ScalaTest unit tests in same Play projectGatling 负载测试和 ScalaTest 单元测试在同一个 Play 项目中
【发布时间】:2015-12-16 01:47:03
【问题描述】:

到目前为止,我们一直在项目中使用 ScalaTestPlusPlay 进行测试,但是 最近决定尝试一些 Gatling 负载测试。我们要 3 可以单独运行的测试组:

  1. 简单的单元测试(通过“测试”)
  2. 集成测试(通过“it:test”)
  3. 负载测试(通过“gatling-it:test”)

不幸的是,我只能让第 1&2 组或第 2&3 组成为 在任何给定时间可用。如果未启用 Gatling 插件,则该单元 可以执行测试和集成测试。

但如果我添加:

enablePlugins(GatlingPlugin)

为了 build.sbt,我获得了运行 Gatling 负载测试的能力,但是在 原始单元测试的费用。 “测试”任务仍然可以执行, 但没有找到/运行测试类。

内置.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")

那么我怎样才能在不丢失所有单元的情况下访问新的 Gatling 测试 测试?

【问题讨论】:

    标签: scala unit-testing playframework-2.0 scalatest gatling


    【解决方案1】:

    这里是 Gatling 的 SBT 插件的维护者。

    很遗憾,您不是第一个遇到此问题的人,我正在努力解决这个问题。 作为临时解决方法,您可以使用test:test 而不是test 来恢复并运行单元测试。 它应该为 Gatling 2.1.8 修复;)

    【讨论】:

    • 快速更新:这个已经修复,2.1.8肯定会出现的!
    【解决方案2】:

    我通常在 build.sbt 中将 gatling 移到这样的子项目中:

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

    然后通过 sbt 执行

    gtl/it:test or gtl/test 
    

    【讨论】:

    • 这种子项目方法除了能够使用没有命名空间前缀的“test”命令之外还有哪些优点?
    • @swoogles 主要不会使用 jvm 运行时和冲突库等测试特定选项污染构建文件。是的,这是解决上述错误的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2015-05-30
    • 2010-09-27
    • 2012-02-04
    • 1970-01-01
    相关资源
    最近更新 更多