Gatling教程 Gatling 教程四:测试脚本编写及 API 介绍

xiuxiuing · 2018年10月19日 · 最后由 xiaoxiao 回复于 2019年11月21日 · 4963 次阅读

Gatling 基于 Scala 开发的压测工具,我们可以通过录制自动生成脚本,也可以自己编写脚本,大家不用担心,首先脚本很简单常用的没几个,另外 gatling 封装的也很好我们不需要去专门学习 Scala 语法,当然如果会的话会更好。

脚本示例

import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._
class BaiduSimulation extends Simulation {
  //设置请求的根路径
  val httpConf = http.baseURL("https://www.baidu.com")
  /*
    运行100秒 during 默认单位秒,如果要用微秒 during(100 millisecond)
   */
  val scn = scenario("BaiduSimulation").during(100){
    exec(http("baidu_home").get("/"))
  }
  //设置线程数
//  setUp(scn.inject(rampUsers(500) over(10 seconds)).protocols(httpConf))
  setUp(scn.inject(atOnceUsers(10)).protocols(httpConf))
}

脚本编写

Gatling 脚本的编写主要包含下面三个步骤

  • http head 配置
  • Scenario 执行细节
  • setUp 组装

我们以百度为例,进行第一个 GET 请求测试脚本的编写,类必须继承 Simulation

  1. 配置下 head,只是简单的请求下百度首页,所以只定义下请求的 base url,采用默认的 http 配置即可 //设置请求的根路径 val httpConf = http.baseURL("https://www.baidu.com")
  2. 声明 Scenario,指定我们的请求动作

    val scn = scenario("BaiduSimulation").
    exec(http("baidu_home").get("/"))
    

    scenario 里的参数:scenario name
    exec() 里的参数就是我们的执行动作,http("本次请求的名称").get("本次 http get 请求的地址")

  3. 设置并发数并组装

    //设置线程数
    setUp(scn.inject(atOnceUsers(10)).protocols(httpConf))
    

    atOnceUsers:立马启动的用户数,可以理解为并发数

这样我们一个简单的脚本就完成了,可以运行看下效果。

高级教程

Injection -- 注入

注入方法用来定义虚拟用户的操作

setUp(
  scn.inject(
    nothingFor(4 seconds), // 1
    atOnceUsers(10), // 2
    rampUsers(10) over(5 seconds), // 3
    constantUsersPerSec(20) during(15 seconds), // 4
    constantUsersPerSec(20) during(15 seconds) randomized, // 5
    rampUsersPerSec(10) to 20 during(10 minutes), // 6
    rampUsersPerSec(10) to 20 during(10 minutes) randomized, // 7
    splitUsers(1000) into(rampUsers(10) over(10 seconds)) separatedBy(10 seconds), // 8
    splitUsers(1000) into(rampUsers(10) over(10 seconds)) separatedBy atOnceUsers(30), // 9
    heavisideUsers(1000) over(20 seconds) // 10
  ).protocols(httpConf)
)
  1. nothingFor(duration):设置一段停止的时间
  2. atOnceUsers(nbUsers):立即注入一定数量的虚拟用户 setUp(scn.inject(atOnceUsers(50)).protocols(httpConf))
  3. rampUsers(nbUsers) over(duration):在指定时间内,设置一定数量逐步注入的虚拟用户 setUp(scn.inject(rampUsers(50) over(30 seconds)).protocols(httpConf))
  4. constantUsersPerSec(rate) during(duration):定义一个在每秒钟恒定的并发用户数,持续指定的时间 setUp(scn.inject(constantUsersPerSec(30) during(15 seconds)).protocols(httpConf))
  5. constantUsersPerSec(rate) during(duration) randomized:定义一个在每秒钟围绕指定并发数随机增减的并发,持续指定时间 setUp(scn.inject(constantUsersPerSec(30) during(15 seconds) randomized).protocols(httpConf))
  6. rampUsersPerSec(rate1) to (rate2) during(duration):定义一个并发数区间,运行指定时间,并发增长的周期是一个规律的值 setUp(scn.inject(rampUsersPerSec(30) to (50) during(15 seconds)).protocols(httpConf))
  7. rampUsersPerSec(rate1) to(rate2) during(duration) randomized:定义一个并发数区间,运行指定时间,并发增长的周期是一个随机的值 setUp(scn.inject(rampUsersPerSec(30) to (50) during(15 seconds) randomized).protocols(httpConf))
  8. heavisideUsers(nbUsers) over(duration):定义一个持续的并发,围绕和海维赛德函数平滑逼近的增长量,持续指定时间(译者解释下海维赛德函数,H(x) 当 x>0 时返回 1,x<0 时返回 0,x=0 时返回 0.5。实际操作时,并发数是一个成平滑抛物线形的曲线) setUp(scn.inject(heavisideUsers(50) over(15 seconds)).protocols(httpConf))
  9. splitUsers(nbUsers) into(injectionStep) separatedBy(duration):定义一个周期,执行 injectionStep 里面的注入,将 nbUsers 的请求平均分配 setUp(scn.inject(splitUsers(50) into(rampUsers(10) over(10 seconds)) separatedBy(10 seconds)).protocols(httpConf))
  10. splitUsers(nbUsers) into(injectionStep1) separatedBy(injectionStep2):使用 injectionStep2 的注入作为周期,分隔 injectionStep1 的注入,直到用户数达到 nbUsers setUp(scn.inject(splitUsers(100) into(rampUsers(10) over(10 seconds)) separatedBy atOnceUsers(30)).protocols(httpConf))
循环
val scn = scenario("BaiduSimulation").
    exec(http("baidu_home").get("/"))

上面的测试代码运行时只能跑一次,为了测试效果,我们需要让它持续运行一定次数或者一段时间,可以使用下面两个方式:

  • repeat repeat(times,counterName) times:循环次数 counterName:计数器名称,可选参数,可以用来当当前循环下标值使用,从0开始 val scn = scenario("BaiduSimulation").repeat(100){ exec(http("baidu_home").get("/")) }
  • during during(duration, counterName, exitASAP) duration:时长,默认单位秒,可以加单位milliseconds,表示毫秒 counterName:计数器名称,可选。很少使用 exitASAP:默认为true,简单的可以认为当这个为false的时候循环直接跳出,可在 循环中进行控制是否继续 /* 运行100秒 during 默认单位秒,如果要用微秒 during(100 millisecond) */ val scn = scenario("BaiduSimulation").during(100){ exec(http("baidu_home").get("/")) }
POST 请求

post 参数提交方式:

  • JSON 方式

    import io.gatling.core.Predef._
    import io.gatling.core.scenario.Simulation
    import io.gatling.http.Predef._
    class JsonSimulation extends Simulation {
    val httpConf = http.baseURL("http://127.0.0.1:7001/tst")
    //注意这里,设置提交内容type
    val headers_json = Map("Content-Type" -> "application/json")
    val scn = scenario("json scenario")
    .exec(http("test_json")   //http 请求name
    .post("/order/get")     //post url
    .headers(headers_json)  //设置body数据格式
    //将json参数用StringBody包起,并作为参数传递给function body()
    .body(RawFileBody("request.txt"))
    setUp(scn.inject(atOnceUsers(10))).protocols(httpConf)
    }
    
  • Form 方式

    import io.gatling.core.Predef._
    import io.gatling.http.Predef._
    class FormSimulation extends Simulation {
    val httpConf = http
    .baseURL("http://computer-database.gatling.io")
    //注意这里,设置提交内容type
    val contentType = Map("Content-Type" -> "application/x-www-form-urlencoded")
    //声明scenario
    val scn = scenario("form Scenario")
    .exec(http("form_test") //http 请求name
    .post("/computers") //post地址, 真正发起的地址会拼上上面的baseUrl http://computer-database.gatling.io/computers
    .headers(contentType)
    .formParam("name", "Beautiful Computer") //form 表单的property name = name, value=Beautiful Computer
    .formParam("introduced", "2012-05-30")
    .formParam("discontinued", "")
    .formParam("company", "37"))
    setUp(scn.inject(atOnceUsers(1)).protocols(httpConf))
    }
    
  • RawFileBody

    import io.gatling.core.Predef._
    import io.gatling.core.scenario.Simulation
    import io.gatling.http.Predef._
    class JsonSimulation extends Simulation {
    val httpConf = http.baseURL("http://127.0.0.1:7001/tst")
    //注意这里,设置提交内容type
    val headers_json = Map("Content-Type" -> "application/json")
    val scn = scenario("json scenario")
    .exec(http("test_json")   //http 请求name
    .post("/order/get")     //post url
    .headers(headers_json)  //设置body数据格式
    //将json参数用StringBody包起,并作为参数传递给function body()
    .body(RawFileBody("request.txt"))
    setUp(scn.inject(atOnceUsers(10))).protocols(httpConf)
    }
    

    txt 的文件内容为 JSON 数据,存放目录/resources/bodies

Feed 动态参数

Gatling 对参数的处理称为 Feeder[供料器],支持主要有:

  • 数组 val feeder = Array( Map("foo" -> "foo1", "bar" -> "bar1"), Map("foo" -> "foo2", "bar" -> "bar2"), Map("foo" -> "foo3", "bar" -> "bar3"))
  • CSV 文件 val csvFeeder = csv("foo.csv")//文件路径在 %Gatling_Home%/user-files/data/
  • JSON 文件 val jsonFileFeeder = jsonFile("foo.json") //json的形式: [ { "id":19434, "foo":1 }, { "id":19435, "foo":2 } ]
  • JDBC 数据 jdbcFeeder("databaseUrl", "username", "password", "SELECT * FROM users")
  • Redis

    可参看官方文档http://gatling.io/docs/2.1.7/session/feeder.html#feeder
    

    使用示例:

    import io.gatling.core.Predef._
    import io.gatling.core.scenario.Simulation
    import io.gatling.http.Predef._
    import scala.concurrent.duration._
    /**
    * region请求接口测试
    */
    class DynamicTest extends Simulation {
    val httpConf = http.baseURL("http://127.0.0.1:7001/test")
    //地区 feeder
    val regionFeeder = csv("region.csv").random
    //数组形式
    val mapTypeFeeder = Array(
        Map("type" -> ""),
        Map("type" -> "id_to_name"),
        Map("type" -> "name_to_id")).random
    //设置请求地址
    val regionRequest =
        exec(http("region_map").get("/region/map/get"))
        //加载mapType feeder
        .feed(mapTypeFeeder)
        //执行请求, feeder里key=type, 在下面可以直接使用${type}
        .exec(http("province_map").get("/region/provinces?mType=${type}"))
        //加载地区 feeder
        .feed(regionFeeder)
        //region.csv里title含有provinceId和cityId,所以请求中直接引用${cityId}/${provinceId}
        .exec(http("county_map").get("/region/countties/map?mType=${type}&cityId=${cityId}&provinceId=${provinceId}"))
    //声明scenario name=dynamic_test
    val scn = scenario("dynamic_test")
            .exec(during(180){ regionRequest
            })
    //在2秒内平滑启动150个线程(具体多少秒启动多少线程大家自己评估哈,我这里瞎写的)
    setUp(scn.inject(rampUsers(150) over (2 seconds)).protocols(httpConf))
    }
    

    注意:通过下面的代码只会第一次调用生成一个随机数,后面调用不变

    exec(http("Random id browse")
            .get("/articles/" + scala.util.Random.nextInt(100))
            .check(status.is(200))
    

    Gatling 的官方文档解释是,由于 DSL 会预编译,在整个执行过程中是静态的。因此 Random 在运行过程中就已经静态化了,不会再执行。应改为 Feeder 实现,Feeder 是 gatling 用于实现注入动态参数或变量的,改用 Feeder 实现:

    val randomIdFeeder = 
        Iterator.continually(Map("id" -> 
            (scala.util.Random.nextInt(100))))
    
    feed(randomIdFeeder)
        .exec(http("Random id browse")
            .get("/articles/${id}"))
            .check(status.is(200))
    

    feed()在每次执行时都会从Iterator[Map[String, T]]对象中取出一个值,这样才能实现动态参数的需求。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 5 条回复 时间 点赞

mark 一下 整理得真好

qa 回复

谢谢支持

外部可以调用 Galting 的接口吗?访问他的测试报告等一些数据

丫滴 回复

测试报告是静态页面,你配个 Nginx 就可以访问了

为什么我按照楼主步骤,反复试了几次,还是报错,完整日志如下:

 Information:2019/11/21, 10:02 PM - Compilation completed with 1 error and 0 warnings in 1s 271ms
Error:scalac: Error: assertion failed: 
  no extension method found for:
  method /:(pathString: String)java.nio.file.Path
 Candidates:

 Candidates (signatures normalized):
 " 
     while compiling: /Users/aaa/IdeaProjects/Gatling/TestGatling/src/test/scala/IDEPathHelper.scala
        during phase: globalPhase=erasure, enteringPhase=refchecks
     library version: version 2.13.1
    compiler version: version 2.13.1
  reconstructed args: -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/tools.jar:/Users/aaa/IdeaProjects/Gatling/TestGatling/target/classes:/Users/aaa/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.13.1.jar:/Users/aaa/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.13.1.jar:/Users/aaa/.ivy2/cache/org.scala-lang/scala-reflect/srcs/scala-reflect-2.13.1-sources.jar:/Users/aaa/.ivy2/cache/org.scala-lang/scala-library/srcs/scala-library-2.13.1-sources.jar:/Users/aaa/.m2/repository/io/gatling/highcharts/gatling-charts-highcharts/3.3.1/gatling-charts-highcharts-3.3.1.jar:/Users/aaa/.m2/repository/org/scala-lang/scala-library/2.12.10/scala-library-2.12.10.jar:/Users/aaa/.m2/repository/io/gatling/gatling-charts/3.3.1/gatling-charts-3.3.1.jar:/Users/aaa/.m2/repository/com/tdunning/t-digest/3.1/t-digest-3.1.jar:/Users/aaa/.m2/repository/io/gatling/gatling-http-client/3.3.1/gatling-http-client-3.3.1.jar:/Users/aaa/.m2/repository/io/gatling/gatling-netty-util/3.3.1/gatling-netty-util-3.3.1.jar:/Users/aaa/.m2/repository/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-resolver-dns/4.1.42.Final/netty-resolver-dns-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-codec-dns/4.1.42.Final/netty-codec-dns-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-transport-native-epoll/4.1.42.Final/netty-transport-native-epoll-4.1.42.Final-linux-x86_64.jar:/Users/aaa/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.42.Final/netty-transport-native-unix-common-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-tcnative-boringssl-static/2.0.26.Final/netty-tcnative-boringssl-static-2.0.26.Final.jar:/Users/aaa/.m2/repository/com/sun/activation/javax.activation/1.2.0/javax.activation-1.2.0.jar:/Users/aaa/.m2/repository/org/slf4j/slf4j-api/1.7.28/slf4j-api-1.7.28.jar:/Users/aaa/.m2/repository/com/typesafe/scala-logging/scala-logging_2.12/3.9.2/scala-logging_2.12-3.9.2.jar:/Users/aaa/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar:/Users/aaa/.m2/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar:/Users/aaa/.m2/repository/io/gatling/gatling-commons/3.3.1/gatling-commons-3.3.1.jar:/Users/aaa/.m2/repository/org/scala-lang/scala-reflect/2.12.10/scala-reflect-2.12.10.jar:/Users/aaa/.m2/repository/com/typesafe/config/1.4.0/config-1.4.0.jar:/Users/aaa/.m2/repository/io/suzaku/boopickle_2.12/1.3.1/boopickle_2.12-1.3.1.jar:/Users/aaa/.m2/repository/org/typelevel/spire-macros_2.12/0.16.2/spire-macros_2.12-0.16.2.jar:/Users/aaa/.m2/repository/com/softwaremill/quicklens/quicklens_2.12/1.4.12/quicklens_2.12-1.4.12.jar:/Users/aaa/.m2/repository/org/scala-lang/modules/scala-java8-compat_2.12/0.9.0/scala-java8-compat_2.12-0.9.0.jar:/Users/aaa/.m2/repository/com/eatthepath/fast-uuid/0.1/fast-uuid-0.1.jar:/Users/aaa/.m2/repository/io/gatling/gatling-app/3.3.1/gatling-app-3.3.1.jar:/Users/aaa/.m2/repository/io/gatling/gatling-core/3.3.1/gatling-core-3.3.1.jar:/Users/aaa/.m2/repository/com/typesafe/akka/akka-slf4j_2.12/2.5.26/akka-slf4j_2.12-2.5.26.jar:/Users/aaa/.m2/repository/org/simpleflatmapper/lightning-csv/8.0.3/lightning-csv-8.0.3.jar:/Users/aaa/.m2/repository/org/simpleflatmapper/sfm-util/8.0.3/sfm-util-8.0.3.jar:/Users/aaa/.m2/repository/com/github/ben-manes/caffeine/caffeine/2.8.0/caffeine-2.8.0.jar:/Users/aaa/.m2/repository/org/checkerframework/checker-qual/2.10.0/checker-qual-2.10.0.jar:/Users/aaa/.m2/repository/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar:/Users/aaa/.m2/repository/io/pebbletemplates/pebble/3.1.0/pebble-3.1.0.jar:/Users/aaa/.m2/repository/org/unbescape/unbescape/1.1.6.RELEASE/unbescape-1.1.6.RELEASE.jar:/Users/aaa/.m2/repository/org/scala-lang/modules/scala-parser-combinators_2.12/1.1.2/scala-parser-combinators_2.12-1.1.2.jar:/Users/aaa/.m2/repository/com/github/scopt/scopt_2.12/3.7.1/scopt_2.12-3.7.1.jar:/Users/aaa/.m2/repository/io/gatling/jsonpath_2.12/0.7.0/jsonpath_2.12-0.7.0.jar:/Users/aaa/.m2/repository/net/sf/saxon/Saxon-HE/9.9.1-5/Saxon-HE-9.9.1-5.jar:/Users/aaa/.m2/repository/org/jodd/jodd-lagarto/5.0.13/jodd-lagarto-5.0.13.jar:/Users/aaa/.m2/repository/org/jodd/jodd-core/5.0.13/jodd-core-5.0.13.jar:/Users/aaa/.m2/repository/org/jodd/jodd-log/5.0.13/jodd-log-5.0.13.jar:/Users/aaa/.m2/repository/io/burt/jmespath-jackson/0.4.0/jmespath-jackson-0.4.0.jar:/Users/aaa/.m2/repository/io/burt/jmespath-core/0.4.0/jmespath-core-0.4.0.jar:/Users/aaa/.m2/repository/io/gatling/gatling-http/3.3.1/gatling-http-3.3.1.jar:/Users/aaa/.m2/repository/org/scala-lang/modules/scala-xml_2.12/1.2.0/scala-xml_2.12-1.2.0.jar:/Users/aaa/.m2/repository/io/gatling/gatling-jms/3.3.1/gatling-jms-3.3.1.jar:/Users/aaa/.m2/repository/javax/jms/javax.jms-api/2.0.1/javax.jms-api-2.0.1.jar:/Users/aaa/.m2/repository/io/gatling/gatling-jdbc/3.3.1/gatling-jdbc-3.3.1.jar:/Users/aaa/.m2/repository/io/gatling/gatling-redis/3.3.1/gatling-redis-3.3.1.jar:/Users/aaa/.m2/repository/net/debasishg/redisclient_2.12/3.10/redisclient_2.12-3.10.jar:/Users/aaa/.m2/repository/org/apache/commons/commons-pool2/2.6.0/commons-pool2-2.6.0.jar:/Users/aaa/.m2/repository/io/gatling/gatling-graphite/3.3.1/gatling-graphite-3.3.1.jar:/Users/aaa/.m2/repository/org/hdrhistogram/HdrHistogram/2.1.11/HdrHistogram-2.1.11.jar:/Users/aaa/.m2/repository/io/gatling/gatling-recorder/3.3.1/gatling-recorder-3.3.1.jar:/Users/aaa/.m2/repository/org/scala-lang/modules/scala-swing_2.12/2.1.1/scala-swing_2.12-2.1.1.jar:/Users/aaa/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.10.0/jackson-databind-2.10.0.jar:/Users/aaa/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.0/jackson-annotations-2.10.0.jar:/Users/aaa/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.10.0/jackson-core-2.10.0.jar:/Users/aaa/.m2/repository/org/json4s/json4s-jackson_2.12/3.6.7/json4s-jackson_2.12-3.6.7.jar:/Users/aaa/.m2/repository/org/json4s/json4s-core_2.12/3.6.7/json4s-core_2.12-3.6.7.jar:/Users/aaa/.m2/repository/org/json4s/json4s-ast_2.12/3.6.7/json4s-ast_2.12-3.6.7.jar:/Users/aaa/.m2/repository/org/json4s/json4s-scalap_2.12/3.6.7/json4s-scalap_2.12-3.6.7.jar:/Users/aaa/.m2/repository/com/thoughtworks/paranamer/paranamer/2.8/paranamer-2.8.jar:/Users/aaa/.m2/repository/org/bouncycastle/bcpkix-jdk15on/1.64/bcpkix-jdk15on-1.64.jar:/Users/aaa/.m2/repository/org/bouncycastle/bcprov-jdk15on/1.64/bcprov-jdk15on-1.64.jar:/Users/aaa/.m2/repository/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar:/Users/aaa/.m2/repository/com/typesafe/akka/akka-actor_2.12/2.5.26/akka-actor_2.12-2.5.26.jar
  last tree to typer: TypeTree(class ListBuffer)
       tree position: line 4 of /Users/aaa/IdeaProjects/Gatling/TestGatling/src/test/scala/Recorder.scala
            tree tpe: scala.collection.mutable.ListBuffer[() => Unit]
              symbol: class ListBuffer in package mutable
   symbol definition: class ListBuffer[A] extends AbstractBuffer[A] with SeqOps[A,scala.collection.mutable.ListBuffer,scala.collection.mutable.ListBuffer[A]] with StrictOptimizedSeqOps[A,scala.collection.mutable.ListBuffer,scala.collection.mutable.ListBuffer[A]] with ReusableBuilder[A,List[A]] with IterableFactoryDefaults[A,scala.collection.mutable.ListBuffer] with DefaultSerializable (a ClassSymbol)
      symbol package: scala.collection.mutable
       symbol owners: class ListBuffer
           call site: object IDEPathHelper in package <empty>
== Source file context for tree position ==
     1 import io.gatling.recorder.GatlingRecorder
     2 import io.gatling.recorder.config.RecorderPropertiesBuilder
     3 
     4 object Recorder extends App {
     5 
     6   val props = new RecorderPropertiesBuilder()
     7     .simulationsFolder(IDEPathHelper.recorderSimulationsDirectory.toString)
java.lang.AssertionError: assertion failed: 
  no extension method found for:
  method /:(pathString: String)java.nio.file.Path
 Candidates:

 Candidates (signatures normalized):
 " 
     while compiling: /Users/aaa/IdeaProjects/Gatling/TestGatling/src/test/scala/IDEPathHelper.scala
        during phase: globalPhase=erasure, enteringPhase=refchecks
     library version: version 2.13.1
    compiler version: version 2.13.1
  reconstructed args: -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/tools.jar:/Users/aaa/IdeaProjects/Gatling/TestGatling/target/classes:/Users/aaa/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.13.1.jar:/Users/aaa/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.13.1.jar:/Users/aaa/.ivy2/cache/org.scala-lang/scala-reflect/srcs/scala-reflect-2.13.1-sources.jar:/Users/aaa/.ivy2/cache/org.scala-lang/scala-library/srcs/scala-library-2.13.1-sources.jar:/Users/aaa/.m2/repository/io/gatling/highcharts/gatling-charts-highcharts/3.3.1/gatling-charts-highcharts-3.3.1.jar:/Users/aaa/.m2/repository/org/scala-lang/scala-library/2.12.10/scala-library-2.12.10.jar:/Users/aaa/.m2/repository/io/gatling/gatling-charts/3.3.1/gatling-charts-3.3.1.jar:/Users/aaa/.m2/repository/com/tdunning/t-digest/3.1/t-digest-3.1.jar:/Users/aaa/.m2/repository/io/gatling/gatling-http-client/3.3.1/gatling-http-client-3.3.1.jar:/Users/aaa/.m2/repository/io/gatling/gatling-netty-util/3.3.1/gatling-netty-util-3.3.1.jar:/Users/aaa/.m2/repository/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-resolver-dns/4.1.42.Final/netty-resolver-dns-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-codec-dns/4.1.42.Final/netty-codec-dns-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-transport-native-epoll/4.1.42.Final/netty-transport-native-epoll-4.1.42.Final-linux-x86_64.jar:/Users/aaa/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.42.Final/netty-transport-native-unix-common-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-tcnative-boringssl-static/2.0.26.Final/netty-tcnative-boringssl-static-2.0.26.Final.jar:/Users/aaa/.m2/repository/com/sun/activation/javax.activation/1.2.0/javax.activation-1.2.0.jar:/Users/aaa/.m2/repository/org/slf4j/slf4j-api/1.7.28/slf4j-api-1.7.28.jar:/Users/aaa/.m2/repository/com/typesafe/scala-logging/scala-logging_2.12/3.9.2/scala-logging_2.12-3.9.2.jar:/Users/aaa/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar:/Users/aaa/.m2/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar:/Users/aaa/.m2/repository/io/gatling/gatling-commons/3.3.1/gatling-commons-3.3.1.jar:/Users/aaa/.m2/repository/org/scala-lang/scala-reflect/2.12.10/scala-reflect-2.12.10.jar:/Users/aaa/.m2/repository/com/typesafe/config/1.4.0/config-1.4.0.jar:/Users/aaa/.m2/repository/io/suzaku/boopickle_2.12/1.3.1/boopickle_2.12-1.3.1.jar:/Users/aaa/.m2/repository/org/typelevel/spire-macros_2.12/0.16.2/spire-macros_2.12-0.16.2.jar:/Users/aaa/.m2/repository/com/softwaremill/quicklens/quicklens_2.12/1.4.12/quicklens_2.12-1.4.12.jar:/Users/aaa/.m2/repository/org/scala-lang/modules/scala-java8-compat_2.12/0.9.0/scala-java8-compat_2.12-0.9.0.jar:/Users/aaa/.m2/repository/com/eatthepath/fast-uuid/0.1/fast-uuid-0.1.jar:/Users/aaa/.m2/repository/io/gatling/gatling-app/3.3.1/gatling-app-3.3.1.jar:/Users/aaa/.m2/repository/io/gatling/gatling-core/3.3.1/gatling-core-3.3.1.jar:/Users/aaa/.m2/repository/com/typesafe/akka/akka-slf4j_2.12/2.5.26/akka-slf4j_2.12-2.5.26.jar:/Users/aaa/.m2/repository/org/simpleflatmapper/lightning-csv/8.0.3/lightning-csv-8.0.3.jar:/Users/aaa/.m2/repository/org/simpleflatmapper/sfm-util/8.0.3/sfm-util-8.0.3.jar:/Users/aaa/.m2/repository/com/github/ben-manes/caffeine/caffeine/2.8.0/caffeine-2.8.0.jar:/Users/aaa/.m2/repository/org/checkerframework/checker-qual/2.10.0/checker-qual-2.10.0.jar:/Users/aaa/.m2/repository/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar:/Users/aaa/.m2/repository/io/pebbletemplates/pebble/3.1.0/pebble-3.1.0.jar:/Users/aaa/.m2/repository/org/unbescape/unbescape/1.1.6.RELEASE/unbescape-1.1.6.RELEASE.jar:/Users/aaa/.m2/repository/org/scala-lang/modules/scala-parser-combinators_2.12/1.1.2/scala-parser-combinators_2.12-1.1.2.jar:/Users/aaa/.m2/repository/com/github/scopt/scopt_2.12/3.7.1/scopt_2.12-3.7.1.jar:/Users/aaa/.m2/repository/io/gatling/jsonpath_2.12/0.7.0/jsonpath_2.12-0.7.0.jar:/Users/aaa/.m2/repository/net/sf/saxon/Saxon-HE/9.9.1-5/Saxon-HE-9.9.1-5.jar:/Users/aaa/.m2/repository/org/jodd/jodd-lagarto/5.0.13/jodd-lagarto-5.0.13.jar:/Users/aaa/.m2/repository/org/jodd/jodd-core/5.0.13/jodd-core-5.0.13.jar:/Users/aaa/.m2/repository/org/jodd/jodd-log/5.0.13/jodd-log-5.0.13.jar:/Users/aaa/.m2/repository/io/burt/jmespath-jackson/0.4.0/jmespath-jackson-0.4.0.jar:/Users/aaa/.m2/repository/io/burt/jmespath-core/0.4.0/jmespath-core-0.4.0.jar:/Users/aaa/.m2/repository/io/gatling/gatling-http/3.3.1/gatling-http-3.3.1.jar:/Users/aaa/.m2/repository/org/scala-lang/modules/scala-xml_2.12/1.2.0/scala-xml_2.12-1.2.0.jar:/Users/aaa/.m2/repository/io/gatling/gatling-jms/3.3.1/gatling-jms-3.3.1.jar:/Users/aaa/.m2/repository/javax/jms/javax.jms-api/2.0.1/javax.jms-api-2.0.1.jar:/Users/aaa/.m2/repository/io/gatling/gatling-jdbc/3.3.1/gatling-jdbc-3.3.1.jar:/Users/aaa/.m2/repository/io/gatling/gatling-redis/3.3.1/gatling-redis-3.3.1.jar:/Users/aaa/.m2/repository/net/debasishg/redisclient_2.12/3.10/redisclient_2.12-3.10.jar:/Users/aaa/.m2/repository/org/apache/commons/commons-pool2/2.6.0/commons-pool2-2.6.0.jar:/Users/aaa/.m2/repository/io/gatling/gatling-graphite/3.3.1/gatling-graphite-3.3.1.jar:/Users/aaa/.m2/repository/org/hdrhistogram/HdrHistogram/2.1.11/HdrHistogram-2.1.11.jar:/Users/aaa/.m2/repository/io/gatling/gatling-recorder/3.3.1/gatling-recorder-3.3.1.jar:/Users/aaa/.m2/repository/org/scala-lang/modules/scala-swing_2.12/2.1.1/scala-swing_2.12-2.1.1.jar:/Users/aaa/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.10.0/jackson-databind-2.10.0.jar:/Users/aaa/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.0/jackson-annotations-2.10.0.jar:/Users/aaa/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.10.0/jackson-core-2.10.0.jar:/Users/aaa/.m2/repository/org/json4s/json4s-jackson_2.12/3.6.7/json4s-jackson_2.12-3.6.7.jar:/Users/aaa/.m2/repository/org/json4s/json4s-core_2.12/3.6.7/json4s-core_2.12-3.6.7.jar:/Users/aaa/.m2/repository/org/json4s/json4s-ast_2.12/3.6.7/json4s-ast_2.12-3.6.7.jar:/Users/aaa/.m2/repository/org/json4s/json4s-scalap_2.12/3.6.7/json4s-scalap_2.12-3.6.7.jar:/Users/aaa/.m2/repository/com/thoughtworks/paranamer/paranamer/2.8/paranamer-2.8.jar:/Users/aaa/.m2/repository/org/bouncycastle/bcpkix-jdk15on/1.64/bcpkix-jdk15on-1.64.jar:/Users/aaa/.m2/repository/org/bouncycastle/bcprov-jdk15on/1.64/bcprov-jdk15on-1.64.jar:/Users/aaa/.m2/repository/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar:/Users/aaa/.m2/repository/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar:/Users/aaa/.m2/repository/com/typesafe/akka/akka-actor_2.12/2.5.26/akka-actor_2.12-2.5.26.jar
  last tree to typer: TypeTree(class ListBuffer)
       tree position: line 4 of /Users/aaa/IdeaProjects/Gatling/TestGatling/src/test/scala/Recorder.scala
            tree tpe: scala.collection.mutable.ListBuffer[() => Unit]
              symbol: class ListBuffer in package mutable
   symbol definition: class ListBuffer[A] extends AbstractBuffer[A] with SeqOps[A,scala.collection.mutable.ListBuffer,scala.collection.mutable.ListBuffer[A]] with StrictOptimizedSeqOps[A,scala.collection.mutable.ListBuffer,scala.collection.mutable.ListBuffer[A]] with ReusableBuilder[A,List[A]] with IterableFactoryDefaults[A,scala.collection.mutable.ListBuffer] with DefaultSerializable (a ClassSymbol)
      symbol package: scala.collection.mutable
       symbol owners: class ListBuffer
           call site: object IDEPathHelper in package <empty>
== Source file context for tree position ==
     1 import io.gatling.recorder.GatlingRecorder
     2 import io.gatling.recorder.config.RecorderPropertiesBuilder
     3 
     4 object Recorder extends App {
     5 
     6   val props = new RecorderPropertiesBuilder()
     7     .simulationsFolder(IDEPathHelper.recorderSimulationsDirectory.toString)
    at scala.reflect.internal.SymbolTable.throwAssertionError(SymbolTable.scala:170)
    at scala.tools.nsc.transform.ExtensionMethods.$anonfun$extensionMethod$1(ExtensionMethods.scala:53)
    at scala.tools.nsc.transform.ExtensionMethods.extensionMethod(ExtensionMethods.scala:48)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.preEraseNormalApply(Erasure.scala:1097)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.preEraseApply(Erasure.scala:1199)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.preErase(Erasure.scala:1209)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.transform(Erasure.scala:1328)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.transform(Erasure.scala:988)
    at scala.reflect.internal.Trees$ValDef.$anonfun$transform$4(Trees.scala:407)
    at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2625)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:37)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:32)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:24)
    at scala.reflect.internal.Trees$ValDef.transform(Trees.scala:406)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.transform(Erasure.scala:1340)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.transform(Erasure.scala:988)
    at scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2614)
    at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2612)
    at scala.reflect.internal.Trees$Template.transform(Trees.scala:517)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.$anonfun$transform$1(TypingTransformers.scala:47)
    at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2625)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:37)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:32)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.transform(Erasure.scala:1364)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.transform(Erasure.scala:988)
    at scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2587)
    at scala.reflect.internal.Trees$ClassDef.$anonfun$transform$2(Trees.scala:335)
    at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2625)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:37)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:32)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:24)
    at scala.reflect.internal.Trees$ClassDef.transform(Trees.scala:334)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.transform(Erasure.scala:1364)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.transform(Erasure.scala:988)
    at scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2614)
    at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2612)
    at scala.reflect.internal.Trees$PackageDef.$anonfun$transform$1(Trees.scala:316)
    at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2625)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:37)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:32)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:24)
    at scala.reflect.internal.Trees$PackageDef.transform(Trees.scala:316)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.$anonfun$transform$2(TypingTransformers.scala:49)
    at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2625)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:37)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:32)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.transform(Erasure.scala:1364)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer.transform(Erasure.scala:1374)
    at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:162)
    at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:36)
    at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:452)
    at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:397)
    at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1506)
    at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1490)
    at scala.tools.nsc.Global$Run.compileSources(Global.scala:1482)
    at scala.tools.nsc.Global$Run.compile(Global.scala:1614)
    at xsbt.CachedCompiler0.run(CompilerInterface.scala:130)
    at xsbt.CachedCompiler0.run(CompilerInterface.scala:105)
    at xsbt.CompilerInterface.run(CompilerInterface.scala:31)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sbt.internal.inc.AnalyzingCompiler.call(AnalyzingCompiler.scala:237)
    at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:111)
    at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:90)
    at org.jetbrains.jps.incremental.scala.local.IdeaIncrementalCompiler.compile(IdeaIncrementalCompiler.scala:40)
    at org.jetbrains.jps.incremental.scala.local.LocalServer.compile(LocalServer.scala:30)
    at org.jetbrains.jps.incremental.scala.remote.Main$.make(Main.scala:83)
    at org.jetbrains.jps.incremental.scala.remote.Main$.nailMain(Main.scala:26)
    at org.jetbrains.jps.incremental.scala.remote.Main.nailMain(Main.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.martiansoftware.nailgun.NGSession.run(NGSession.java:319)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册