ISBN Books SOAP Web Services Project

Продолжаем изучение web service. В качестве подопытного, буду использовать SOAP web service для проверки ISBN. WIKI: Международный стандартный книжный номер (англ. International Standard Book Number, сокращённо — англ. ISBN)

Задание:

  • Генерация Java классов по WSDL.
  • Распарсить книжный online магазин. Попробовать несколько способов. Библиотека Jsoup. Парсинг по ссылке и парсинг из файла.
  • Использовать для логирования библиотеку log4j.
  • Создать MsSQL бд, сохранить результат парсинга в таблицу.
  • У каждой книги проверить валидность ISBN, используя SOAP web service.
  • Записать проверку в БД. Также создать report файл с данными о проверках на валидность ISBN.
  • Результат тестов в отчет Allure2.
  • Написать Junit тесты:
    - Status code 200
    - statusMessage OK
    - Страница имеет элемент title
    - Страница имеет элемент окно поиска
    - Страница имеет элемент список сортировки
    - Страница имеет элемент Search results
    - У каждой книги есть название и все они начинаются JAVA
    - У каждой книги есть название
    - У каждой книги есть вариант форм фактора (Paperback) либо (Booklet)
    - У каждой книги есть название и всего элементов с названием 10 на странице
    - У каждой книги есть автор
    - У каждой книги есть автор и всего элементов 10 на странице
    - У каждой книги есть цена и она в долларах
    - У каждой книги есть цена всего элементов с ценой 10 на странице
    - У каждой книги есть возможность Add cart
    - У каждой книги есть возможность Add cart и таких элементов 10 на странице
    - У каждой книги есть возможность Add cart и текст = Add cart
    - У каждой книги есть возможность Add to Wish List
    - У каждой книги есть возможность Add to Wish List и таких элементов 10 на странице
    - У каждой книги есть возможность Add to Wish List и текст = Add to Wish List
    - У каждой книги есть Availability заполнен
    - У каждой книги есть Availability и таких элементов 10 на странице
    - По каждому ISBN-13 от веб сервиса возвращfется true
    - У каждой книги есть ISBN-13 и всего таких элементов 10 на странице
    - У каждой книги есть Published заполнен
    - У каждой книги есть Published и таких элементов 10 на странице
    - У каждой книги есть фото
    - У каждой книги есть фото и таких элементов 10 на странице

Использовал:

Spring jdbc Spring context Wsimport Jsoup NamedParameterJdbc
Junit 5 JAXB MySQL MAMP Allure2

Constants – В классе описываю и инициализирую постоянные значения FILEPATH, MONEYCODE, URLSITE и тд.
Пакет models – Классы сгенерированные по WSDL с помощью утилиты wsimport.
ParsingHtmlBook – Парсинг по link и проверка в SOAP web service одной книги.
ParsingHtmlSoupRqSetUserAgent – Тесты Junit.
ParsingRecordDb – Парсинг из файла, проверка в SOAP web service всех книг со страницы. Вставка в БД.
Пакет resources описывал ранее в статьях, все стандартно. Настройки фрейворков, библиотек, подключения, тестовые данные.

По классу ParsingRecordDb. Парсим html файл FILEPATHHTML библиотекой Jsoup.

Document doc = Jsoup.parse(new File(FILEPATHHTML), "utf-8");
Elements inputElements = doc.select("ol > li");

Далее все действия проводим в цикле, так как на странице по 10 элементов и у каждого элемента дочерние.
Парсим элементы: inputElement.select

for (Element inputElement : inputElements) {
  String author = inputElement.select("div.abaproduct-details > p").text().replace("By ", "");
  String price = inputElement.select("div.abaproduct-details > h3").text();
  String isbn = inputElement.select("div.abaproduct-details > span:nth-child(4)").text().replace("ISBN-13: ", "");
  String title = inputElement.select("h3.title").text().replace("Java: ", "");

Через SOAP web service проверяем валидность ISBN.

//Soap request
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"application-config.xml"});
bean = context.getBean(ISBNService.class);
boolean isbnCheck = bean.getISBNServiceSoap().isValidISBN13(isbn);

Собираем коллекцию HashMap, и заполняем INSERT полученные данные в БД.

HashMap<String, Object> param = new HashMap<>();
param.put("title", title);
..................................
param.put("isbnCheck", isbnCheck);
String insertSql = "INSERT INTO ISBN_CATALOG (Title, Author, Price, ISBN, AvailabilityData, Published, ISBN_Check) VALUES (:title, :author, :price, :isbn, :availability, :published, :isbnCheck)";
 
// execute insert + count number of records / records processed by the executed query
nquOracle.update(insertSql, param);
update ++;

Результат в БД.

Интересный тест. С записью результата в лог файл. Библиотека BufferedWriter.

    @Test
    @DisplayName("Test ID = 3. Check the ISBN use webservice & create report TXT file.")
    public void checkIsbnWebServiceTest() {
        Elements links = doc.select("div.abaproduct-details > span:matches(\\d{13})");
        Assertions.assertEquals(COUNTELEMENT, links.size());
        try (BufferedWriter bw = new BufferedWriter(new FileWriter(FILEPATH))){
        for (Element link : links) {
            String replace = link.text().replace("ISBN-13: ", "");
            boolean validISBN13 = bean.getISBNServiceSoap().isValidISBN13(replace);
            Assertions.assertTrue(validISBN13);
            LOGGER.trace("Checking book ISBN = " + replace + ". Web service return: " + validISBN13);
            bw.write("Checking book ISBN = " + replace + ". Web service return: " + validISBN13);
            bw.newLine();
        }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Ссылка на GitHub:
Github ISBNProject

Releated Post