У цій статті я покажу як можна реалізувати простий, синхронний емулятор SOAP-сервісу за допомогою SoapUI. Для реалізації емулятора я використовував приклад WSDL з сайту tutorialspoint. Емулятор буде підтримувати різні варіанти відповідей, Залогуватися запити і відповіді, а так само налаштовуватися за допомогою конфігураційного файлу. Let's rock!
створення проекту
Для реалізації нижче описаного прикладу використовувався SoapUI версії 5, але приклад повинен так само працювати і в версії 4х.
Після запуску SoapUI тиснемо ⌘ + N в Mac OS або Ctrl + N в Windows \ Linux, або через меню File-> New SOAP project створюємо новий SOAP проект. Вводимо Project Name. у нас це буде "HelloWorld" і вибираємо потрібну WSDL (замість файлу можна вказати посилання на вже готовий сервіс). Вибираємо пункт Create Requests якщо він не відзначений, це дозволить автоматично створити приклади запитів за вказаною WSDL для тестування і налагодження емулятора.
Після того як створиться проект, необхідно буде додати MockService, який і буде виступати в якості нашого емулятора. Натискаємо ⌘ + O в Mac OS або через контекстне меню проекту вибираємо пункт New SOAP MockService і вказуємо його ім'я, наприклад "HelloWorldService".
У SoapUI версії 4х це можна зробити автоматично при створенні проекту вибравши відповідний пункт.
Тепер нам потрібно додати операції які буде підтримувати емулятор. Для цього вибираємо наш щойно створений MockService і тиснемо ⌘ + N в Mac OS або Ctrl + N в Windows \ Linux, або через контекстне меню вибираємо пункт New MockOperation. У вікні вибираємо потрібну нам операцію. У цьому прикладі WSDL всього одна операція, з цього просто тиснемо OK (в інших випадках цей крок потрібно буде повторювати стільки разів, скільки потрібно емулювати операцій). Якщо в дереві проекту відкрити Response 1 то можна побачити згенерований SOAP відповідь за вказаною при створенні проекту WSDL.
І так, основа нашого емулятора вже готова, і якщо його запустити, то він буде цілком чесно працювати і відповідати завжди одним і тим же повідомленням. Але це занадто нудно, з цього давайте трохи "прокачаємо" наш емулятор.
динамічний відповідь
Ми будемо отримувати ім'я з надісланого запиту і відповідати привітанням з використанням цього імені. Для цього нам буде потрібно написати невеликий скрипт на groovy. SoapUI дозволяє використовувати groovy скрипти на різних рівнях mock'а, таких як сам MockService (при старті сервісу, при його зупинці, при отриманні запиту і після запиту), MockOperation і MockResponse. Нас цікавить рівень MockResponse. Для початку дамо нашому відповіді якусь логічну назву, наприклад "successful", оскільки наша відповідь буде емулювати вдалу обробку запиту. Тепер відкриваємо наш відповідь, і в елемент greeting вписуємо змінну $ яка буде замінюватися на потрібний текст при виконанні скрипта.
Тепер, в цьому ж вікні відкриваємо вкладку Script і вписуємо туди наступний код:
Логування вхідної та вихідної пошти
Щоб перевірити що приходило в наш емулятор і що відправлялося в відповідь, ми прикрутимо до нашого емулятора логер повідомлень, який буде зберігати дії нашого емулятора в файл логу SoapUI - global-groovy.log. а так само зберігати запити в вигляді xml файлів. У дереві проекту відкриваємо MockOperation - sayHello. зі списку Dispatch вибираємо пункт SCRIPT. У який з'явився текстовому полі нижче вписуємо наступний код:
Так само додаємо в кінець скрипта для відповіді "successful" наступний код:
Тепер якщо запустити емулятор і відправляти в нього запити, то можна побачити що всі, хто прийшов запити зберігаються в директорії requests, а так само їх можна побачити в балці SoapUI. Для того щоб подивитися лог SoapUI, потрібно відкрити вкладку script log на нижній панелі головного вікна SoapUI.
конфігурація емулятора
Для конфігурації емулятора ми будемо використовувати старий добрий INI (conf) формат, тому що він краще дружить з кирилицею ніж формат JAVA properties, а так само добре підтримується іншими ЯП на випадок автоматичної конфігурації емулятора. Так само я покажу як підключати сторонні JAVA-бібліотеки до SoapUI. Для роботи з INI форматом я буду використовувати ini4j бібліотеку. Щоб підключити JAVA-бібліотеку до SoapUI її необхідно покласти в директорію. / SoapUI / bin / ext /. Тепер створимо наш конфігураційний файл, settings.conf:
І так, у нашого емулятора буде конфигурироваться варіант відповіді, таймаут перед відповіддю на запит і текст привітання. Створимо новий варіант відповіді, fault. У дереві проекту вибираємо MockOperation sayHello і тиснемо ⌘ + N в Mac OS або Ctrl + N в Windows \ Linux, або через контекстне меню вибираємо пункт New MockResponse. Вводимо ім'я нового варіанту відповіді - "fault". Далі відкриваємо його і тиснемо на іконку у вигляді квадрата зі знаком оклику всередині і підтверджуємо створення fault повідомлення і заповнюємо його наприклад так:
Тепер відкриваємо наш скрипт для MockOperation - sayHello і приводимо до такого виду: