import csv import logging from concurrent.futures._base import as_completed from concurrent.futures.thread import ThreadPoolExecutor import pytest import requests from ui_automation_framework.core.init_driver import InitDriver from ui_automation_framework.utils import CoreConfig from ui_automation_framework.utils import logger as cl @pytest.mark.usefixtures("set_up", "one_time_set_up") class TestImages: @pytest.fixture(autouse=True) def classSetup(self): self.log = cl.Logger(logging.DEBUG) self.base_page = InitDriver(self.driver) self.session = requests.session() def test_images(self): self.base_page.go_to_url(CoreConfig.ENV_BASE_URL) images = self.base_page.get_elements("//li/img", "xpath") urls = [] for image in images: image_url = self.base_page.get_attribute_value("", "", image, "src") urls.append(image_url) data = [] with ThreadPoolExecutor() as executor: future_to_status_code = {executor.submit(self.get_image_status_code, url): url for url in urls} for future in as_completed(future_to_status_code): url = future_to_status_code[future] code = future.result() data.append([url, code]) self.images_csv_writer(data, 'missing_images.csv') def get_image_status_code(self, url): status_code = self.session.get(url).status_code return status_code def images_csv_writer(self, data, path): with open(path, "a", newline='') as csv_file: writer = csv.writer(csv_file) writer.writerows(data)