选择 AWS s3主要有三个原因: 经济性、速度和可靠性。在这里,学习如何使用 Groovy 将文件上传到 JMeter 中的 AWS S3
我使用我的个人 AWS s3来存储我所有的个人和机密文件。选择 AWS s3主要有三个原因: 经济性、速度和可靠性。如果您正在使用 AWS 云,那么 s3的使用是不可避免的。S3在冷热存储过程中起着关键作用。有时您需要通过性能测试脚本以编程方式将有效负载或文件对象上传到 S3。本文将帮助您使用 Groovy 将文件上传到 JMeter 中的 AWS S3。
什么是 S3?
Amazon Simple Storage Service (Amazon S3)是一种对象存储服务,提供行业领先的可伸缩性、数据可用性、安全性和性能。
3有各种存储类: s3标准,s3智能分层,s3冰川即时检索,等等。
先决条件
以下是上传文件到 AWS s 3的先决条件:
- AWS 账户
- 具有 s3访问策略的 AWS IAM 用户
- 基础的知识 AWS services
- 掌握 JMeter 的基本知识
- 具备 AWS SDK (Java)的基本知识
- 要上载的文件
用户
- 登录您的 AWS 帐户并打开IAM service. 按一下用户 下面Access Management 接达管理.
- 点击添加用户按钮设置用户详细信息和凭证类型,如下所示进来jmeter-s3-access 在User name 用户名 检查完毕Access key - Programmatic access.
- 用户将以编程方式访问 AWS 服务,而不是从用户控制台访问。请单击Next: Permissions.
- 在设置权限部分,点击直接附加现有政策, 然后通过输入s3.
- 为了演示的目的,让我们AmazonS3FullAccess.检查然后点击Next: Tags 下一步: 标签. 但是对于生产服务器,遵循零信任框架
- 添加标记是可选的,但是建议使用相关的密钥值
- 点击Review 检讨然后点击Create user 创建用户.
- Access key ID 及Secret access key 或者,你也可以下载.csv 文件
JMeter 测试计划
默认情况下,JMeter 没有将工件上传到 AWS s3的特性。为了扩展功能,我们必须利用 jsr223采样器。
下面是 JMeter 系列的完整播放列表,它将帮助你在一周内成为一个英雄。
JSR223 Sampler Jsr223取样器
本地不可能写上传到 s3代码块。我们必须利用最新版本的 AWS SDK for Java。要将 AWS SDK 作为 jsr223采样器的依赖项添加到 jsr223采样器,最简单的方法是利用 Grape。就我个人而言,我还没有尝试过 JMeter Maven 插件。我发现葡萄是简单的开始。
什么是Grape?
Groovy 所有适应性打包引擎或 Groovy 高级打包引擎 Grape 是与 Groovy 一起构建的 JAR 依赖管理器。
使用 jsr223中的@Grab 注释,您可以将 Maven 存储库依赖项添加到类路径。
@Grab(group='software.amazon.awssdk', module='s3', version='2.17.172', scope='test')
上面的注释将下载完成 AWS SDK s3依赖项。
@Grapes(
@Grab(group='software.amazon.awssdk', module='s3', version='2.17.172', scope='test'),
@Grab(group='software.amazon.awssdk', module='sts', version='2.17.172', scope='test')
)
若要更改源,请使用@GrabResolver 注释。
@GrabResolver(name='restlet', root='http://maven.restlet.org/')
Hello Time 使用 Grape in JSR223
通过使用@Grab 注释编写一个简单的片段,让我们了解 Grape 在 JMeter 中的 JSR223 Sampler 中是如何工作的。为了用一个简单的 Hello world 来解释它,请原谅 Hello time 示例,让我们使用以下代码片段。将下面的代码复制并粘贴到 JMeter 中的 jsr223采样器中。
@Grapes(
@Grab(group='joda-time', module='joda-time', version='2.10.14')
)
import org.joda.time.LocalDateTime
LocalDateTime currentDateTime = new LocalDateTime()
log.info "Local Time is " + currentDateTime
让我们把每一行都切开。@ grapes 是可选的 inception 注释,它有@Grab 注释。可以在 jsr223的任何位置放置一个或多个@Grab 注释。在这个示例中,@grab 注释将管理 joda-time 依赖关系,并在 Log Viewer 中打印当前日期和时间。默认情况下,它会从 mvnrepository.com 下载依赖项。
单击 JMeter 中的 Run 按钮,查看 Log Viewer 中的日志消息。单击 Run 按钮后,上面的脚本将从源代码下载依赖项,并将 jar 保存在/Users/< user >/中。C: 用户 < user > 。在 Windows 操作系统中的Grape。
依赖项下载只会在第一次执行时发生,JMeter 中的最终执行将会很快。
AWS S3 SDK
有多种方法可以将工件上传到 S3,例如,通过 AWS CLI、 AWS SDK、 HTTP 请求等等。官方的 AWS SDK 打开了通过 API 构建 AWS 应用程序的大门。
通过利用 AWS SDK for Java,很容易与 AWS 服务进行交互。的最新版本是 v2。V2是 v1的重大改写。V2版本采用非阻塞 i/o 架构,使用 Netty 实现高并发性,线程数较少。此外,它还支持 HTTP/2和自动分页。
在 Groovy 中将文件上传到 s 3
我们将在 JSR223 Sampler 中利用 Groovy 中的 Grape,为 s3添加 AWS SDK。前往 https://mvnrepository.com/artifact/software.amazon.awssdk/s3,选择最新版本。在撰写本文的时候,最新版本是2.17.172。
单击 Grape 并复制如下所示的注释。
使用 Groovy-Grape 将文件上传到 JMeter 中的 AWS S3
然后,复制并粘贴下面的代码片段到 jsr223采样器中。
@Grapes(
@Grab(group='software.amazon.awssdk', module='s3', version='2.17.172', scope='test')
)
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider
import software.amazon.awssdk.regions.Region
import software.amazon.awssdk.services.s3.S3Client
import software.amazon.awssdk.services.s3.model.*
import java.io.File
import java.nio.file.Paths
// Configurations
String accessKey = vars.get("AWS_ACCESS_KEY")
String secretKey = vars.get("AWS_SECRET_KEY")
String bucketName = vars.get("AWS_BUCKET_NAME")
String strFilename = "C:\\temp\\result.json"
try {
// Set region
Region region = Region.US_EAST_1
// Create credentials
AwsBasicCredentials awsCreds = AwsBasicCredentials.create(
accessKey,
secretKey)
// Build S3 Client
S3Client s3 = S3Client.builder()
.region(region)
.credentialsProvider(StaticCredentialsProvider.create(awsCreds))
.build()
// Create file object
File s3Obj = new File(strFilename)
// Create PUT request
PutObjectRequest request = PutObjectRequest.builder()
.bucket(bucketName)
.key(s3Obj.getName())
.build()
// Upload file
s3.putObject(request, Paths.get(strFilename))
}
// Catching exception and displaying it in the Sample result
catch (S3Exception e){
SampleResult.setSuccessful(false)
SampleResult.setResponseMessage(e.getMessage())
SampleResult.setResponseCode(null)
}
让我们对上面的代码进行切片。
- 在加入语句时,第一个块表示配置,如 AWS 访问、密钥和 Bucket 名称
- 下一个配置是 AWS 区域
- 创建凭据以访问桶
- S3Client 方法创建一个 s3客户端AwsBasicCredentials 证书
- s3Obj 就是要上传的文件
- PutObjectRequest 会建立请求
- s3.putObject 将上传文件的杠杆作用于request.
如果发生任何异常,JMeter 将在采样器中显示异常,并提供异常详细信息以便进行故障排除。
在测试计划中可以使用变量 AWS _ access _ key、 AWS _ bucket _ name 和 AWS _ secret _ key。
下面是下载示例 JMeter 测试计划的存储库,以供参考。
永远不要在测试计划中存储 AWS 凭据。通过命令行、环境变量或以编程方式生成凭据。
恭喜! 现在您知道了如何使用 jsr223采样器在 JMeter 中以编程方式将工件上传到 S3。
总结
上传工件到 s3只是个开始。通过利用 AWS SDK for Java,可以使用 Groovy 与 JMeter 提供的 AWS 服务进行交互。例如,在 JMeter 测试执行之后,可以使用上面的代码片段将结果上传到 zip 文件中。如果您有任何其他用例的 JMeter,请让我知道在评论。