Skip to main content

Persona DSL - Framework for implementing Screenplay pattern in Python tests

Project description

persona-dsl: Фреймворк для автотестов на Python

persona-dsl — это современная библиотека для написания E2E и API автотестов, реализующая паттерн Screenplay. Она предоставляет выразительный язык для описания сценариев, управляет браузером (через Playwright) и автоматически генерирует детальные отчеты Allure.

📦 Установка

pip install persona-dsl
python -m playwright install --with-deps

🚀 Быстрый старт

1. Описание страницы (Page Object)

В persona-dsl используется Универсальная Архитектура Элементов. Основной класс Page сам является элементом-контейнером. Вложенные элементы добавляются через add_element.

# pages/login_page.py
from persona_dsl.pages import Page
from persona_dsl.pages.elements import Input, Button

class LoginPage(Page):
    def __init__(self):
        super().__init__()
        # Имя атрибута (self.username) будет использовано как имя элемента в отчетах
        self.username = self.add_element(Input(xpath="//input[@id='user']", name="Логин"))
        self.password = self.add_element(Input(xpath="//input[@id='pass']", name="Пароль"))
        self.submit   = self.add_element(Button(xpath="//button[@type='submit']", name="Вход"))

2. Написание теста

Тесты пишутся в стиле "Persona делает действия":

# tests/test_login.py
import pytest
from persona_dsl.ops.web import NavigateTo, Fill, Click
from persona_dsl.facts.web import CurrentPath
from persona_dsl.expectations.web import IsEqualTo
from pages.login_page import LoginPage

def test_login_flow(persona):
    login_page = LoginPage()

    # 1. Действия (Actions)
    persona.make(
        NavigateTo("/login"),
        Fill(login_page.username, "admin"),
        Fill(login_page.password, "secret"),
        Click(login_page.submit)
    )

    # 2. Проверка (Verification)
    # Получаем Факт (CurrentPath) и проверяем Ожидание (IsEqualTo)
    current_path = persona.get(CurrentPath())
    persona.check(current_path, IsEqualTo("/dashboard"))

🏗 Архитектура

1. Ключевые компоненты (Persona Core)

Компонент Назначение Пример
Persona Исполнитель. Хранит состояние и навыки. persona.make(...)
Skill "Навык". Дает доступ к инструментам. UseBrowser, UseAPI, UseDB
Ops Атомарная операция. Работает со Skill. Click, HttpRequest, ExecuteSQL
Step Бизнес-шаг. Группирует Ops. LoginStep, CreateOrder
Fact Запрос состояния (без изменений). CurrentPath, ElementText
Expectation Проверка значения. IsEqualTo, ContainsText

2. Универсальные Элементы (New!)

Больше нет разделения на Element и ElementContainer. Любой элемент может содержать другие элементы.

  • element.add_element(...): Регистрирует дочерний элемент.
  • Иерархия: Page -> Container -> Element.
  • Локаторы: Строятся автоматически по цепочке родителей.

3. Генераторный подход

Все шаги (Step, CombinedStep) — это генераторы, которые "выдают" (yield) операции для исполнения Персоной. Это позволяет persona-dsl перехватывать каждый шаг, логировать его в Allure и обрабатывать ошибки.


🛠 Инструменты и Утилиты

Генерация Page Objects

Не пишите селекторы вручную. Используйте генератор:

# Снять ARIA-снапшот и сгенерировать класс страницы
persona-page-gen --url http://localhost:8080 --output pages/home.py

Генерация API клиентов

# Генерация из OpenAPI/Swagger
persona-api-gen --url http://api.example.com/openapi.json --output skills/my_api.py

Запуск тестов

Тесты запускаются стандартной командой pytest:

pytest --env=dev tests/

⚙️ Конфигурация

conftest.py

Декларативное описание навыков и ролей:

PERSONA_SKILLS = [BaseSkill.BROWSER, BaseSkill.API]

config/{env}.yaml

Параметры окружения (dev, test, prod). Выбирается через --env=test.

Примеры конфигурации

Ниже представлен полный справочник всех возможных настроек. Большинство параметров унифицированы и работают идентично для Локального запуска и Selenoid.

Полный справочник (Global Reference)

Этот конфиг покрывает все возможности фреймворка. Неиспользуемые параметры можно опускать.

skills:
  browser:
    default:
      base_url: "https://my-app.test" # URL должен быть внутри навыка
      
      # --- Базовые настройки (Basic) ---
      type: chromium           # Тип: chromium, firefox, webkit, sberbrowser, msedge
      headless: true           # true = без UI (в контейнере тоже работает)
      channel: chrome          # (Optional) Канал: chrome, msedge, chrome-beta
      executable_path: ""      # (Optional) Кастомный путь к бинарнику
      version: "128.0"         # (Optional) Версия (для Selenoid или скачивания)
      
      # --- Размеры и Тайминги (Dimensions & Timings) ---
      viewport:
        width: 1920
        height: 1080           # Всегда используйте многострочный формат для читаемости
      slow_mo: 50.0            # Задержка между действиями (мс)
      default_timeout: 30000.0 # Таймаут поиска элементов (мс)
      default_navigation_timeout: 30000.0 # Таймаут загрузки (мс)

      # --- Аргументы и Флаги (Arguments) ---
      # Применяются и локально, и удаленно (через goog:chromeOptions)
      no_sandbox: true         # --no-sandbox
      ignore_https_errors: true # --ignore-certificate-errors
      disable_features:        # --disable-features=...
        - SidePanel
        - SberWhatsNew
      args:                    # Дополнительные аргументы
        - "--start-maximized"
        - "--disable-notifications"
        - "--disable-gpu"

      # --- Удаленный запуск (Remote / Selenoid) ---
      # Если URL задан, тесты пойдут в облако/контейнер
      selenoid_url: "http://selenoid.company.com:4444"
      
      session_retries: 3       # Повторные попытки при ошибке создания сессии
      session_timeout: 60.0    # Таймаут ожидания слота (сек)
      
      selenoid_options:
        enableVNC: true        # Включить Live-просмотр
        enableVideo: false     # Включить запись видео
        # name/videoName проставляются автоматически

📊 Отчетность (Allure + TaaS)

Фреймворк автоматически:

  1. Создает вложенные Allure Steps для каждого действия.
  2. Прикрепляет Скриншоты и Page Source при падении.
  3. Логирует HTTP запросы/ответы (если включено).
  4. Интегрируется с платформой TaaS (Test as a Service) для аналитики.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

persona_dsl-2026.2.9rc69.tar.gz (120.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

persona_dsl-2026.2.9rc69-py3-none-any.whl (160.5 kB view details)

Uploaded Python 3

File details

Details for the file persona_dsl-2026.2.9rc69.tar.gz.

File metadata

  • Download URL: persona_dsl-2026.2.9rc69.tar.gz
  • Upload date:
  • Size: 120.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for persona_dsl-2026.2.9rc69.tar.gz
Algorithm Hash digest
SHA256 35fb88504e6b02027a0cdb009348a28a0bc46740e5a85d346fd1d3aa5b97d0ae
MD5 b4670a817da4c3dda35d0820d775d4ac
BLAKE2b-256 c097952a07e95605003328e5896687bf160afffbf3756a76142149db8417339b

See more details on using hashes here.

File details

Details for the file persona_dsl-2026.2.9rc69-py3-none-any.whl.

File metadata

File hashes

Hashes for persona_dsl-2026.2.9rc69-py3-none-any.whl
Algorithm Hash digest
SHA256 ba94f523af80227adad67c3e6d8deeb36f3f4e62e7dd8a073eb2bd78cfa77419
MD5 a3103de96c3a6a56f68163267bc91a6d
BLAKE2b-256 e4880c1e18ec2f0e14158a6d172f733c700eb5ac8bbfaad74a6cf308b4b080fe

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page