加特林载荷试验中的参数化仿真

时间:2017-03-21 16:42:35

标签: scala gatling

我希望能够将参数传递给Gatling Simulation。我试过这个,但它失败了。 (问题似乎是由于内部阶级)

object PerfTestManager extends App {
    run("trymain", 10, 2, 3);
    def run(dcName: String, minutes: Int, threads: Int, maxThreads: Int) = {
         class BasicSimul extends Simulation {
            val scn = scenario("a").feed(QueryFeeder.myfeeder)
                    .exec(http("test").get(s => SolrEnv.getPath(s("params").validate[String].get)));
            private val hostport = SolrEnv.hostport

            val httpConf = http.baseURL(hostport)
                        .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
                        .acceptEncodingHeader("gzip, deflate")
                        .acceptLanguageHeader("en-US,en;q=0.5")
                        .userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0");
            setUp(scn.inject(atOnceUsers(threads)).protocols(httpConf))

        }

        val simClass = classOf[BasicSimulation].getName
        val props = new GatlingPropertiesBuilder
        props.dataDirectory(Paths2.dataDirectory.toString)
        props.resultsDirectory(Paths2.resultsDirectory.toString)
        props.bodiesDirectory(Paths2.bodiesDirectory.toString)
        props.binariesDirectory(Paths2.mavenBinariesDirectory.toString)

        props.simulationClass(simClass)
        props.runDescription("runonce")
        props.outputDirectoryBaseName("0")
        Gatling.fromMap(props.build) // <-- failing line
    }
}

我的目的是最终运行一个web服务,该服务将用于从UI安排和参数化模拟。虽然我有一些我可以尝试的替代方案,但更接近上述代码的东西似乎最容易维护。上面的代码失败了,因为gatling无法创建BasicSimul

的实例
Caused by: java.lang.NoSuchMethodException: computerdatabase.PerfTestManager$BasicSimul$1.<init>()
    at java.lang.Class.getConstructor0(Class.java:3082)
    at java.lang.Class.newInstance(Class.java:412)

我也尝试将参数传递给BasicSimulation,但是,框架需要一个默认的构造函数,因此也不成功。

我的替代方案是在object

中声明以下内容

val q =新队列

调度webservice将根据参数排队新的TestConfig,并BasicSimulationdequeue()获取其TestConfig。同步构造可用于避免竞争条件。

1 个答案:

答案 0 :(得分:0)

我认为你可以通过创建一个简单的Scala类来更好地实现上述行为。基本上你可以创建一个对象

object Configuration{
 val file = getClass.getResource("data/config.properties").getFile()
 val prop = new Properties()
 prop.load(new FileInputStream(file))
 ENV =prop.getProperty("env");
}

现在进入模拟课程

class TestSimulation extends Simulation {
   val ALL_STOP_STATUS = Configuration.ENV;
 }

同样专注于使用路径变量