Files
e2e_Pets/tests/testdata/generators.py
VolandSZ 3df40240e7 feat: add vetstation role tests (BP01 Dashboard navigation)
Создана структура тестов для роли 'Ветеринарная станция' по той же
архитектуре что и 01_vetdept.

tests/02_vetstation/
  conftest.py                   — fixtures_dir, shared_state
  fixtures/images/.gitkeep      — папка для фото артефактов
  fixtures/docs/.gitkeep        — папка для документов
  BP01_dashboard/
    test_bp01_dashboard.py      — class TestBP01Dashboard (7 шагов)

BP01 покрывает:
  s01 — Открыть главную страницу (Статистика)
  s02 — Проверить заголовок организации
  s03 — Проверить блок статистики регистрации животных
  s04 — Проверить таблицу последних зарегистрированных особей
  s05 — Перейти в раздел Животные
  s06 — Перейти в раздел Владельцы животных (URL с regex: /owners?type=individual)
  s07 — Перейти в раздел Единый реестр

Удалён старый CodeGen-тест 002_login_test.py
2026-09-01 22:46:27 +03:00

199 lines
6.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Генераторы тестовых данных по правилам ФЛК (Форматно-Логический Контроль).
=============================================================================
КАК ДОБАВИТЬ НОВЫЙ ГЕНЕРАТОР
=============================================================================
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
# pyrefly: ignore [missing-import]
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()