Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 19, 2015 11:30:51

alexpf
Зарегистрирован: 2015-02-19
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

pybuilder как создать и настроить новый проект

Чтобы создать проект:
1) уже имеем Python и pip (в моём случае Python3 и pip3)
2) ставим pybuilder:

sudo pip install pybuilder
3) создаём проект:
mkdir myproj
pyb --start-project
Отвечаем да на все вопросы pyb
4) собираем проект:
cd myproj
pyb
А вот тут начинаются вопросы. Проект не собрался. Ругается:
BUILD FAILED - Missing prerequisite flake8 required by plugin python.flake8
Закомментил в build.py строчку:
use_plugin("python.flake8")
Собираю, ругается на coverage, поступил аналогично - проект собрался.

итого имеем проект с такой структурой:
myproj
├── build.py
└── src
├── main
│   ├── python
│   └── scripts
└── unittest
└── python
Документации на русском нет очень мало. Всё что находил на англ. содержит базовые примеры, или мне не хватило уровня англ. чтобы понять объяснения.
А вопросов хватает:
  1. Как прикрутить pytest и другие модули?
    Как вообще настраивать сборку, создавать task и action?
    Какова механика сборки, что происходит?
    Как приделать всё это к jenkins (например)

1 В попытке прикрутить pytest я добавил в build.py строчку:
use_plugin("pytest")
при сборке проекта pyb не ругнулся, но и не упомянул ничего о pytest. Что делать дальше я не понимаю. Например у maven понятно, там есть несколько стадий сборки, скажешь mvn test он выполнит сборку и тестирование. Ещё там видно какие модули maven подтянул из репозиториев.

2 Тут http://pybuilder.github.io/documentation/manual.html#.VOTqeHWsXCI описано что такое task и action.
Я добавил, по аналогии код в свой проект build.py:
...
name = "bilder_start"
default_task = "publish"
@init
def set_properties(project,logger):
    logger.info("Hello, PyBuilder--set_properties--")
    project.set_property('unittest_module_glob','selenium')
@task
def publish (logger):
   logger.info("Hello, PyBuilder--publish---")
@task
def say_hello ():
    print("Hello, PyBuilder--say_hello--")
@task
def say_hello_logger (logger):
   logger.error("Hello, PyBuilder--say_hello_logger--")
Выполнил pyb. В логе есть строки:
[INFO]  Hello, PyBuilder--set_properties--
...
[INFO]  Hello, PyBuilder--publish---
Тут вроде понятно, при сборке проекта выполнилась инициализация (set_properties) и default_task. А вот что писать в таске, не очень понятно. Ещё в логе упоминается отсутствие юниттестов. Их, по логике, надо положить в src/unittest/python/
Я тестер, по этому сам проект меня пока интересует мало. Тестить буду web приложение c помощью. selenium.

3 Очень хочется понимать логику и механику процесса сборки и тестирования приложения
4 Чтобы завершить круг хочется сделать чтобы Jenkins брал свежевыложенный проект из гита, проект собирался и результаты публиковались средствами jenkins

В общем тема не на один абзац. Надеюсь я не одинок в своих поисках. Ответы которые найду сам, обещаю писать сюда-же.

Отредактировано alexpf (Фев. 19, 2015 14:04:35)

Офлайн

#2 Фев. 20, 2015 09:20:46

alexpf
Зарегистрирован: 2015-02-19
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

pybuilder как создать и настроить новый проект

Получилось билдить проект и запускать юниттесты.

1) Решил вопрос с flake8 и coverage
У меня pybuilder установлен под python3, а эти модули я не поставил туда, следовательно:
pip3 install flake8 coverage

2) Упростил build.py, убрал всё лишнее:

from pybuilder.core import use_plugin, init
from pybuilder.core import task
use_plugin("python.core")
use_plugin("python.unittest")
use_plugin("python.install_dependencies")
use_plugin("python.flake8")
use_plugin("python.coverage")
use_plugin("python.distutils")
name = "bilder_start"
default_task = "publish"
@init
def set_properties(project):
    pass
3) Переименовал файлы с тестами. Не хорошая ситуация - pytest и unittest воспринимаю файлы с именами test_*.py, а pybuilder требует *tests.py. Может я чего не понимаю?

Теперь всё собирается и тесты выполняются
https://github.com/alex-pf/pybilder_start

Офлайн

#3 Фев. 20, 2015 10:51:13

alexpf
Зарегистрирован: 2015-02-19
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

pybuilder как создать и настроить новый проект

Непрерывная интеграция.
Вот он ключик ради которого всё затевалось:

pyb install_dependencies publish
install_dependencies - указывает на pyb, что нужно установить все необходимые пакеты, перед сборкой.
Необходимые пакеты - это:
use_plugin("python.core")
use_plugin("python.unittest")
use_plugin("python.install_dependencies")
use_plugin("python.flake8")
use_plugin("python.coverage")
use_plugin("python.distutils")
Всё что доступно в pip он установит.

И тут опять косяк!
Напомню, что pybuilder я ставил под python3 и проект мой должен собираться на третьем питоне.
Чтобы pip работал без sudo:
sudo adduser `id -un` staff

Запускаю сборку:
pyb install_dependencies publish
Получаю ошибку на этапе установки пакета coverage. Смотрю лог, а там:
error: could not create '/usr/local/lib/python2.7/dist-packages/coverage': Permission denied
Вот почему python2.7, причём он тут? Как и где указать, что проект надо собирать на python3.4?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version