无法通过jmeter上传文件到S3

时间:2017-03-07 09:03:25

标签: amazon-s3 jmeter

我正在尝试通过来自jmeter的PUT http请求将文件上传到S3。我在“文件上传”部分的“路径”和“文件路径和mime类型”中指定了URL。

我从S3获得了“拒绝访问”的回复。相同的URL通过Postman工作正常,上传成功。

对此有何帮助?

3 个答案:

答案 0 :(得分:0)

您是否在JMeter PUT请求中正确指定了AWS凭据?您需要指定AWS Access Key和密钥。

另一种解决方案是使用JSR223采样器中的AWS Java SDK,并使用Java代码进行调用。

答案 1 :(得分:0)

鉴于您能够使用Postman成功上传文件,您只需使用JMeter记录相关请求即可。

  1. 准备JMeter进行录制。最快和最简单的方法是使用JMeter Templates feature。从JMeter的主菜单中选择File - Templates - Recording,然后单击"创建

    JMeter Proxy Template

  2. 展开Workbench - HTTP(S) Test Script Recorder,然后点击"开始"按钮

    JMeter Start Proxy

  3. 使用JMeter作为代理服务器运行Postman,如:

    C:\Users\Jayashree\AppData\Local\Postman\app-4.9.3\Postman.exe --proxy-server=localhost:8888
    
  4. 将您需要上传的文件放到" bin" JMeter安装的文件夹
  5. 在Postman中运行请求 - JMeter应将其记录在Test Plan - Thread Group - Recording Controller
  6. 有关详细信息,请参阅HTTP(S) Test Script Recorder文档。

答案 2 :(得分:0)

我在下面提到了使用JMeter将图像上传到s3存储桶的步骤:

要求:

  • Java 9
  • aws-java-sdk-s3 JAR 1.11.313依赖性link

步骤:

  • 将jar文件复制到Jmeter的JMeterHome / lib / ext/。

  • 创建一个测试计划,然后单击“线程组”。

  • 将线程数,启动周期和循环计数设置为1。

  • 右键单击线程组并添加一个JSR233采样器。

  • 在JSR233采样器中选择Java作为语言。

  • 在采样器的脚本部分中添加以下代码。

     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