首页 > 解决方案 > Jdbc Feeder 使用步骤前在模拟中创建的数据

问题描述

我正在尝试制作一个基于在场景的前一步中创建的 jdbc 数据的馈线。我无法在馈线中获取正确的数据。

package com.testing

import com.testing.config.Config
import io.gatling.core.Predef._
import io.gatling.core.Predef.Simulation
import io.gatling.core.feeder.SourceFeederBuilder
import io.gatling.jdbc.Predef.jdbcFeeder

object PostgresDb {

  def prepareData() {
   // postgress data generation here
  }

  def emptyDatabase() {
   // postgress truncate table
  }
}

class MyFeeder {
  private[this] val databaseConfig: Config.DatabaseConfig = Config.databaseConfig

  // Database feeder
  val dbData : SourceFeederBuilder[Any]
  = jdbcFeeder( databaseConfig.url
    , databaseConfig.username
    , databaseConfig.password
    , "SELECT \"Id\" FROM test.\"Ids\" ORDER BY random()"
  ).circular
}


class Experiment extends Simulation {

  before{ PostgresDb.emptyDatabase()
          PostgresDb.prepareData() }

  val lazyFeeder = new MyFeeder

  Class.forName("org.postgresql.Driver")

  val scn = scenario("Demo").feed(lazyFeeder.dbData).
            exec(session => {
                    println("Id: " + session("Id").as[String])
                    session }).inject(atOnceUsers(1))
  setUp(scn)

}

我希望根据我的场景的准备/之前步骤在我的馈线中有数据。但是,我似乎得到了我之前运行的数据,这意味着在前一步更新数据之前正在初始化馈线数据。

如何使用新数据而不是数据库中已有的数据?

标签: scalagatling

解决方案


我认为,如果您在当前位置定义馈线,但在“之前”块中对其进行初始化,它应该可以工作。

目前,您正在加载类时初始化并运行 feeder 查询 - 这是在执行任何操作(包括 before 块)之前。


推荐阅读