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

Считывание с данных с файла в 2х тестах(Python)

email
python
Теги: #<Tag:0x00007fedbb64e938> #<Tag:0x00007fedbb64e708>

(Наталья Рощина) #1

Добрый вечер! Нужно написать 2 подобных теста на проверку есть ли в файле имейл, если есть генерировать новый. Столкнулась с такой проблемой: первый тест данные нормально считываются и использованный имейл записывается в файл. На втором тесте файла не находит, я предполагаю, что из-за того, что он был изменен добавлением имейла в 1м тесте. Кто знает, как решить проблему? Заранее спасибо:slight_smile:
Код:

email = params.email
        a = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + '/tests/used_emails.txt'
        with open(a, 'r') as f:
            for line in f.readlines():
                while email in line:
                    email = params.email
        self.driver.find_element(By.CSS_SELECTOR, AccountSettingsLocator.EMAIL_MEMBER).send_keys(email)
        with open(a, "a") as f:
            f.write(email + "\n")
            f.close()

(rmerkushin) #2

Не совсем понятно что вы пытаетесь вот тут сделать:

while email in line:
    email = params.email

Так же можно заменить for line in f.readlines() на просто for line in f. И можете убрать f.close() так как вы открываете файл с контекстным менеджером, и он сам его закроет.

P.S. если вам нужно просто понять есть ли нужный емейл в файле то просто считайте весь файл в стрингу и там уже делайте проверку. Что-то вроде такого:

s = f.read()
if email in s:
    тут генерация нового

Но вообще нужно смотреть на структуру файла.


(Наталья Рощина) #3

Спасибо за ответ! Проблема заключалась в том, что действие зацикливалось, генерировался одинаковый имейл. Код, который сработал у меня:

file_name = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + '/tests/used_emails.txt'
        with open(file_name, 'r') as f:
            s = f.read()
            count = 0
            while email in s:
                symbols = range(10000000, 10000000000000)
                a = random.choice(symbols)
                email = "klickly28+" + str(a) + "@gmail.com"
                count = count + 1
                if count == 10:
                    break
        self.driver.find_element(By.CSS_SELECTOR, AccountSettingsLocator.EMAIL_MEMBER).send_keys(email)
        with open(file_name, "a") as f:
            f.write(email + "\n")