Частина 3. Тестуємо захищений Web-сервіс за допомогою IBM Rational Software Architect і XMLUnit

Про даній серії


Все частіше Web-сервіси стають основними компонентами в бізнес-додатках. З появою таких парадигм, як сервіс-орієнтована архітектура (Service-Oriented Architecture, SOA), розробники все більше уваги приділяють Web-сервісів. При цьому питання тестування Web-сервісів для важливих сервіс-орієнтованих додатків пріобретюет велику значимість. В результаті швидкого створення і розгортання складних Web-сервісів перед групою забезпечення якості виникають додаткові проблеми. Автоматизація тестування Web-сервісів може допомогти групі ефективно управляти обсягом робіт.


Тестування Web-сервісів зазвичай включає наступні задачі:



  1. Генерування клієнтського або скелетного коду для Web-сервісу;
  2. Визначення вхідних даних тесту;
  3. Виклик Web-сервісу за допомогою клієнтського або скелетного коду;
  4. Звірка реального і очікуваного відгуку.

З усіх перерахованих дій найбільших зусиль вимагають генерування скелетного коду та верифікація відгуку.


Для генерування скелетного коду для Web-сервісу на базі відповідного WSDL-файлу існують різні інструменти; однак згенерований код може бути приватним; можливо, його доведеться генерувати заново при кожній зміні WSDL. Одним з рішень даної проблеми може стати відмова від генерації клієнтського або скелетного коду і виклик Web-сервісу безпосередньо через загальний HTTP-клієнт. Пізніше в цій серії статей ви познайомитеся з одним із таких наборів інструментів, що надаються API Apache Commons HttpClient (далі – HttpClient).


Верифікація відгуку зазвичай теж вимагає деякої частки ручного втручання, в залежності від складності вмісту відгуку. Якщо відгук містить прості елементи, то верифікація може бути простою, оскільки вона вимагає тільки перевірки значення в простому елементі. Для відгуків, містять складні елементи і великий список таких складних елементів, верифікація вручну може вимагати значних зусиль.


У нашій серії статей розповідається про методику автоматизації тестування типового Web-сервісу з використанням декількох технологій, в тому числі, JUnit, HttpClient і Apache XMLUnit (далі в цій статті- XMLUnit). Методика демонструється на платформі розробки, яку пропонує IBM Rational (R) Software Architect.


Активізація системи безпеки для Web-сервісу


В частини 1 розповідалося про те, як створити навчальний Web-сервіс, який повертає список користувачів. Тепер ви зможете за допомогою даного навчального керівництва використовувати на Web-сервісі систему безпеки. Щоб використовувати систему безпеки, виконайте такі кроки:



  1. Відкрийте Rational Software Architect;
  2. Виберіть команду Window > Open Perspective > Java;
  3. Розгорніть елемент Sample Project;
  4. Виконаєте подвійне клацання на елементі Deployment Descriptor;
  5. Перейдіть на вкладку Security, Як показано на малюнку 1.
    Малюнок 1. Вкладка Security в дескрипторі розгортання
    Вкладка Security в дескрипторі розгортання

    Далі ми створимо нову роль для нашого застосування. Пізніше ми надамо користувачам, що належить до цієї конкретної ролі, привілеї доступу до Web-сервісу;


  6. У секції Security Roles натисніть кнопку Add для створення нової ролі;
  7. У діалоговому вікні Add Security Role введіть ім’я ролі і її опис, наприклад, SampleRole;
  8. Натисніть кнопку Finish , Щоб закрити вікно Add Security Role, як показано на малюнку 2;
    Малюнок 2. Додавання ролі безпеки
    Додавання ролі безпеки
  9. У секції Security Constraints натисніть кнопку Add для створення нового обмеження безпеки. Визначаючи це обмеження, в дійсності ви накладаєте обмеження на те, які ролі до яких ресурсів будуть звертатися;
  10. У вікні Add Constraints введіть ім’я обмеження, наприклад, Sample Constraint, Як показано на малюнку 3;
    Малюнок 3. Додавання обмеження
    Додавання обмеження
  11. Натисніть кнопку Next.
  12. У секції Add Web Resource введіть відомості, показані на малюнку 4;
    Малюнок 4. Додавання Web-ресурсу
    Додавання Web-ресурсу
  13. Натисніть кнопку Finish;
  14. У секції Authorization Roles натисніть кнопку Add , Щоб надати ролі дозвіл на доступ до Web-сервісу, як показано на малюнку 5;
    Малюнок 5. Дозволи ролі
    Дозволи ролі
  15. У вікні Add Authorization Constraint виділіть роль SampleRole і введіть опис, наприклад, таке: Sample Auth Constraint;
  16. Натисніть кнопку Finish.

    Тепер ми визначимо тип транспортної гарантії, яку необхідно забезпечити між клієнтом і сервером. Для нашого прикладу Web-сервісу виберіть варіант без гарантії;


  17. Перейдіть в секцію User Data Constraint на вкладці Security, показану на малюнку 6;
    Малюнок 6. Обмеження для користувача даних
    Обмеження для користувача даних
  18. Із списку Type виберіть NONE;
  19. Збережіть цю конфігурацію, вибравши команди File > Save;
  20. Розгорніть EAR-файл для проекту SampleProject і виконайте подвійне клацання на елементі Deployment Descriptor, як показано на малюнку 7;
    Малюнок 7. Дескриптор розгортання EAR
    Дескриптор розгортання EAR
  21. Перейдіть на вкладку Security і натисніть кнопку Gather. Майстер виконає збір всіх ролей, визначених для додатка. Наприклад, він додасть в список роль SampleRole, як показано на малюнку 8.
    Малюнок 8. Збір ролей
    Збір ролей

    Далі ми додамо в роль SampleRole користувача;


  22. Створіть в локальної операційній системі нового користувача з ім’ям SampleUser і паролем SampleUser. Це ім’я буде використовуватися для доступу до Web-сервісу;
  23. Натисніть на SampleRole і встановіть прапорець у полі Users / Groups;
  24. Додайте ім’я користувача SampleUser;
  25. Збережіть конфігурацію;
  26. Розгорніть додаток, натиснувши правою кнопкою миші на SampleProject і вибравши команду Run As.

Активізація системи безпеки на сервері додатків WebSphere Application Server


У попередньому розділі ми використовували систему безпеки на навчальному Web-сервісі і розгорнули цей Web-сервіс на сервері додатків WebSphere Application Server. У цьому розділі ми активізуємо систему безпеки на сервері додатків WebSphere Application Server.



  1. Відкрийте консоль WebSphere Administrator. Як правило, для цих цілей можна використовувати URL http://localhost:9060/admin;
  2. Перейдіть до категорії Security > Global Security;
  3. Виберіть посилання Custom в категорії User Registries;
  4. Введіть будь-яке ім’я користувача та пароль у полі Server user ID, вам доведеться використовувати ці дані для доступу до реєстру користувачів WebSphere Application Server; натисніть кнопку Apply , Щоб застосувати зміни.

    Примітка: Якщо ви вже задали ім’я користувача та пароль, переходьте до наступного кроку;


  5. Поверніться до Security > Global Security;
  6. Встановіть прапорець Enable global security. Переконайтеся, що прапорець Enforce Java 2 security знятий, як показано на малюнку 9;
    Малюнок 9. Активізація глобальної системи безпеки
    Активізація глобальної системи безпеки
  7. Переконайтеся, що варіант Local OS вибраний в списку Active user registry;
  8. Застосуйте зміни.

    Далі ми зіставимо користувачів ролям додатків в WebSphere Application Server;


  9. Перейдіть до категорії Applications > Enterprise Applications, Як показано на малюнку 10;
    Малюнок 10. Enterprise applications
    Enterprise applications
  10. Натисніть мишею на посиланні SampleProjectEAR, Як показано на малюнку 11;
    Малюнок 11. Приклад EAR-файлу
    Приклад EAR-файлу
  11. Натисніть на посилання Map security roles to users/groups в секції Additional Properties, як показано на малюнку 12;
    Малюнок 12. Зіставлення користувачів ролям безпеки
    Зіставлення користувачів ролям безпеки
  12. Вибрати роль SampleRoleі натисніть кнопку Look up users;
  13. Натисніть кнопку Search, Як показано на малюнку 13;
    Малюнок 13. Пошук ролей
    Пошук ролей
  14. Виберіть користувача, наприклад, SampleUser, Якого ви створили в локальної операційній системі;
  15. Натисніть кнопку >>, Щоб додати ім’я користувача в список, розташований з правого боку;
  16. Застосуйте зміни;
  17. Натисніть кнопки OK на всіх сторінках, щоб зберегти зміни в головній (master) конфігурації;
  18. Перезапустіть WebSphere Application Server.

Верифікація безпеки Web-сервісу


У попередньому розділі ми активізували систему безпеки для навчального Web-сервісу і налаштували параметри безпеки WebSphere Application Server. У цьому розділі ми переконаємося в тому, що система безпеки на Web-сервісі активізована.


Щоб перевірити, активізовано чи система безпеки на Web-сервісі, виконайте такі кроки:


  1. Відкрийте Web-браузер;
  2. Введіть URL Web-сервісу. Браузер запропонує ввести ім’я користувача і пароль;
  3. Введіть SampleUser і SampleUser в якості імені користувача і пароля, які ви вибрали для цього прикладу. Якщо система безпеки на Web-сервісі активізована, ви побачите повідомлення Web-сервісу Hi there, this is a Web service!

Тестування захищеного Web-сервісу


Оскільки ми активізували систему безпеки на Web-сервісі, доведеться змінити тестовий код у файлі SampleHttpClient.java, який ви створили в частини 2. Спочатку змініть метод invokeWebService () method в класі, як показано в лістингу 1.


Лістинг 1





package com.ibm.ws.sample.test;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthPolicy;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
public class SampleHttpClient
{
public static String invokeWebService(String webServiceURL,
String requestXMLPath) throws FileNotFoundException, Exception
{
PostMethod post = null;
HttpClient client = new HttpClient();
try
{/ / Читаємо SOAP-запит з файлу.
StringBuffer requestFileContents = new StringBuffer();
BufferedReader bufferedReader = new BufferedReader(new FileReader(requestXMLPath));
String line = null;

while((line = bufferedReader.readLine()) != null)
{
requestFileContents.append(line);
}
post = new PostMethod(webServiceURL);
post.setRequestHeader(“Accept”, “application/soap+xml,
application/dime, multipart/related, text/*”);
post.setRequestHeader(“SOAPAction”, “”);
/*
*
* SECURITY CODE START
*
* */

UsernamePasswordCredentials defaultcreds = new
UsernamePasswordCredentials(“SampleUser”,”sampleuser”);
client.getState().setCredentials(AuthScope.ANY, defaultcreds);
ArrayList authPrefs = new ArrayList(3);
authPrefs.add(AuthPolicy.BASIC);
authPrefs.add(AuthPolicy.NTLM);
authPrefs.add(AuthPolicy.DIGEST);
client.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs);
client.getParams().setAuthenticationPreemptive(true);
/ / Для забезпечення безпеки
//client.getState().setCredentials(authScope, credentials);
post.setDoAuthentication(true);
/*
*
* SECURITY CODE END
*
* *// / Запитуваний контент буде вилучатись безпосередньо з потоку вводу.
RequestEntity entity = new StringRequestEntity(requestFileContents.toString(),
“text/xml”, “utf-8”);
post.setRequestEntity(entity);
/ / Повертає число, що показує статус відгуку
int result = client.executeMethod(post);
String response = post.getResponseBodyAsString();
return response;
}
finally
{/ / Після того, як все зроблено, звільніть з’єднання в пул з’єднань
post.releaseConnection();
}
}
}


Зверніть увагу на те, що код змінився – в нього додані нові рядки між коментарями, що відносяться до безпеки. Код в контрольному прикладі JUnit змінювати не доведеться, тому що він делегує виклик Web-сервісу класу SampleHttpClient. Крім того, зверніть увагу на те, що реєстраційні дані користувача передаються через об’єкт UsernamePasswordCredentials.


І нарешті, щоб протестувати Web-сервіс, запустіть контрольний приклад, як описувалося в частини 2. Звірте очікуваний і реальний відгуки від Web-сервісу.


Висновок


У цій статті ми на практиці вивчили процес автоматизації тестування захищеного Web-сервісу. Зокрема, ви навчилися:

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*