[Заметка] - простой и удобный Web Framework Bottle

Данная тема не касается на прямую автоматизации, но все равно хочу в кратце рассказать вам, потому что данный фреймворк мне сильно понравился.
:smile:

Очень часто бывает, что нужен быстрый и простой фреймворк для небольших web приложений. В таком случае здорово подойдет - Bottle!

Bottle - это быстрый и легкий WSGI (Web Server Gateway Interface) микро веб-фреймворк для Python. Его удобно использоваться как основу для небольшого фронтеда, внутреннего сервиса не ориентированного на большие нагрузки.

WSGI - это стандарт обмена данными между веб-сервером и веб-приложением.

Достоинства Bottle:

  • Bottle не имеет никаких зависимостей, кроме стандартной библиотеки Python
  • URL routing с поддержкой URL параметров
  • Встроенный HTTP сервер
  • Поддержка шаблонов
  • Работа с GET и POST запросами
  • Поддержка адаптеров для большого числа WSGI/HTTP-серверов
  • Удобная отладка в “debug” режиме
  • Авто-абновление (позволяет автоматически выявлять изменения в скрипте и загружать новый вариант, когда он будет вызван повторно, без перезапуска сервера. )
  • Error-route для различных ошибок
  • Можно функцию связать более чем с одним маршрутом
  • Работа с обычными и шифрованными cookies

Из особенностей:
Нет статического контента. Каждая страница отображается в браузере после динамической генерации, когда вызывается адрес страницы. Таким образом, например, чтоб подключить CSS, либо добавить картинку , нужно использовать static_file метод

Официальная документация: http://bottlepy.org

Пример создания странички за 15 минут:

**1.**Устанавливаем библиотеку:

    easy_install bottle

**2.**Главный код приложения page.py:


import datetime
from bottle import route, run, template, static_file, error

@route('/')
def index():
    message = "Automated-testing.info"
    now_time = datetime.datetime.now()
    cur_hour = now_time.hour
    return template('page_template', cur_hour=cur_hour,  msg=message)


@route('/static/<filename>')
def server_static(filename):
    return static_file(filename,
                       root='/home/katerina/PycharmProjects/Example/static')


@route('/images/<filename>')
def send_image(filename):
    return static_file(filename,
                       root='/home/katerina/PycharmProjects/Example/images',
                       mimetype='image/png')

@error(404)
@error(403)
def mistake(code):
    return 'Error on page'

if __name__ == "__main__":
    run(host='localhost', port=8080)


**3.**Шаблон page_template.tpl:

<!DOCTYPE html>
<html>
<head>
<link href="static/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div>
<img alt="Logo images" height="130" width="100" src="images/logo.png" alt="Logo images">
</div>
<p>{{msg}}</p>

%if cur_hour in range(6,10):
    <h1>Good morning!!!</h1>
%elif cur_hour in range(11,18):
    <h1>Good day!!!</h1>
%elif cur_hour in range(19,23):
    <h1>Good evening!!!</h1>
%else:
    <h1>Good night!!!</h1>
%end
</body>
</html>

Готово!


Результат:

1 лайк

И тут логически напрашивается вопрос… а при чем тут автоматизация тестирования?

И я постараюсь ответить на этот вопрос:

  • Как то раз, у меня получилось создать систему отчетности с веб интерфейсом, которой скармливались имейл отчеты по проходу авто-тестов, а на выходе можно было получить отчет по некоторым критериям и периоду времени. Реально экономило пару дней в месяц на ручные подсчеты.

  • Простой пример: у меня на машине была база с Ораклом, которую программисты часто просили запускать. Дело в том, что тогда Оракл сильно тормозил мою систему, и держать включённым я его не мог. Тогда, за 20 минут, удалось сделать веб сайт на походем фреймворке для Perl – http://mojolicio.us, в котором было 2 кнопки: старт и стоп, которые в свою очередь через командную строку стартовали/останавливали Оракл. Доступ к этому севису я и отдал программистам.

Катя, так чем же этот фреймворк вам помог практически? Или есть планы на что-то большое, например, свой Дженкинс?

Согласитесь, что у автоматизатора бывают задачи связанные не только с написанием авто-тестов :thought_balloon:

С помощью данного фреймворка я писала информационную панель, которая выводит состояния виртуальных машин. Страница dashboard с многими статусами и состояниями.

Свой Jenkins? Наврятли) Мне полностью хватает его функциональности. :dart:

В альтернативу сказанного, я вот использовал flask http://flask.pocoo.org/ для того, чтобы поднять веб-сервер для публичного доступа к тестовым результатам, которые прогонялись на удаленном сервере.

@Katya и все равно спасибо за заметку

1 лайк