使用Gatling进行Oracle AQ负载测试

时间:2015-03-17 09:57:24

标签: oracle jms performance-testing gatling

我想设置一个Gatling测试用例,将消息放在Oracle AQ上。但我不知道如何设置以下内容:

val jmsConfig = jms
    .connectionFactoryName(???)
    .url("tcp://localhost:10002")
    .credentials("user", "secret")
    .contextFactory(???)
    .listenerCount(1)
    .usePersistentDeliveryMode

什么是连接工厂名称以及上下文工厂是什么?

2 个答案:

答案 0 :(得分:1)

" contextFactory"是ContextFactory的类名。 Doc似乎说明了它是" oracle.jms.AQjmsFactory"。

" connectionFactoryName"是用于JNDI查找的密钥。 Doc again似乎表明它已经" cn = OracleDBConnections"。

答案 1 :(得分:1)

我设法使用 oracle.jms.AQjmsInitialContextFactory让它工作。上面提到的 oracle.jms.AQjmsFactory 不是InitialContextFactory所以不行。

确保为要找到的AQjmsInitialContextFactory添加至少版本11+的Oracle AQ依赖项。

您的数据库用户当然应具有正确的权限才能将消息插入队列(表)。

Gatling希望您有请求 - 回复语义,因此它将等待收到回复。我实际上想在指定的时间段后中止等待回复,但我不知道如何做到这一点。所以,如果有人知道如何...请告诉我: - )

<强> MySimulation.scala

val jmsConfig = jms
    .connectionFactoryName("ConnectionFactory") // MUST!!!! be called ConnectionFactory, the AQjmsFactory expects this naming convention!
    .url("jdbc:oracle:thin:@host:1521:SID")
    .credentials("user", "password")
    .contextFactory("oracle.jms.AQjmsInitialContextFactory")
    .listenerCount(1)
    .usePersistentDeliveryMode

// TODO check how to set a timeout on the reply
val jmsScenario = scenario("JMS DSL test")
  .repeat(1) {
    exec(
      jms("req reply testing")
        .reqreply
        .queue("AQ_ADMIN.QUEUE_NAME")
        .textMessage("some message")
        .check(simpleCheck(checkBodyTextCorrect))
    )
}

def checkBodyTextCorrect(m: Message) = {
    // this assumes that the service just does an "uppercase" transform on the text
    m match {
        case tm: TextMessage => tm.getText == "text that should be in the reply message"
        case _ => false
    }
} 

setUp(jmsScenario.inject(atOnceUsers(1)).protocols(jmsConfig));

<强> jndi.properties

我必须将jndi.properties添加到类路径中:

db_url=jdbc:oracle:thin:@host:1521:SID

<强>的pom.xml

依赖关系(maven):

<dependency>
    <groupId>oracle</groupId>
    <artifactId>aqapi</artifactId>
    <version>11.2.0.3</version>
</dependency>
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>11.2.0.2.0</version>
</dependency>
<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>jta</artifactId>
    <version>1.1</version>
</dependency>