Skip to main content

Plugin MegaExample

Project description

Пример написания плагинов для TestY

В данном примере написан плагин для импорта тест-сьютов и тест-кейсов из .xlsx файла формата:

A B C
1 Имя Тест-Сьюта 1 Имя Тест-Кейса 1 Сценарий Тест-Кейса 1
2 Имя Тест-Кейса 2 Сценарий Тест-Кейса 2
3 Имя Тест-Кейса 3 Сценарий Тест-Кейса 3
4 Имя Тест-Сьюта 2 Имя Тест-Кейса 4 Сценарий Тест-Кейса 4
5 Имя Тест-Кейса 5 Сценарий Тест-Кейса 5

В результате создастся два тест-сьюта, первый с тест-кейсами 1-3, второй c тест-кейсами 4-5

Перед началом разработки

Установите TestY в ваше виртуальное окружение python, чтобы ide давала подсказки к импортам сервисов/моделей/хуков из ядра TestY.
pip install git+https://gitlab-pub.yadro.com/testy/testy.git
Если все сделано правильно в вашем коде не возникнет никаких ошибок импорта в следующем примере

from testy.plugins.hooks import TestyPluginConfig, hookimpl

Для того чтобы проверить локально что ваш плагин работает и для debug целей вы можете установить его
с помощью pip install -e path/to/plugin/root

Содеримое плагина

Файл setup.py

setup.py — это основной скрипт в Python, который используется для распространения и установки модулей. Этот файл позволяет корректно установить Python пакет на другой компьютер или в другую среду разработки.

В функцию setup передаются следующие параметры:

  1. package_name: Имя основного модуля плагина
  2. version: версия плагина
  3. description: описание плагина
  4. packages: список путей ко всем вашим файлам python (используется функция find_packages)
  5. install_requires: список имен и версий пакетов (точно как в файле requirements.txt)
  6. include_package_data: указывает, включать ли данные пакета при установке плагина.
  7. zip_safe: указывает, может ли плагин быть установлен и запущен в виде архива ZIP.
  8. entry_points: Указывает точки входа для плагина, нужно указывать обязательно, используется pluggy для нахождения имплементаций необходимых хуков
    Пример использования entry_points={'testy': ['allure-uploader-v2=allure_uploader_v2']} ключом в entry_points для плагинов testy будет testy

Файл MANIFEST.in

Если в setup.py параметр include_package_data = True, то в данном файле следует указать какие файлы следует включить в сборку, по умолчанию из плагина тянутся python модули, если нужны файлы с раширением .html путь до файлов должен быть указан в MANIFEST.in

Директория plugin_megaexample

Директория templates

В данной директории находятся .html файлы, которые используются для серверного рендеринга (используя django templates)

Статические файлы (css, js, etc) следует помещать в директорию static

Файл __init__.py

В данном файле находится код, который нужно выполнить при импортировании модулей из пакета, в нем следует импортировать класс, который задает конфигурацию плагина:

# Импортировать хуки из TestY
from testy.plugins.hooks import TestyPluginConfig, hookimpl


# Сконфигурировать свой плагин
class AllureUploaderConfig(TestyPluginConfig):
    package_name = 'allure_uploader_v2'
    verbose_name = 'Allure uploader v2'
    description = 'Upload your allure report into testy'
    version = '2.0.1'
    plugin_base_url = 'allure-uploader-v2'
    author = 'Roman Kabaev'
    index_reverse_name = 'config-list'
    # urls_module должен быть валидным путем импорта url-ов плагина
    # если плагин не подразумевает наличие url-ов в качестве аргумента передается URLS_SENTINEL
    urls_module = 'allure_uploader_v2.urls'


# Имплементация pluggy хука как точки входа в тести для вашей конфигурации плагина
@hookimpl
def config():
    return AllureUploaderConfig

Основные моменты при создании класса конфигурации:

  1. package_name: имя плагина, должно совпадать с названием директории
  2. plugin_base_url: задает эндпоинт в TestY, по которому будет доступен плагин ( https://testy.host/plugins/{plugin_base_url}/)
  3. index_reverse_name: имя по которому будет django reverse будет искать index страницу плагина,

Директория xlsx_parser_lib

Здесь находятся основные файлы для обработки данных.

ВАЖНО: Делайте все ваши импорты от src директории вашего плагина

plugin_root
│
├── src
│   ├── lib
│   │    ├── serializers.py
│   │    └── utils.py
│   ├── views.py
│   ├── model.py
│   └── urls.py
├── setup.cfg
├── setup.py
└── .gitignore
# Пример того как должны выглядеть импорты в коде
# views.py
from src.lib.utils import some_util
# serializers.py
from src.lib.utils import some_serialization_util
# module as a whole
import src.lib.utils as utils

Файл views.py

Содержит view классы в которых содержатся методы плагина

ВАЖНО: revers-names это имена которые помогают разрешать url-ы по читаемым именам например если вы используете серверный рендеринг django, он использует jinja темплейты и ваша ссылка может быть разрешена следующим образом:
<a class="nav-link" href="{% url 'plugins:allure_uploader_v2:config-list' %}">Configs</a> Формат reverse имени по которому будет разрешаться url следующий:
plugins:<your_app_label>:<your view name>
Пример:

# Пример разрешения url-ов
# urls.py
urlpatterns = [path('', views.ProjectListView.as_view(), name='index')]
# views.py
class UploadFileApiView(CreateAPIView):
    serializer_class = Serializer

    def create(self, request, *args, **kwargs):
        ...
        return redirect(reverse('plugins:plugin_megaexample:index'))

Файл urls

Установка плагина

  1. pip install git + https://gitlab-pub.yadro.com/testy/allure-uploader-v2.git
    
    Если плагин опубликован на pypi его можно установить по имени пакета
     pip install plugin-megaexample
    
  2. Для добавления вашего плагина в список зависимостей
    1. добавьте зависимость в файл testy/requirements/requirements.in
    2. Выполните следующие команды
       cd testy/requirements
       pip-compile dev-requirements.in
       pip-compile requirements.in
    
  3. Запустите TestY любым удобным вам способом

Project details


Download files

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

Source Distribution

plugin_megaexample-0.0.2.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

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

plugin_megaexample-0.0.2-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file plugin_megaexample-0.0.2.tar.gz.

File metadata

  • Download URL: plugin_megaexample-0.0.2.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for plugin_megaexample-0.0.2.tar.gz
Algorithm Hash digest
SHA256 569c66535e31b254e50e551595b07e997bdf77c33ff2556ea250f7e34a779fc5
MD5 3482ad3284fb5c4ab87785b419dd9a46
BLAKE2b-256 149d0fc243295518202ce04551f586527a5be0737d12bb1d651c0a047192f1b6

See more details on using hashes here.

File details

Details for the file plugin_megaexample-0.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for plugin_megaexample-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ff9287fc0f0c8efb5f9320c5e88f555fd65520f0dae6d781c6eb75a305aeebac
MD5 4adecb7007953cf8079ec9462431fd33
BLAKE2b-256 8914d1e622b5841a4f2e5d0d66965e1655247dbf589c25e65dcaa0fce60fe2e8

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