【问题标题】:Load testing AWS Kinesis stream with JMeter error: unable to resolve class com.amazonaws.services.kinesis负载测试带有 JMeter 错误的 AWS Kinesis 流:无法解析类 com.amazonaws.services.kinesis
【发布时间】:2019-01-31 17:15:36
【问题描述】:

我正在尝试将 AWS-SDK 和 Kinesis Client 库与 JMeter 一起使用来生成记录以放入我的 Kinesis 流中以进行性能测试。我的问题是 JMeter 无法识别能够从我的代码中调用它们的库。我不知道接下来要解决什么问题。

安装了 JMeter 5.0(我尝试使用 4.0 版也遇到同样的问题)和 Java 8。

$ java -version
java version "1.8.0_202-ea"
Java(TM) SE Runtime Environment (build 1.8.0_202-ea-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b03, mixed mode)

将 AWS 库的 JAR 文件放在我的 JMeter 安装的 lib 文件夹中(也尝试了 lib/ext):

- amazon-kinesis-client-2.1.0.jar
- aws-java-sdk-1.11.490.jar
- aws-sdk-java-2.3.10-SNAPSHOT.jar
- aws-sdk-java-aws-core-2.3.10-SNAPSHOT.jar
- aws-sdk-java-kinesis-2.3.10-SNAPSHOT.jar
- aws-sdk-java-sdk-core-2.3.10-SNAPSHOT.jar

(也根据另一篇文章添加了这三个 - 不确定它们是否真的需要)

- jackson-annotations-2.9.8.jar
- jackson-core-2.9.8.jar
- jackson-databind-2.9.8.jar

使用 Groovy 代码的 JSR223 采样器(基于其他示例):

import groovy.json.*
import groovy.json.JsonBuilder
import groovy.json.JsonOutput

import com.amazonaws.AmazonClientException
import com.amazonaws.AmazonServiceException
import com.amazonaws.auth.AWSCredentials
import com.amazonaws.auth.profile.ProfileCredentialsProvider
import com.amazonaws.services.kinesis.AmazonKinesisClient
import com.amazonaws.services.kinesis.model.CreateStreamRequest
import com.amazonaws.services.kinesis.model.DescribeStreamRequest
import com.amazonaws.services.kinesis.model.DescribeStreamResult
import com.amazonaws.services.kinesis.model.ListStreamsRequest
import com.amazonaws.services.kinesis.model.ListStreamsResult
import com.amazonaws.services.kinesis.model.PutRecordRequest
import com.amazonaws.services.kinesis.model.PutRecordResult
import com.amazonaws.services.kinesis.model.ResourceNotFoundException
import com.amazonaws.services.kinesis.model.StreamDescription

    class AmazonKinesisRecordProducerSample {

         def kinesis

        def init() {

            AWSCredentials credentials = null
              credentials = new ProfileCredentialsProvider().getCredentials()
              kinesis = new AmazonKinesisClient(credentials)         
        }    
    }

    def amazonKinesisRecordProducerSample= new AmazonKinesisRecordProducerSample() 
    amazonKinesisRecordProducerSample.init()
    def Environment = vars.get("Environment") //as String
    def AWS_Region = vars.get("AWS_Region") //as String

    def myStreamName="stream123-" + Environment + "-" + AWS_Region

        def jsondata = new JsonBuilder()
        jsondata {
            <VARIOUS JSON DATA ADDED>
        }
        def data=jsondata.toPrettyString()
        log.info("jsondata: " + data)
        def partitionkey="<PARTITION KEY>"
        def putRecordRequest = new PutRecordRequest()
        putRecordRequest.setStreamName(myStreamName)
        putRecordRequest.setData(ByteBuffer.wrap(String.valueOf(data).getBytes()))
        putRecordRequest.setPartitionKey(partitionkey)
        def putRecordResult = new PutRecordResult()
        putRecordResult = amazonKinesisRecordProducerSample.kinesis.putRecord(putRecordRequest)
        log.info("Successfully put record, partition key : %s, ShardID : %s, SequenceNumber : %s.\n",
                    putRecordRequest.getPartitionKey(),
                    putRecordResult.getShardId(),
                    putRecordResult.getSequenceNumber())

对于每个 com.amazonaws,我都会收到此错误。* 我尝试导入:

Script1.groovy: 14: unable to resolve class com.amazonaws.services.kinesis.AmazonKinesisClient
 @ line 14, column 1.
   import com.amazonaws.services.kinesis.AmazonKinesisClient

供参考 How to put 25k record to kinesis stream and Test tool to acknowledge itUsing HTTP Request of Jmeter to put records into Amazon Kinesis

【问题讨论】:

  • 您能找到解决方案吗?

标签: jmeter aws-sdk performance-testing load-testing amazon-kinesis


【解决方案1】:

要解析com.amazonaws.services.kinesis 类,您可以:

  1. AWS SDK for Java 1.11.0 删除aws-java-sdk-1.11.490.jarJMeter\lib
  2. 重启 JMeter

另外,请注意

JMETER_HOME/lib/ext 用于 JMeter 组件和插件
其他 jars(例如 JDBC、JMS 实现和 JMeter 代码所需的任何其他支持库)应放在 JMETER_HOME/lib 目录中 - 而不是 lib/ext 目录中,或添加到 user.classpath

【讨论】:

  • 谢谢 - 我确实尝试了 lib 目录中的 jar 文件,但无济于事。我也试过你提到的那个(aws-java-sdk-1.11.490.jar),它也没有改变结果(我在上面的描述中添加了这个)
  • 忘记问了 - 将 aws-java-sdk-1.11.490.jar 放入 JMeter\lib 后是否重新启动了 JMeter?
  • ^ 是的,我重新启动了 Jmeter
  • 在第 1 步和第 2 步之后,错误消息是否保持不变?因为可能有可能出现另一个例外。
  • 如前所述,我尝试了提供的所有建议,但仍然得到相同的响应 - 它没有正确找到库。还有其他可以尝试的想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 2018-09-28
  • 2012-07-29
  • 1970-01-01
  • 2017-11-26
  • 2018-05-28
  • 1970-01-01
相关资源
最近更新 更多