scala - 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)
}
我希望根据我的场景的准备/之前步骤在我的馈线中有数据。但是,我似乎得到了我之前运行的数据,这意味着在前一步更新数据之前正在初始化馈线数据。
如何使用新数据而不是数据库中已有的数据?
解决方案
我认为,如果您在当前位置定义馈线,但在“之前”块中对其进行初始化,它应该可以工作。
目前,您正在加载类时初始化并运行 feeder 查询 - 这是在执行任何操作(包括 before 块)之前。
推荐阅读
- java - 为android中的不同页面重用相同的按钮
- dart - Flutter - 从其他小部件调用 setState()
- java - 我完全迷失在这个刽子手游戏中
- javascript - 使用 contentType 发送的 Java 字节数组:application/octetstream 丢失负字节值
- python - Matplotlib 底图:离线地图
- nativescript - Nativescript 环境值获取布尔值或未定义值。
- vb.net - 不能在文本框中输入超过 9 个数字或删除所有输入的数字
- sql-server - 参数化 SQL 存储过程 Excel Get&Transform
- php - RewriteCond 查询字符串以清除 URL
- php - 旧 mysql 函数的 PDO 等价物,如 fetch assoc