Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как декодировать base64 из респонса и создать в файл


(Ярик Музика) #1

Вообщем, ситуация следующая: ответом приходит файл но кодирован в base64 (soap протокол). Теоретически я знаю что там должно быть, практически - полученный код я могу проверить через внешние программки, но автоматически переводить и сохнарять в файл пока не могу понять как. Да, я видел уже такие топики на форуме продукта, на стековерфлоу - но чет я так и не сумел все напилить (


(Goshko Nazar) #2

Ну а язык какой используете?
для питона воть - https://docs.python.org/3.4/library/base64.html


(Ярик Музика) #3

в soapui юзаю груви


(aino) #4

В соапUI есть встроенный декодер, используете его, в мануалах есть инфа.
Я кодирую в Base64 XML сод вот этим методом
def toBase64(def cda) {
new String(Base64.encodeBase64(cda.getBytes(“UTF-8”)), “UTF-8”)
}

и складываю в CustomProperties.


(Ярик Музика) #5

из base64 в файл нужно а не с стринга в бейс64


(Михаил Братухин) #6

У нас подобное используется на проекте. Точнее, на смежном проекте. Там сервисы получают строку в Base64, а потом ответ от сервисов приходит тоже в Base64, его декодируем и пишем в отдельный TestStep в Request, чтобы было в читабельном виде. Но, куда писать - не суть важно. Там можно хоть в log.info все отправлять. Просто мне удобнее было работать с тестам, в которых все внутри себя, а не разбросано по файлам на жестком диске.


(Ярик Музика) #7

так как декодируете то? пример


(Михаил Братухин) #8

def xml = new XmlSlurper().parseText(response);

String encodedResponse = xml;
byte[] decodedBytes = encodedResponse.decodeBase64();
String encodedResponseStr = new String(decodedBytes);

def request = testRunner.testCase.getTestStepByName(stepName);
def property = request.getProperty(“request”);

def xmlString = com.eviware.soapui.support.xml.XmlUtils.prettyPrintXml(encodedResponseStr);
property.setValue(xmlString);

response - определяете сами, это ответ от сервиса со строкой в Base64
stepName - аналогично, имя степа в которой пишем ответ (я его делал Disabled). Можно вместо этого писать в файл или куда угодно. Хоть в log.info

По сути читабельный ответ в одну строку уже имеется в переменной encodedResponseStr, далее просто украшательства для себя.

P.S. я знаю что это быдлокод. Мне главное, чтобы он работал. :slight_smile: