
Продолжаем изучение 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