Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Проблема с обработкой логов в тесте. Как с помощью ретерна переопределить переменную?

webdriver
python
Теги: #<Tag:0x00007fedb7ef51f8> #<Tag:0x00007fedb7ef5090>

(Владислав Пионтковский) #1

Здравствуйте. Не могу решить одну проблему. Пишу на пайтоне автотест с использованием Webdriver. Автотест проверяет страницы на 404\505 ошибки (дженкинс выдает 200-й реквест, пользователю показывает картинку с ошибкой.). Проблема с обработкой логов.

Коротко о структуре проекта:
мain.py - собственно наш запускаемый файл, вся логика, вызовы, обработчики лежат в нем;
test.py - наборы тестов. файл создан для более удобного содержания тестов и содержит только тесты, никаких обработчиков.
config.py - файл конфигурации, нам не пригодится.

В мain.py есть класс Log, там прописаны методы для логирования. Они работают не только в этом тесте, так что ошибки там нет.
Итак, в мain.py есть класс Fox. Его код:

class Fox:
@staticmethod
    def handler(filename):
        while True:
            driver = WebDriver(executable_path=config.webdriver_location)
            with open(filename, 'r') as file:
                links = file.read().split('\n')
            for link in links:
                url = config.url + link
                error_type = 'OK'
                result_object = None
                driver.get(url)
                test.Hybris.start_categories_hybris(driver)
                if error_type != 'OK':
                    Log.pages(link, result_object, error_type)
            driver.quit()

В test.py есть класс Hybris. Его код:

class Hybris:
    @staticmethod
    def start_categories_hybris(driver):
        start = Hybris()
        start.error_404_505(driver)

    @staticmethod
    def error_404_505(driver):
        error_type = 'OK'
        result_object = None
        try:
            body = driver.find_element(By.TAG_NAME, 'body')
            class_attribute = body.get_attribute('class')
            if 'notFound' in class_attribute:
                error_type = 'error_404'
            elif 'error-page' in class_attribute:
                error_type = 'error_505'
            return error_type, result_object
        except NoSuchElementException:
            pass

Ну и запускаю я все это дело из файла main.py, вот так:

if __name__ == '__main__':
    categories = threading.Thread(name='categories', target=Fox.handler(filename=config.categories_filename))
    categories.start()

Проблема состоит в том, что метод из другого файла я вызываю верно, он обрабатывается (проверял), метод возвращает верные значения если считываю их из test.py(проверял), но main.py не принимает ретерн, а отображает только присвоенные значения.
Вопрос: как с помощью ретерна из одного файла я могу переопределить переменную в другом файле? Такое возможно? Спасибо зарание.


(rmerkushin) #2

На сколько у вас “кучерявые” страницы в плане текста для 404 и 505? Может быть есть смысл использовать requests библиотеку, а не Selenium? Это будет ощутимо быстрее.
P.S.: И прикрутите к тестам какой нибудь xUnit фреймворк, например pytest