Katalon - Загрузить файл с помощью POST API

Я искал эту проблему и, кажется, ее обсуждали пару раз, но без реального решения.

Я пытаюсь загрузить файл XML, используя запрос POST и данные формы, но получаю следующий ответ об ошибке:

{
  "error":"The results file is required."
}

Ошибка отображается с использованием ObjectRepository, а также с помощью кода, использующего с withMultipartFormDataBodyContent()

Если я использую curl, он отлично работает. Также отлично работает с почтальоном.

Может кто-нибудь помочь мне с этим?

Благодарю.

1 ответ

Решение

После looooooooooooong времени на поиск и пробу разных вещей я уже нашел решение (которое работает для меня). Он использует библиотеку Okhttp, поэтому вам нужно будет ее импортировать. Если кому-то еще это нужно, вот оно:

public void importJUnitTestExecRequest() {
    
    OkHttpClient client = new OkHttpClient();
    String reportFile = GlobalVariable.reportFolder + "\\JUnit_Report.xml";
    File file = new File(reportFile);

    String url = GlobalVariable.importTestExecJUnitEndpoint+"?testExecKey="+GlobalVariable.testExecKey;

    //Form request body that will be a multipart
    RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
            .addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("text/xml"), file))
            .build();

    //Form the actual request adding necessary headers
    Request request = new Request.Builder()
            .url(url)
            .post(requestBody)
            .addHeader("Content-Type", GlobalVariable.contentTypeMultipart)
            .build();

    Response response = null;

    try {
        response = client.newCall(request).execute();
        println("************ IMPORT TEST EXECUTION RESULTS RAW RESPONSE ************");
        println("Response status: " + response);
        println("********************************************************************");
        if (response.isSuccessful()){
            String responseBody = response.body().string();
            println("************ IMPORT TEST EXECUTION RESULTS RESPONSE BODY ************");
            println(responseBody);
            println("*********************************************************************");
        } else {
            throw new IOException("Unexpected HTTP code " + response);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

}

Я открыл заявку в службу поддержки, потому что со встроенной функциональностью в Katalon в настоящее время (или я не знаю, как это сделать) невозможно.

Другие вопросы по тегам