Skip to main content

Persona DSL - Framework for implementing Screenplay pattern in Python tests

Project description

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

persona-dsl — это библиотека для E2E-, API- и интеграционных тестов, построенная вокруг Screenplay-подхода и тесно связанная с runtime/discovery/tooling, которые использует TaaS.

Установка

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

Базовая модель

Публичный слой строится вокруг:

  • Persona
  • Ops
  • Step
  • CombinedStep
  • алиасов Action, Fact, Expectation, Goal
  • Page и Element
from __future__ import annotations

from persona_dsl import Goal
from persona_dsl.ops.web import Click, CurrentPath, Fill, NavigateTo
from persona_dsl.expectations.generic import IsEqualTo
from persona_dsl.pages import Button, Page, TextField


class LoginPage(Page):
    expected_path = "/login"

    username = TextField(name="username", accessible_name="Логин")
    password = TextField(name="password", accessible_name="Пароль")
    submit_button = Button(name="submit_button", accessible_name="Войти")


def test_login_flow(persona) -> None:
    login_page = LoginPage()

    persona.make(
        NavigateTo(login_page),
        Fill(login_page.username, "admin"),
        Fill(login_page.password, "secret"),
        Click(login_page.submit_button),
    )

    current_path = persona.get(CurrentPath())
    persona.check(current_path, IsEqualTo("/dashboard"))

Страницы и элементы

Page наследуется от Element и добавляет:

  • expected_path
  • default_query_params
  • build_url(base_url=None)

Element поддерживает:

  • declarative class attrs
  • aria_ref
  • multi-strategy resolve
  • .using(...), .robust(), .resolve_or(...)
  • ElementList
  • Table и declarative table DSL

VirtualPage используется для динамической in-memory модели страницы.

Генерация page object'ов

PageGenerator и GeneratePageObject генерируют declarative page objects.

Для обычных generated страниц текущий контракт такой:

  • committed generated file не содержит def __init__(...)
  • не содержит self.add_element(...)
  • не содержит self.add_element_list(...)
  • хранит expected_path, snapshot/screenshot paths и aria_ref
  • для повторяющихся анонимных контролов может выпускать declarative group, доступную по индексу как page.otp_kod[0]
  • внутри таких групп item-level aria_ref может намеренно отсутствовать, чтобы resolve шёл через container scope и role + index
  • поддерживает merge/regeneration
  • использует footer-секции unresolved/archived diagnostics

CLI:

persona-page-gen --url http://localhost:8080 --output tests/pages/home_page.py

Из теста:

from persona_dsl.ops.web import GeneratePageObject, NavigateTo


def test_generate_home_page(persona) -> None:
    persona.make(NavigateTo("/"))
    persona.make(
        GeneratePageObject(
            class_name="HomePage",
            output_path="tests/pages/home_page.py",
            wait_for_state="networkidle",
            sleep_before=1,
        )
    )

Таблицы

Актуальный table contract включает:

  • Column(...)
  • TableColumn
  • table.filters.*
  • row.elements.*
  • row.element(column)
  • row.value(column)
  • row.details
  • table.select_all_checkbox

Generator использует этот DSL и для обычных, и для сложных таблиц.

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

Конфигурация проекта живёт в config/{env}.yaml и tests/conftest.py. Для запуска:

persona test tests/
persona test tests/ --include-tag smoke
persona test tests/ --exclude-tag generation

persona test сам включает Persona pytest plugin, Allure results и xdist defaults. Сырой pytest остаётся низкоуровневым debug-путём, если проекту нужно собрать команду вручную. Отбор тестовых наборов в Persona делается через @tag(...) и --include-tag/--exclude-tag, а не через pytest -m.

Если нужен локальный генератор страниц или шаблонный проект, ориентируйтесь на example_template.

Где смотреть дальше

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.4.10rc147.tar.gz (410.4 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.4.10rc147-py3-none-any.whl (507.0 kB view details)

Uploaded Python 3

File details

Details for the file persona_dsl-2026.4.10rc147.tar.gz.

File metadata

  • Download URL: persona_dsl-2026.4.10rc147.tar.gz
  • Upload date:
  • Size: 410.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for persona_dsl-2026.4.10rc147.tar.gz
Algorithm Hash digest
SHA256 c29fb6a9ca445d7a9a91c52e59cefab8f9d511ed352e8c0350691c169f4f5f36
MD5 3ba3ec6b33229515db8b88d4b0eb09e7
BLAKE2b-256 5458dd63685d00a558ff16d89f82563c47b9cc29e9e7112e7d7c106420bf0380

See more details on using hashes here.

File details

Details for the file persona_dsl-2026.4.10rc147-py3-none-any.whl.

File metadata

File hashes

Hashes for persona_dsl-2026.4.10rc147-py3-none-any.whl
Algorithm Hash digest
SHA256 54daf1c8a135ab2f52615d750836ad6587669171ebac336438761b5790b9197c
MD5 7b505c212401d0d13fff8bc253ce50b6
BLAKE2b-256 e8bcb68d5c84f6d2af7456416814e3af50ab46e3c5cff9d634eba2b28a847f8e

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