Сложный управляемый данными тест чтения нескольких файлов - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть один пример, когда мне не удалось решить мою проблему с каратэ. У меня есть 25 ЭКГ-файлов, где я должен загрузить их пациенту. Там есть индексный файл, который содержит правильный порядок этих файлов. Но прежде чем загружать через API, мне нужно прочитать этот индексный файл, найти следующий файл для загрузки.

Также мне нужно переименовать этот файл с определенным c соглашением об именах, потому что каждый файл, который я загружаю через API, должен. быть уникальным. Имя состоит из электронного письма пациента, метки времени и индекса. Также отметка времени в имени должна быть увеличена для каждого файла с 25500 мс. После загрузки я должен удалить эти файлы.

Я пытался написать java interop, et c, но потом все стало так сложно.

1 Ответ

0 голосов
/ 23 февраля 2020

Это на самом деле довольно просто, используя каратэ. Сначала я предполагаю, что у вас есть index.json со следующим:

[
  { "file": "ecg-01.json" },
  { "file": "ecg-02.json" }
]  

Содержимое ecg-01.json:

{ "email": "john@ecg.com" }

И содержимое ecg-02.json:

{ "email": "smith@ecg.com" }  

Обратите внимание, что в каратэ вам не нужно сохранять временные файлы для загрузки файла, вы можете взять существующий файл и выполнить загрузку с другим именем, см .: https://github.com/intuit/karate#multipart -file

Мы выполним основную работу в upload.feature, здесь мы просто используем https://httpbin.org/ в качестве конечной точки демонстрации:

Scenario:
* def patient = read(file)
* def timeStamp = startTime + __loop * 25500
* def name = patient.email + '_' + timeStamp + '_' + __loop

* url 'https://httpbin.org/anything'
* request { name: '#(name)' }
* method post

Итак, наконец, все, что вам нужно сделать, это al oop из вашей основной функции, которая может быть такой простой, как это:

* def startTime = java.lang.System.currentTimeMillis()
* def data = read('index.json')
* call read('upload.feature') data

Когда я запустил этот пример, он сделал 2 запроса POST, как это:

1 > POST https://httpbin.org/anything
1 > Accept-Encoding: gzip,deflate
1 > Connection: Keep-Alive
1 > Content-Length: 39
1 > Content-Type: application/json; charset=UTF-8
1 > Host: httpbin.org
1 > User-Agent: Apache-HttpClient/4.5.11 (Java/1.8.0_231)
{"name":"john@ecg.com_1582424404163_0"}

1 > POST https://httpbin.org/anything
1 > Accept-Encoding: gzip,deflate
1 > Connection: Keep-Alive
1 > Content-Length: 40
1 > Content-Type: application/json; charset=UTF-8
1 > Host: httpbin.org
1 > User-Agent: Apache-HttpClient/4.5.11 (Java/1.8.0_231)
{"name":"smith@ecg.com_1582424429663_1"}

Тем не менее, предположим, что вы хотел написать лог создания файла c как чистый Java. Вы могли бы затем передать его каратэ в одной строке и удалить его в другой строке. Нет, Java взаимодействие в каратэ не "так сложно".

...