
“Broken weblinks” – битые ссылки, важный показатель для каждого сайта. Переходы приводящие пользователей в никуда, нервируют отсутствие контента. Также не лучшим образом сказывается на ранжировании сайта в поисковой выдаче, Yandex и Google не любят также 404, и понижают выдачу. Таким образом, важным этапом тестирования будет, проверка сайта на битые ссылки. Не проверять же вручную, пишем автотест.
Задание:
Найти на сайте все Web ссылки. Проверить отсутствие / наличие битых ссылок в этом списке. С помощью библиотеки log4j осуществить логирование в файл.
Использовал:
Jsoup | log4j | Junit5 |
Один из тестов, ссылки парсим из файла. Собираем коллекцию из inputElements и тут же ее проверяем на дубли в коллекцию List
Document doc = Jsoup.parse(new File("D:\\JAVA\\Java_SRC\\CheckLinkStatus\\src\\main\\resources\\alfa.html"), "utf-8"); Elements inputElements = doc.select("a[href]"); //Remove duplicates from a List using Java 8 Lambdas List<Element> collect = inputElements.stream().distinct().collect(Collectors.toList()); |
Далее циклом пробегаемся по ссылкам, и вызываем GET запрос, ожидаю 200 ответ, ну или какой придет.
URL url = new URL("https://www.alfastrah.ru"+href); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setRequestMethod("GET"); connection.connect(); |
Вызов логирования + конфиги log4j.xml с настройкой записи лога в файл.
public static final Logger LOG = LogManager.getLogger(ParsingCheckLinkStatus.class); LOG.info(href); LOG.info("-----------------------------------"); |
<File name="MyFile" fileName="all.log" immediateFlush="true" append="false"> <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </File> |
При вызове Jsoup.connect(url) иногда приходится настраивать user agent для обхода примитивных защит на сайте. Нам было необходимо проверить ответы GET запроса по списку линков, игнорируя ошибки, решение: .ignoreHttpErrors(true)
Ссылка на GitHub:
Github ParsingCheckLinkStatusProject