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 передаются следующие параметры:
- package_name: Имя основного модуля плагина
- version: версия плагина
- description: описание плагина
- packages: список путей ко всем вашим файлам python (используется функция find_packages)
- install_requires: список имен и версий пакетов (точно как в файле requirements.txt)
- include_package_data: указывает, включать ли данные пакета при установке плагина.
- zip_safe: указывает, может ли плагин быть установлен и запущен в виде архива ZIP.
- 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
Основные моменты при создании класса конфигурации:
- package_name: имя плагина, должно совпадать с названием директории
- plugin_base_url: задает эндпоинт в TestY, по которому будет доступен плагин ( https://testy.host/plugins/{plugin_base_url}/)
- 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
Установка плагина
-
pip install git + https://gitlab-pub.yadro.com/testy/allure-uploader-v2.git
Если плагин опубликован на pypi его можно установить по имени пакетаpip install plugin-megaexample
- Для добавления вашего плагина в список зависимостей
- добавьте зависимость в файл
testy/requirements/requirements.in - Выполните следующие команды
cd testy/requirements pip-compile dev-requirements.in pip-compile requirements.in
- добавьте зависимость в файл
- Запустите TestY любым удобным вам способом
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
569c66535e31b254e50e551595b07e997bdf77c33ff2556ea250f7e34a779fc5
|
|
| MD5 |
3482ad3284fb5c4ab87785b419dd9a46
|
|
| BLAKE2b-256 |
149d0fc243295518202ce04551f586527a5be0737d12bb1d651c0a047192f1b6
|
File details
Details for the file plugin_megaexample-0.0.2-py3-none-any.whl.
File metadata
- Download URL: plugin_megaexample-0.0.2-py3-none-any.whl
- Upload date:
- Size: 8.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff9287fc0f0c8efb5f9320c5e88f555fd65520f0dae6d781c6eb75a305aeebac
|
|
| MD5 |
4adecb7007953cf8079ec9462431fd33
|
|
| BLAKE2b-256 |
8914d1e622b5841a4f2e5d0d66965e1655247dbf589c25e65dcaa0fce60fe2e8
|