""" Генераторы тестовых данных по правилам ФЛК (Форматно-Логический Контроль). ============================================================================= КАК ДОБАВИТЬ НОВЫЙ ГЕНЕРАТОР ============================================================================= 1. Определи раздел (секцию) к которому относится данное поле. Разделы обозначены комментариями: # === РАЗДЕЛ: ... === 2. Если нужного раздела нет — добавь новый в конце файла по шаблону: # ============================================================================= # === РАЗДЕЛ: Название раздела === # ============================================================================= 3. Напиши функцию-генератор в нужном разделе: def gen_<сущность>_<поле>(<параметры>) -> <тип>: \"\"\" Краткое описание что генерирует функция. ФЛК: - Правило 1 (например: только цифры) - Правило 2 (например: длина ровно 15 символов) - Правило 3 (например: начинается с '643') Аргументы: param1 — описание параметра и его диапазон Пример вывода: '643094100123456' \"\"\" ... 4. Если функция использует Faker — используй уже созданный экземпляр `fake` (не создавай новые экземпляры в каждой функции). 5. Если данные статические (например, список имён) — помести их как константу перед функцией с именем _DATA_<НАЗНАЧЕНИЕ>. ============================================================================= ПРИМЕР ИСПОЛЬЗОВАНИЯ В ТЕСТЕ ============================================================================= from tests.testdata.generators import gen_microchip, gen_animal_name class TestBP02RegisterAnimal: def test_s01_fill_form(self, browser_page, bp_state): name = gen_animal_name() microchip = gen_microchip() browser_page.fill("#animal-name", name) browser_page.fill("#microchip", microchip) bp_state["animal_name"] = name # передаём следующему шагу bp_state["microchip"] = microchip ============================================================================= """ import random import string from datetime import date, timedelta from faker import Faker # Единственный экземпляр Faker на весь модуль — не создавай новые в функциях fake = Faker("ru_RU") # ============================================================================= # === РАЗДЕЛ: Животное === # ============================================================================= _DATA_ANIMAL_NAMES = [ "Мурка", "Барсик", "Шарик", "Рекс", "Симба", "Дружок", "Звезда", "Кличко", "Жорик", "Буся", "Тузик", "Маркиз", "Пуговка", "Снежок", "Рыжик", ] def gen_animal_name() -> str: """ Кличка животного. ФЛК: - Только кириллица - Первая буква заглавная - От 2 до 20 символов Пример вывода: 'Мурка' """ return random.choice(_DATA_ANIMAL_NAMES) def gen_birth_date(min_years: int = 0, max_years: int = 20) -> str: """ Дата рождения животного. ФЛК: - Не позднее сегодняшнего дня - Не ранее max_years лет назад - Формат: ДД.ММ.ГГГГ Аргументы: min_years — минимальный возраст в годах (по умолчанию 0 = только что рождён) max_years — максимальный возраст в годах (по умолчанию 20) Пример вывода: '15.03.2021' """ min_days = min_years * 365 max_days = max_years * 365 delta = random.randint(min_days, max_days) birth = date.today() - timedelta(days=delta) return birth.strftime("%d.%m.%Y") # ============================================================================= # === РАЗДЕЛ: Маркировка животного === # ============================================================================= def gen_microchip() -> str: """ Номер микрочипа. ФЛК: - Ровно 15 цифр - Стандарт ISO 11784/85 - Первые 3 цифры — код страны (643 = Россия) [опционально] Пример вывода: '643094100123456' """ return "".join(str(random.randint(0, 9)) for _ in range(15)) def gen_tattoo() -> str: """ Номер клейма (тату-маркировка). ФЛК: - 2 заглавные латинские буквы - 4 цифры - Итого 6 символов Пример вывода: 'AB1234' """ letters = "".join(random.choices(string.ascii_uppercase, k=2)) digits = "".join(str(random.randint(0, 9)) for _ in range(4)) return letters + digits # ============================================================================= # === РАЗДЕЛ: Владелец животного === # ============================================================================= def gen_owner_full_name() -> str: """ ФИО владельца. ФЛК: - Только кириллица - Формат: Фамилия Имя Отчество Пример вывода: 'Иванов Иван Иванович' """ return fake.name() def gen_owner_phone() -> str: """ Мобильный телефон владельца. ФЛК: - Российский номер - Начинается с +7 - Код оператора: 9XX (мобильные) - Формат: +7(9XX)XXX-XX-XX Пример вывода: '+7(916)543-21-09' """ code = random.randint(900, 999) part1 = random.randint(100, 999) part2 = random.randint(10, 99) part3 = random.randint(10, 99) return f"+7({code}){part1}-{part2}-{part3}" def gen_owner_email() -> str: """ Email владельца. ФЛК: - Валидный формат email - Латинские символы Пример вывода: 'ivanov.ivan@example.com' """ return fake.email()