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

Ответ на асинхронный запрос для SoapUI в кодировке UTF-8


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

Добрый день!
Столкнулся на проекте с неприятной штукой. Для тестирования сервисов и написания авто-тестов выбрали SoapUI + HermesJMS (сервисы асинхронные через MQ-очереди). И все было радужно, пока в новой сборке разработчики не приделали новый механизм работы с кодировками. В итоге сообщения приходят в бинарном виде, парсятся, но почему-то не в UTF-8, а в Windows-1251 (в предыдущей версии как раз она использовалась).

Причем ответ-то от сервисов вроде как приходит в верном формате, т.е. в UTF-8 (взял бинарное сообщение из очереди и конвертнул через Notepad++ и там сообщение на читабельном русском). А вот если смотреть через GUI SoapUI или HermesJMS, то там уже русский текст превращается в абра-кадабру. И это очень печалит, т.к. инструмент довольно удобный и на нем уже написан приличный пул авто-тестов, но если не смогу придумать как можно конвертировать сообщения в правильный UTF-8, то придется от всего этого отказываться, т.к. разработчики откатывать свое изменение сломавшее все тесты не будут. Вот и вопрос, кто сталкивался с подобным или слышал как и что можно поменять в настройках или может скриптами Groovy. Очень нужна помощь.

Видел вот такой совет, но настройку эту пока не проверял, т.к. на рабочей станции все позакрывали. Никаких прав на Program Files не дают. Бюрократия во всей красе…
SoapUI 4.5.0 Project XML File Encoding Problem

Еще видел что-то про кодирование строк в UTF-8, но не очень понял что к чему. Да и для каждого Assertions’а переписывать условие, чтобы конвертировать строку в UTF-8, не очень бы хотелось…
Есть идеи примеры как String в непонятной абракадабре на Groovy|Jave превратить в нормальную строку на UTF-8 с читаемым русским?

P.S. тесты выглядит как два TestStep’а (Soap Request), при этом EndPoint у них JMS Endoint (через Hermes JMS), первый это Send для отправки сообщения, а второй - Receive для чтения ответа из очереди (разделил т.к. нужно было по CorrelId искать свои сообщения), как сделать подобное в одном TestStep’е я не нашел. При этом у первого эндпоинт настроен только на одну очередь для приема запросов, а второй эндпоинт у Receive настроен на ответную очередь и получает ответ. Поэтому у первого степа нет responce, а у второго нет request. Ответ приходит в receive -> responce и там же срабатывают проверки. И вот в них-то и проблема на русских буквах, т.к. из-за неверного парсинга (скорее всего портит сообщение Hermes JMS, но может быть и не он, не знаю как определить кто косячит) ответ содержит кракозябры, а в проверке написана нормальная строка на русском. Не хотелось бы забивать кракозябрами все. Да и с динамическими данными типа ФИО + адрес и т.д. это уже не поможет. Вот и думаю как бы эту проблему решить. Может есть какие-то настройки? Есть у кого идеи/решения?

Версия SoapUI 5.00, Hermes JMS шел в паставке с этим дистрибутивом.

P.P.S. в Custom Properties в поле Encoding стоит значение UTF-8, в заголовке запроса также стоит значение UTF-8. В Header JMS сообщения у него стоит тоже кодировка UTF-8, но по какой-то причине букты в SoapUI через GUI уже в Win-1251 (или после порчи в 1251).


(rmerkushin) #2

Эм как нибудь так?

String utf8String = new String(cp1251String.getBytes("Cp1251"), "UTF-8");

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

Попробую конечно, но тогда придется почти все строки полученные из XML оборачивать в подобные конструкции. По крайней мере, те что участвуют в проверках.

Мечтаю найти какую-нибудь настройку, которая бы не заставила меня переписывать многие и многие тесты.


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

Доброе утро! Проблема решилась. Помогла настройка, о которой писал в первом сообщении.

Еще вот тут есть обсуждение похожей проблемы на форуме SmartBear:
http://forum.soapui.org/viewtopic.php?p=53071

И как говорилось выше - вот тут есть еще статья:
http://0guzhan.blogspot.ru/2012/05/soapui-450-workspace-problem.html

Суть в том, что есть настройки приложения в файле “Bin\SoapUI-5.x.x.vmoptions”
и в них можно указать какую кодировку приложение использует по-умолчанию. В моем случае для новой версии ПО это UTF-8 (для старой просто приходится убирать настройку, хоть это и не очень удобно, но не требует переписывания уже имеющихся тестов).

Файл лежит где-то тут или в похожей папке в зависимости от того какая версия ОС и SoapUI:
\Program Files (x86)\SmartBear\SoapUI-5.1.2\bin\SoapUI-5.1.2.vmoptions

В файле нужно добавить строчку:
-Dfile.encoding=UTF-8

Тогда он будет выглядеть примерно так:

-Xms128m
-Xmx1000m
-Dfile.encoding=UTF-8
-Dsoapui.properties=soapui.properties

Надеюсь кому-то сможет помочь. Либо как вариант писать тесты с явным преобразованием строк в нужную кодировку как показывал rmerkushin


(rmerkushin) #5

Странно, по идее должна идти UTF-8 по дефолту. Возможно косяк 5.0.0 версии. Советую обновиться до более свежей, 5.1.3, есть еще 5.2.0 - но ее крайне не рекомендую ставить, сырая очень :frowning: