JMeter 脚本中的 S3 访问

5 groovy jmeter beanshell amazon-web-services

我正在尝试从 S3 存储桶获取文件作为 JMeter 测试的设置线程组的一部分,并且 JSR223 采样器中有以下 Groovy 脚本:

import java.io.IOException
import java.io.InputStream
import java.util.Properties

import com.amazonaws.services.s3.AmazonS3
import com.amazonaws.services.s3.AmazonS3ClientBuilder
import com.amazonaws.services.s3.model.GetObjectRequest
import com.amazonaws.services.s3.model.S3Object
import com.amazonaws.auth.BasicAWSCredentials
import com.amazonaws.auth.AWSStaticCredentialsProvider
import com.amazonaws.services.s3.S3CredentialsProviderChain

def awsAccessKey = "my_key"
def awsSecretAccessKey = "my_secret_key"
System.setProperty("aws.accessKeyId", awsAccessKey)
System.setProperty("aws.secretKey", awsSecretAccessKey)

def awsCreds = new BasicAWSCredentials(awsAccessKey, awsSecretAccessKey)
def s3Client = AmazonS3ClientBuilder.standard()
                .withRegion("us-west-2")
                .build()
def s3Object = s3Client.getObject(new GetObjectRequest("bucket-name", "filename"))
def is = s3Object.getObjectContent()
Run Code Online (Sandbox Code Playgroud)

当我使用 .withCredentials(awsCreds) 和设置系统属性时,代码都会抛出以下内容:

java.lang.NoClassDefFoundError: Could not initialize class com.amazonaws.services.s3.S3CredentialsProviderChain
Run Code Online (Sandbox Code Playgroud)

我还将相同的代码转换为以下 Beanshell Sampler:

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.auth.BasicAWSCredentials;

String awsAccessKey = "my_key";
String awsSecretAccessKey = "my_secret_key";
System.setProperty("aws.accessKeyId", awsAccessKey);
System.setProperty("aws.secretKey", awsSecretAccessKey);

BasicAWSCredentials awsCreds = new BasicAWSCredentials(awsAccessKey, awsSecretAccessKey);
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion("us-west-2").build();
S3Object s3Object = s3Client.getObject(new GetObjectRequest("bucket-name", "filename"));
InputStream is = s3Object.getObjectContent();
Run Code Online (Sandbox Code Playgroud)

然而,这会导致以下结果:

org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval    
Sourced file: inline evaluation of: ``import java.io.IOException; import java.io.InputStream; import java.util.Propert . . . '' : Typed variable declaration : Method Invocation AmazonS3ClientBuilder.standard
Run Code Online (Sandbox Code Playgroud)

当我将相同的代码放入测试 Java 类时,它运行没有任何问题。我的 jmeter/lib 中有 aws-java-sdk-1.11.160.jar 和 aws-java-sdk-core-1.11.160.jar ,所以我不认为它缺少依赖项。我还缺少其他东西吗?

use*_*900 0

aws sdk java中它指出:

要使用 SDK,请将 lib 和第三方目录的完整路径添加到构建文件中的依赖项中,并将它们添加到 java CLASSPATH 中以运行代码。