apache / jmeter

Apache JMeter open-source load testing tool for analyzing and measuring the performance of a variety of services
https://jmeter.apache.org/
Apache License 2.0
8.13k stars 2.05k forks source link

Cannot upload files in jMeter 5.6.2 #6085

Open michal-chudy-paylocity opened 9 months ago

michal-chudy-paylocity commented 9 months ago

Expected behavior

Expected behaviour: The file is uploaded

Actual behavior

The same request works as expected in jMeter 5.4.3

Steps to reproduce the problem

Outline

As you can see from the description below, the file upload is broken in both, the jMeter proxy as well as when using an HTTP request sampler to upload it.

Option 1 - record the request from the browser

  1. Configure and run the jMeter proxy including the HTTPS Test Script Recorder and a Recording Controller
  2. Configure your browser to use this proxy
  3. Visit your website and upload the file
    1. Check the request in the browser's developer tools
    2. The file is correctly sent from the browser
    3. The file is, however, removed from the request on the jMeter proxy
  4. In your browser, revert the proxy settings back to the system proxy
  5. Repeat the process of uploading the file
    1. This time the file is correctly uploaded

Option 1.1 - copy the recorded request and run it as a part of a test plan

  1. Copy the recorded request from the session described above into a new test plan
  2. Run the test plan (assuming you have the correct authentication cookies/headers present)
  3. The file isn't uploaded

Option 2 - verify the request in Postman and try to send the request from Postman via jMeter proxy

  1. Download and install Postman and start a Postman proxy session
  2. Try to upload your file to your website - Postman captures the request
  3. Stop the Postman proxy
  4. Create a new Postman request from the captured request and run the request
    1. The file is uploaded correctly
  5. In jMeter, turn on the jMeter proxy
  6. Go back to Postman and configure Postman to use the jMeter proxy (File > Settings > Proxy)
  7. Run the same request as in step 4 above
    1. The jMeter proxy removes the file from the request
    2. The request passes the proxy and reaches your server endpoint but the file isn't there

JMeter Version

5.6.2

Java Version

JDK 21 2023-09-19 LTS

OS Version

Microsoft Windows 10 Enterprise, OS Version: 10.0.19045 N/A Build 19045

cmyllis commented 4 months ago

I still have problems uploading in 5.6.3.

cmyllis commented 4 months ago

@michal-chudy-paylocity Have you found any workaround to this? Or we cannot upload at all with the latest Jmeter?

andrewkrgeo commented 1 month ago

Interested in workaround on 5.6.2 issue. I am facing the problem executing jmx tests on Azure Load Testing environment that upgraded jmeter server versions to 5.6.2 from 5.4.3 as reporte by @michal-chudy-paylocity.

thanks for the help!!

cmyllis commented 1 month ago

@andrewkrgeo workaround for uploading is to set this to Java (advanced options in your http request) image

andrewkrgeo commented 1 month ago

At the end I found that the problem is related with JMETER 5.6.x does not support relative file paths when specifying it in a multipart/form-data POST request.

In a test of mine I changed it with absolute path, changed sample implementation to Java and UPLOAD worked again.

Still not working the recorder, giving always "file not found" java exception, so I need to add Upload sample manually after recording the first steps.

To get the absolute path I used a BeanShell script, preferring to have documents in the same path of JMX files:

${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}

Give it a try,

andrewkrgeo commented 1 month ago

@andrewkrgeo workaround for uploading is to set this to Java (advanced options in your http request) image

I set that, but still not working cause the relative file path in the configuration.

The workaroun i found works by now!