【问题标题】:Durable subscription ID cannot be read by CSV Data Set Config in JMeterJMeter 中的 CSV 数据集配置无法读取持久订阅 ID
【发布时间】:2017-01-03 02:11:03
【问题描述】:

我需要通过读取要从包含从 1 到 10 的整数值的 csv 文件设置的持久订阅 ID,将 10 个不同的持久订阅者添加到消息代理中。但是,JMeter 未能读取该值,而是尝试了将订阅 ID 设置为 ${id}。下面是我在JMeter中做的配置。

请注意,当我通过用户定义的变量尝试相同的操作时,它将获取变量的值并成功创建持久订阅。

JMeter 日志如下。

2016/08/29 17:56:39 INFO  - jmeter.engine.StandardJMeterEngine: Running the test! 
2016/08/29 17:56:39 INFO  - jmeter.samplers.SampleEvent: List of sample_variables: [] 
2016/08/29 17:56:39 INFO  - jmeter.gui.util.JMeterMenuBar: setRunning(true,*local*) 
2016/08/29 17:56:39 INFO  - jmeter.engine.StandardJMeterEngine: Starting ThreadGroup: 1 : DueTopic1 - Node 1- Sub 1 
2016/08/29 17:56:39 INFO  - jmeter.engine.StandardJMeterEngine: Starting 1 threads for group DueTopic1 - Node 1- Sub 1. 
2016/08/29 17:56:39 INFO  - jmeter.engine.StandardJMeterEngine: Thread will continue on error 
2016/08/29 17:56:39 INFO  - jmeter.threads.ThreadGroup: Starting thread group number 1 threads 1 ramp-up 1 perThread 1000.0 delayedStart=false 
2016/08/29 17:56:39 INFO  - jmeter.threads.ThreadGroup: Started thread group number 1 
2016/08/29 17:56:39 INFO  - jmeter.engine.StandardJMeterEngine: All thread groups have been started 
2016/08/29 17:56:39 INFO  - jmeter.threads.JMeterThread: Thread started: DueTopic1 - Node 1- Sub 1 1-1 
2016/08/29 17:56:39 ERROR - jmeter.protocol.jms.client.ReceiveSubscriber: Error during close:  javax.jms.JMSException: Error closing connection: org.wso2.andes.AMQConnectionClosedException: Error: Subscription ID: carbon:${id} cannot contain any of following symbols ~!@#;%^*()+={}|<>"', and space. " / " can only use as the tenant separator
 [error code 541: internal error]
    at org.wso2.andes.client.AMQConnection.doClose(AMQConnection.java:971)
    at org.wso2.andes.client.AMQConnection.close(AMQConnection.java:897)
    at org.wso2.andes.client.AMQConnection.close(AMQConnection.java:888)
    at org.wso2.andes.client.AMQConnection.close(AMQConnection.java:883)
    at org.apache.jmeter.protocol.jms.Utils.close(Utils.java:78)
    at org.apache.jmeter.protocol.jms.client.ReceiveSubscriber.close(ReceiveSubscriber.java:359)
    at org.apache.jmeter.protocol.jms.client.ReceiveSubscriber.<init>(ReceiveSubscriber.java:255)
    at org.apache.jmeter.protocol.jms.client.ReceiveSubscriber.<init>(ReceiveSubscriber.java:115)
    at org.apache.jmeter.protocol.jms.sampler.SubscriberSampler.initReceiveClient(SubscriberSampler.java:126)
    at org.apache.jmeter.protocol.jms.sampler.SubscriberSampler.threadStarted(SubscriberSampler.java:298)
    at org.apache.jmeter.threads.JMeterThread$ThreadListenerTraverser.addNode(JMeterThread.java:647)
    at org.apache.jorphan.collections.HashTree.traverseInto(HashTree.java:996)
    at org.apache.jorphan.collections.HashTree.traverse(HashTree.java:978)
    at org.apache.jmeter.threads.JMeterThread.threadStarted(JMeterThread.java:616)
    at org.apache.jmeter.threads.JMeterThread.initRun(JMeterThread.java:604)
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:237)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.wso2.andes.AMQConnectionClosedException: Error: Subscription ID: carbon:${id} cannot contain any of following symbols ~!@#;%^*()+={}|<>"', and space. " / " can only use as the tenant separator
 [error code 541: internal error]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.wso2.andes.AMQException.cloneForCurrentThread(AMQException.java:110)
    at org.wso2.andes.client.protocol.AMQProtocolHandler.writeCommandFrameAndWaitForReply(AMQProtocolHandler.java:640)
    at org.wso2.andes.client.protocol.AMQProtocolHandler.syncWrite(AMQProtocolHandler.java:676)
    at org.wso2.andes.client.protocol.AMQProtocolHandler.closeConnection(AMQProtocolHandler.java:707)
    at org.wso2.andes.client.AMQConnectionDelegate_8_0.closeConnection(AMQConnectionDelegate_8_0.java:61)
    at org.wso2.andes.client.AMQConnection.doClose(AMQConnection.java:955)
    ... 16 more
Caused by: org.wso2.andes.AMQConnectionClosedException: Error: Subscription ID: carbon:${id} cannot contain any of following symbols ~!@#;%^*()+={}|<>"', and space. " / " can only use as the tenant separator
 [error code 541: internal error]
    at org.wso2.andes.client.handler.ConnectionCloseMethodHandler.methodReceived(ConnectionCloseMethodHandler.java:91)
    at org.wso2.andes.client.handler.ClientMethodDispatcherImpl.dispatchConnectionClose(ClientMethodDispatcherImpl.java:192)
    at org.wso2.andes.framing.amqp_0_91.ConnectionCloseBodyImpl.execute(ConnectionCloseBodyImpl.java:140)
    at org.wso2.andes.client.state.AMQStateManager.methodReceived(AMQStateManager.java:111)
    at org.wso2.andes.client.protocol.AMQProtocolHandler.methodBodyReceived(AMQProtocolHandler.java:517)
    at org.wso2.andes.client.protocol.AMQProtocolSession.methodFrameReceived(AMQProtocolSession.java:467)
    at org.wso2.andes.framing.AMQMethodBodyImpl.handle(AMQMethodBodyImpl.java:96)
    at org.wso2.andes.client.protocol.AMQProtocolHandler$2.run(AMQProtocolHandler.java:468)
    at org.wso2.andes.pool.Job.processAll(Job.java:109)
    at org.wso2.andes.pool.Job.run(Job.java:153)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    ... 1 more

2016/08/29 17:56:39 ERROR - jmeter.protocol.jms.sampler.SubscriberSampler: Could not initialise client javax.jms.JMSException: Error registering consumer: org.wso2.andes.AMQConnectionClosedException: Error: Subscription ID: carbon:${id} cannot contain any of following symbols ~!@#;%^*()+={}|<>"', and space. " / " can only use as the tenant separator
 [error code 541: internal error]
    at org.wso2.andes.client.AMQSession$6.execute(AMQSession.java:2143)
    at org.wso2.andes.client.AMQSession$6.execute(AMQSession.java:2086)
    at org.wso2.andes.client.AMQConnectionDelegate_8_0.executeRetrySupport(AMQConnectionDelegate_8_0.java:324)
    at org.wso2.andes.client.AMQConnection$3.run(AMQConnection.java:655)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.wso2.andes.client.AMQConnection.executeRetrySupport(AMQConnection.java:652)
    at org.wso2.andes.client.failover.FailoverRetrySupport.execute(FailoverRetrySupport.java:102)
    at org.wso2.andes.client.AMQSession.createConsumerImpl(AMQSession.java:2084)
    at org.wso2.andes.client.AMQSession.createConsumer(AMQSession.java:1072)
    at org.wso2.andes.client.AMQSession.createDurableSubscriber(AMQSession.java:1226)
    at org.wso2.andes.client.AMQSession.createDurableSubscriber(AMQSession.java:1121)
    at org.apache.jmeter.protocol.jms.client.ReceiveSubscriber.createSubscriber(ReceiveSubscriber.java:284)
    at org.apache.jmeter.protocol.jms.client.ReceiveSubscriber.<init>(ReceiveSubscriber.java:239)
    at org.apache.jmeter.protocol.jms.client.ReceiveSubscriber.<init>(ReceiveSubscriber.java:115)
    at org.apache.jmeter.protocol.jms.sampler.SubscriberSampler.initReceiveClient(SubscriberSampler.java:126)
    at org.apache.jmeter.protocol.jms.sampler.SubscriberSampler.threadStarted(SubscriberSampler.java:298)
    at org.apache.jmeter.threads.JMeterThread$ThreadListenerTraverser.addNode(JMeterThread.java:647)
    at org.apache.jorphan.collections.HashTree.traverseInto(HashTree.java:996)
    at org.apache.jorphan.collections.HashTree.traverse(HashTree.java:978)
    at org.apache.jmeter.threads.JMeterThread.threadStarted(JMeterThread.java:616)
    at org.apache.jmeter.threads.JMeterThread.initRun(JMeterThread.java:604)
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:237)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.wso2.andes.AMQConnectionClosedException: Error: Subscription ID: carbon:${id} cannot contain any of following symbols ~!@#;%^*()+={}|<>"', and space. " / " can only use as the tenant separator
 [error code 541: internal error]
    at org.wso2.andes.client.handler.ConnectionCloseMethodHandler.methodReceived(ConnectionCloseMethodHandler.java:91)
    at org.wso2.andes.client.handler.ClientMethodDispatcherImpl.dispatchConnectionClose(ClientMethodDispatcherImpl.java:192)
    at org.wso2.andes.framing.amqp_0_91.ConnectionCloseBodyImpl.execute(ConnectionCloseBodyImpl.java:140)
    at org.wso2.andes.client.state.AMQStateManager.methodReceived(AMQStateManager.java:111)
    at org.wso2.andes.client.protocol.AMQProtocolHandler.methodBodyReceived(AMQProtocolHandler.java:517)
    at org.wso2.andes.client.protocol.AMQProtocolSession.methodFrameReceived(AMQProtocolSession.java:467)
    at org.wso2.andes.framing.AMQMethodBodyImpl.handle(AMQMethodBodyImpl.java:96)
    at org.wso2.andes.client.protocol.AMQProtocolHandler$2.run(AMQProtocolHandler.java:468)
    at org.wso2.andes.pool.Job.processAll(Job.java:109)
    at org.wso2.andes.pool.Job.run(Job.java:153)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    ... 1 more

2016/08/29 17:56:39 INFO  - jmeter.services.FileServer: Stored: training.csv 
2016/08/29 17:56:39 INFO  - jmeter.threads.JMeterThread: Thread is done: DueTopic1 - Node 1- Sub 1 1-1 
2016/08/29 17:56:39 INFO  - jmeter.threads.JMeterThread: Thread finished: DueTopic1 - Node 1- Sub 1 1-1 
2016/08/29 17:56:39 INFO  - jmeter.engine.StandardJMeterEngine: Notifying test listeners of end of test 
2016/08/29 17:56:39 INFO  - jmeter.services.FileServer: Close: training.csv 
2016/08/29 17:56:39 INFO  - jmeter.protocol.jms.client.InitialContextFactory: InitialContextFactory.close() called and Context instances cleaned up 
2016/08/29 17:56:39 INFO  - jmeter.gui.util.JMeterMenuBar: setRunning(false,*local*) 

【问题讨论】:

  • 你把 CSV 数据集配置放在哪里了?
  • 如第一幅图所示 csv 文件位于主目录中。 CSV 文件是可访问的,因为我发布了一条消息,其正文由同一个 CSV 文件设置
  • 是的,但是在您的测试计划中,您将组件放在哪里?
  • 我在测试计划下添加了CSV数据集配置作为第一项,然后是线程组
  • 插入线程组...

标签: jmeter jms messagebroker jms-topic durable-subscription


【解决方案1】:

确保 csv 数据集配置放置在正确的位置。最好在线程组下。

此外,如果它无法从 csv 文件中读取值,您应该会看到 jmeter.log 文件中记录了一些错误,或者如果您在 JMeter UI 上启用了日志。如果它说与 csv 文件相关的内容,那将帮助您进一步调试。通常将 csv 文件保存在 jmx 所在的同一文件夹中,并在 CSV 数据集配置中提及 filename.csv。

【讨论】:

  • 通过将csv放置在线程组中进行了尝试,结果仍然相同。我已将问题附在 JMeter 日志中。
  • 我没有看到日志中加载了 CSV 文件。您可以尝试将您的 csv 数据集配置添加为 JMS 采样器的子项吗?
  • csv 文件已加载 - 2016/08/29 17:56:39 INFO - jmeter.services.FileServer: Stored: training.csv
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 2020-10-30
  • 1970-01-01
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多