Для наших проектов я использую Karate версии 1.3.1. В настоящее время у нас есть вариант использования для тестирования API, который принимает файл и метаданные как часть запроса.
мы используем составной файл и поле для записи нашего файла функций, но это кажется, когда мы проверяем отчет о вызове POsT, мы не видим метаданные, которые представляют собой Json, идущие как часть запроса.
Согласно предложению в ссылке: https://github .com/karatelabs/karate/issues/1710
мы попробовали другой подход — использовать составной файл и значение в качестве параметра, но он нам не помог.
Есть ли другой способ реализовать это на каратэ?
примечание: почтальон работает без проблем и мы тоже получаем ответ
пожалуйста, помогите, если кто-нибудь сталкивался с этой проблемой или решил ее.
Ниже приведен мой файл функции:
def temp = { 'upload': ['name':'test', 'org':123, 'branch': 'xyz', 'amount': 100], 'info': 8900, 'id': 123}
Given url "http://11.111.1.111:1111"
And path "/api/v1/upload
header Content-Type = 'multipart/form-data'
And multipart file file = {read: 'classpath:resources/file/file1.txt', filename: 'file1.txt'}
And multipart file metadata = {value: '#(temp)}
And method POST
print response
Примечание: я также пробовал * метаданные составного поля = temp (но здесь не получилось)
Ответ:
content-disposition: form-data; name= file; filename="file1.txt"
content-type: text/plain; charset= UTF-8
content-length: 5300
Completed: true
IsInMemory: true
content-disposition: form-data; name= metadata; filename=""
content-type: application/json; charset= UTF-8
content-length: 100
Completed: true
IsInMemory: true
Проблема в том, что когда я запускаю файл функции в Karate, API возвращает мне 200 с пустым ответом.
Ответ: {
но когда то же самое выполняется из Postman, он возвращает мне ответ
Ответ от почтальона: {id:123, статус: «Готово»
Я также попробовал тот же запрос с запросом Java okhttpClient, он сработал нормально и дал ожидаемый ответ.
Это есть ли что-нибудь, чего мне не хватает при работе с каратэ?
Реализация класса Java для OkHttpClient (РАБОТАЕТ):
import okhttp3.*;
import java.io.File;
import java.io.IOException;
import java.util.Map;
public class OkHttpHelper {
private OkHttpClient client;
public OkHttpHelper() {
client = new OkHttpClient();
}
public String executeMultipartRequest(String url, Map fields, Map files) throws IOException {
MultipartBody.Builder requestBodyBuilder = new MultipartBody.Builder().setType(MultipartBody.FORM);
// Add fields
if (fields != null) {
for (Map.Entry field : fields.entrySet()) {
requestBodyBuilder.addFormDataPart(field.getKey(), null, RequestBody.create(MediaType.parse("application/json"), field.getValue()));
}
}
// Add files
if (files != null) {
for (Map.Entry file : files.entrySet()) {
File uploadFile = new File(file.getValue());
requestBodyBuilder.addFormDataPart(file.getKey(), uploadFile.getName(),
RequestBody.create(MediaType.parse("text/plain"), uploadFile));
}
}
RequestBody requestBody = requestBodyBuilder.build();
// Print requestBody content
System.out.println("Request Body: " + requestBodyToString(requestBody));
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
try (Response response = client.newCall(request).execute()) {
return response.body().string();
}
}
private String requestBodyToString(RequestBody requestBody) throws IOException {
Buffer buffer = new Buffer();
requestBody.writeTo(buffer);
return buffer.readUtf8();
}
}
Файл функции выглядит следующим образом:
Feature: Multipart Request with OkHttp
Background:
* def OkHttpHelper = Java.type('com.example.OkHttpHelper')
* def okHttpHelper = new OkHttpHelper()
Scenario: Send Multipart Request
* def url = 'https://example.com/upload'
And def fields = { "metadata": '{"key1": "value1"}' }
And def files = { "file": "path/to/file1.txt" }
When def response = okHttpHelper.executeMultipartRequest(url, fields, files)
Then print response
** Команда CURL от POSTMAN**
curl -X POST \
http://11.111.11.111:1111/api/v1/fileupload
-H 'Accept: */*' \
-H 'Accept-Encoding: gzip, deflate' \
-H 'Cache-Control: no-cache' \
-H 'Connection: keep-alive' \
-H 'Content-Length: 5800' \
-H 'Content-Type: multipart/form-data; boundary=---------23434234234343' \
-H 'Host: 11.111.11.111:1111' \
-H 'Postman-Token: XXXXXX-xxxx-xxxx-xxxx-Xxxxxxx,XXXXXXXX' \
-H 'User-Agent: PostmanRuntime/X.XX.X' \
-H 'cache-control: no-cache' \
-H 'content-type: multipart/form-data; boundary=---------23434234234343' \
-F file@/C:/Test/Sample/file1.txt \
-F ‘metadata’= { "metadata": '{"key1": "value1"}' }
Подробнее здесь: https://stackoverflow.com/questions/765 ... r-multipar
Karate V 1.3.1 - данные json в Multipart/данные формы в поле Multipart или файл Multipart не работают должным образом ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Анализ ответа JSON, начинающегося с «0», с использованием платформы Karate
Anonymous » » в форуме JAVA - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Анализ ответа JSON, начинающегося с «0», с использованием платформы Karate
Anonymous » » в форуме JAVA - 0 Ответы
- 27 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Анализ ответа JSON, начинающегося с «0», с использованием платформы Karate
Anonymous » » в форуме JAVA - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Karate dsl создать файл, объединяющий все результаты выполнения каждой функции?
Anonymous » » в форуме JAVA - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-