【发布时间】:2020-09-02 20:02:38
【问题描述】:
我正在尝试通过来自 jmeter 的 PUT http 请求将文件上传到 S3。我在“文件上传”部分的“路径”和“文件路径”和“mime 类型”中指定 URL。
我收到来自 S3 的“拒绝访问”响应。相同的 URL 通过 Postman 可以正常工作,并且上传成功。
这方面有什么帮助吗??
【问题讨论】:
我正在尝试通过来自 jmeter 的 PUT http 请求将文件上传到 S3。我在“文件上传”部分的“路径”和“文件路径”和“mime 类型”中指定 URL。
我收到来自 S3 的“拒绝访问”响应。相同的 URL 通过 Postman 可以正常工作,并且上传成功。
这方面有什么帮助吗??
【问题讨论】:
如果您能够使用 Postman 成功上传文件,您只需使用 JMeter 记录相关请求即可。
准备 JMeter 进行记录。最快和最简单的方法是使用JMeter Templates feature。从 JMeter 的主菜单中选择 File - Templates - Recording 并单击“创建”
展开Workbench - HTTP(S) Test Script Recorder并点击“开始”按钮
使用 JMeter 作为代理服务器运行 Postman,例如:
C:\Users\Jayashree\AppData\Local\Postman\app-4.9.3\Postman.exe --proxy-server=localhost:8888
Test Plan - Thread Group - Recording Controller 下
有关详细信息,请参阅HTTP(S) Test Script Recorder 文档。
【讨论】:
您是否在 JMeter PUT 请求中正确指定了 AWS 凭证?您需要指定 AWS 访问密钥和密钥。
另一种解决方案是使用来自 JSR223 采样器的 AWS Java SDK,并使用 Java 代码进行调用。
【讨论】:
我在下面提到了使用 JMeter 将图像上传到 s3 存储桶的步骤:
要求:
步骤:
将jar文件复制到Jmeter的JMeterHome/lib/ext/中。
创建一个测试计划并点击线程组。
将线程数、加速周期和循环计数设置为 1。
右键单击线程组并添加 JSR233 采样器。
选择 Java 作为 JSR233 采样器中的语言。
在采样器的脚本部分添加以下代码。
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import com.amazonaws.auth.AWSSessionCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.AmazonS3Exception;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.PutObjectResult;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectInputStream;
import com.amazonaws.regions.Regions;
import com.amazonaws.regions.Region;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.transfer.Download;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;
String accessKey = "xxxxxxx";
String secretKey = "xxxxxxxxx";
String bucketName = "bucketname"; //specify bucketname
String region = "region"; //specify region
BasicAWSCredentials sessionCredentials = new BasicAWSCredentials(accessKey, secretKey);
AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withRegion(region)
.withCredentials(new AWSStaticCredentialsProvider(sessionCredentials))
.build();
TransferManager xfer_mgr = TransferManagerBuilder.standard()
.withS3Client(s3)
.withDisableParallelDownloads(false)
.build();
File f = new File("xxx/image.jpg"); //specify path to your image
String objectName = "newimage.jpg"; //provide a name for the image how you want your image to be shown i
Upload xfer = xfer_mgr.upload(bucketName, objectName, f);
xfer.waitForCompletion();
xfer_mgr.shutdownNow();
如需更多参考,您可以查看link
【讨论】: