如何生成可执行Jar运行Gatling gRPC负载测试?或编写主类调用测试
Gatling gRPC负载测试可执行Jar包生成方案
问题1:能否生成可执行Jar包运行负载测试脚本?
当然可以。Gatling支持通过可执行Jar包运行指定的Simulation类,只要配置好打包逻辑并指定正确的主类,就能生成独立运行的测试包。
问题2:解决主类缺失问题的具体步骤
你用sbt assembly或sbt test:assembly失败,核心原因是未指定主类,且测试代码的依赖未正确纳入打包产物。按以下步骤解决:
1. 确保sbt-assembly插件已配置
检查project/plugins.sbt,确保添加了assembly插件(版本可根据你的sbt版本调整):
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.2.0")
2. 编写自定义启动主类
在src/main/scala下创建启动类,直接调用Gatling的入口逻辑,指定你的newSimulation类:
import io.gatling.app.Gatling import io.gatling.core.config.GatlingPropertiesBuilder object GatlingRunner extends App { val config = new GatlingPropertiesBuilder() // 替换成你的Simulation类全限定名,比如类在load包下就是"load.newSimulation" .simulationClass("load.newSimulation") .build() Gatling.fromMap(config) }
3. 配置sbt打包规则
在build.sbt中添加assembly配置,指定主类并处理依赖冲突:
// 处理依赖合并冲突,避免打包时出现重复文件报错 assemblyMergeStrategy in assembly := { case PathList("META-INF", _*) => MergeStrategy.discard case _ => MergeStrategy.first } // 指定自定义主类的全限定名 mainClass in assembly := Some("GatlingRunner") lazy val root = (project in file(".")) .settings( name := "gatling-grpc-test", scalaVersion := "2.13.10", // 匹配你项目的Scala版本 // 保留原项目的所有依赖配置,比如gatling-grpc、gatling-core等 libraryDependencies ++= Seq( // 原项目的依赖项示例: // "io.gatling" % "gatling-core" % "3.9.5", // "io.gatling" % "gatling-grpc" % "3.9.5" ) )
4. 执行打包命令
运行以下命令生成可执行Jar:
sbt assembly
5. 运行测试Jar包
打包完成后,在target/scala-<你的Scala版本>目录下找到Jar文件,运行命令:
java -jar target/scala-2.13/gatling-grpc-test-assembly-<版本号>.jar
替代方案:无需自定义主类
如果不想写自定义主类,也可以直接用Gatling官方主类,打包时不指定主类,运行时通过参数指定Simulation:
# 打包(此时不需要在build.sbt中指定mainClass) sbt test:assembly # 运行,替换成你的Jar路径和Simulation类名 java -cp target/scala-2.13/gatling-grpc-test-assembly-<版本号>.jar io.gatling.app.Gatling -s load.newSimulation
内容的提问来源于stack exchange,提问作者sivadas j
相关产品推荐
相关产品推荐

