Рубрики
Без рубрики

Строительство reзов API с колбой, Postman & Pteest – часть 3 (ЧИТАТЬ ВРЕМЯ: 20 минут)

Строительные расходы Manager API с колбой, Pтойной и TDD. Теги с Python, WebDev, Showdev, начинающими.

Введение

Сегодня в нашей последней части серии 3 части я буду охватывать создание фактических API для отдыха с Pтойцами.

Для тех новых серий вы можете посмотреть часть 1, чтобы понять различные инструменты, которые я буду использовать для создания конечных точек API отдыха API менеджера расширений.

Кроме того, этот взгляд на часть 2 в издевании конечных точек API для прототипирования ваших проектов API.

Инструмент

Исходный код

Конечные точки Создавать

Теперь для последней части серии мы будем охватывать Круд Функции, которые используют только Получить Способ HTTP-запроса.

С момента создания Поставить , СООБЩЕНИЕ и Удалить Конечные точки идентичны, было бы лучше представить использование Pteest Отказ

Конечные точки и документация API Заключительная часть:

Документация API в Postman

  • Получить список транзакций – ПОЛУЧАТЬ
  • Создать новую транзакцию – СООБЩЕНИЕ
  • Обновите индивидуальную транзакцию – ПОМЕЩАТЬ
  • Удалить отдельную транзакцию – УДАЛЯТЬ

Настройка проекта

Создание папки проекта

Создайте свой проект в Linux , создавая папку под названием Excanses_manager Отказ

Далее в создании виртуальной среды, используя Пипнв и переключиться в виртуальную среду Python.

pipenv install
pipenv shell 

Установка пакетов Python

Теперь вам нужно установить следующее, набрав команду ниже.

pipenv shell
pipenv install Flask flask-cors pytest pytest-cov pytest-flask requests pylint

С помощью базовых пакетов Python установлена, мы будем продолжать создавать наше первое приложение для колб.

Создание вашего первого приложения для колб

Создайте файл под названием excanseses_manager.py Затем откройте свой IDE или редактор выбора, чтобы внести изменения в содержимое файла.

expanses_manager.py

from flask import Flask # Import the flask web server
app = Flask(__name__) # Single module that grabs all modules executing from this file

@app.route('/') # Tells the flask server on which url path does it trigger which for this example is the index page calling "hello_world" function.
def hello_world():
    return 'Hello, World!'

Выполнение вашего приложения Flask

Теперь, как только вы добавите код в файл, нам нужно выполнить следующую команду, запустите это приложение Flask:

export FLASK_APP=expanses_manager.py
flask run

Поздравляю Вы только что создали ваше первое приложение для колб. Вы можете открыть свой браузер и ввести следующий URL «127.0.0.1:5000» в свой браузер. Чтобы отменить вам нужно нажать Ctrl + C выйти из сервера.

Режим разработки в колбе

Введите следующую команду, чтобы мы включим Развитие режим.

В этом режиме ваше приложение Flask имеет отладчик и автоматически перезапускается самим собой всякий раз, когда есть изменение в коде.

export FLASK_ENV=development
flask run

Понимание маршрутизации

Маршрутизация – это то, как вы назначаете для загрузки определенной веб-страницы. Это может быть простой пример, как показано ниже:

@app.route('/') # Routes you to the index page
def index():
    return 'Index Page'

@app.route('/hello') # Routes you to the page with http://127.0.0.1:5000/hello/
def hello():
    return 'Hello, World'

@app.route('/projects/') # URL with trailing slash
def projects():
    return 'The project page'

@app.route('/about') # URL without a trailing slash
def about():
    return 'The about page'

Это может быть очень просто для очень сложного, я не буду сильно прикрывать, так как мы сосредоточиваемся на строительстве Получить Функция Расширяющийся менеджер Отказ

Я приложу ссылку на раздел ссылок для лучшего понимания маршрутизации.

Обратите внимание, что по По умолчанию Если вы не включите URL с помощью Трейлинг Slash что это / Отказ

Колба будет автоматически Перенаправить тебя 404 Когда вы добавляете страницу с / в конце URL.

Создание вашей первой конечной точки API для отдыха

Если вы не прочитали более ранние части серии, пожалуйста, перейдите в часть 2 или 3 серии, чтобы понять, что такое HTTP-методы и код состояния Отказ

Вы можете посмотреть на пример ниже, изменив свой excanseses_manager.py код к следующему, чтобы понять, как это работает.

from flask import Flask, request, jsonify # Imports the flask library modules
app = Flask(__name__) # Single module that grabs all modules executing from this file


@app.route('/login', methods=['GET', 'POST']) # HTTP request methods namely "GET" or "POST"
def login():
    data = []
    if request.method == 'POST': # Checks if it's a POST request
        data = [dict(id='1', name='max', email='max@gmail.com')] # Data structure of JSON format
        response = jsonify(data) # Converts your data strcuture into JSON format
        response.status_code = 202 # Provides a response status code of 202 which is "Accepted" 

        return response # Returns the HTTP response
    else:
        data = [dict(id='none', name='none', enmail='none')] # Data structure of JSON format
        response = jsonify(data) # Converts your data strcuture into JSON format
        response.status_code = 406 # Provides a response status code of 406 which is "Not Acceptable"

        return response # Returns the HTTP response

Теперь вы можете открыть свой Почтальон Создать запрос под названием Тестирование Запрос входа в систему Отказ

Введите этот URL http://127.0.0.1:5000/login К вашему запросу и установите метод HTTP, чтобы быть либо Получить или Пост Запрос затем нажмите Отправить чтобы получить результат ответа.

Создание сценария Bash для настройки конфигурации

Мы будем создавать Bash Сценарий, который позволяет выполнять вышеуказанные настройки без постоянного набора команды.

Создайте файл, который называется env.sh и заполните содержимое файла с помощью кода ниже.

env.sh

#!/usr/bin/env bash
pipenv shell
export FLASK_ENV=development FLASK_APP=expanses_manager.py
flask run

Как только вы создали файл под названием env.sh , вам нужно изменить разрешение на файл, используя эту команду:

$ chmod 775 env.sh

Чтобы запустить скрипт Bash, вы должны быть в проекте root папка с использованием команды ниже.

$ ./env.sh

Создание вашего первого тестового корпуса

Теперь мы начнем с создания нашего первого тестового корпуса для вашей конечной точки API Flask.

Мы проверим, если приложение Flask работает, проверяя, если index.page служит HTTP-ответом.

Создание test_endpoints.cy.

Итак, давайте создадим тестовый скрипт test_endpoints.cy И добавьте следующий код на ваш вновь созданный файл:

test_endpoints.py

import pytest
import requests

url = 'http://127.0.0.1:5000' # The root url of the flask app

def test_index_page():
    r = requests.get(url+'/') # Assumses that it has a path of "/"
    assert r.status_code == 200 # Assumes that it will return a 200 response

Выполнение test_endpoints.cy.

Есть приложение Flask Бег в Первый Терминал. Тогда создайте Второй Терминал и запустить pteest Используя команду ниже:

$ pytest

Вы видели F. рядом с вашим test_endpoints.cy Это означает, что ваш тестовый случай имеет не удалось Отказ

Пожалуйста, не беспокоитесь, так как ожидаемое поведение на нашей первой попытки, поскольку мы не включили Индекс конечной точки что Возвращает А ответ Отказ

Чтобы исправить свой тестовый скрипт, вы можете выбрать следующее предложение PteSt, изменив код состояния на 400 вместо 200 и снова выполнить тест.

Тест делает пройти с “.” И все же это не сможет чек об оплате Если ваше приложение Flask является Бег под корневая папка и возвращает Http 200 отклик.

Поэтому нам нужно создать конечную точку индекса вместо исправления наших тестовых случаев.

Создайте вашу конечную точку индекса

Так как тестовый случай в test_index_page требует конечной точки с пути / и HTTP-ответ 200 Отказ

Мы добавим индексную страницу в нашем excanseses_manager.py :

expanses_manager.py

@app.route('/', methods=['GET'])
def index_page():
    response = jsonify('Hello World!!!')
    response.status_code = 200

    return response

Теперь введите питиш -В в 2-й терминал в то время как ваш 1-й терминал выполняет приложение Flask.

Команда pytest -v Предоставляет вам дополнительную информацию о ваших тестовых случаях, которые полезны для отладки ваших тестовых случаев и конечных точек Python.

Теперь после выполнения предыдущей команды вы должны увидеть, что ваши тестовые случаи проходят. Хорошая работа!!!! При создании вашей первой конечной точки и тестового корпуса.

Давайте возьмем заслуженный отдых и перейдем к следующему разделу, когда вы готовы погрузиться дальше.

Создание конечных точек управления расходами

Так как вы начали создавать свою первую конечную точку в Колбу и тестовые случаи, использующие Питиш .

Давайте рассмотрим о том, как список API нужно создать, чтобы создать менеджер расширений:

Список API для создания:

  • Получить список транзакций – ПОЛУЧАТЬ
  • Создать новую транзакцию – СООБЩЕНИЕ
  • Обновите индивидуальную транзакцию – ПОМЕЩАТЬ
  • Удалить отдельную транзакцию – УДАЛЯТЬ

Получить список транзакций

Теперь начните с первого Получить конечная точка, которая предоставляет список транзакций.

Что такое Голый минимальный тест Что нам нужно создать, чтобы проверить, работает ли это?

Создание пользовательских историй

Пользовательские истории полезны, чтобы выяснить, что необходимо создать перед реализацией.

Мы будем принимать это Сценарий пользовательского истории Чтобы построить тестовый случай пользователя:

As (role of the user), I want to (the activity) so that  (desired result)

Так что это будет выглядеть как что-то вроде этого при создании пользовательской истории

Как Пользователь Я хочу иметь Снимок моих расходов Так что Я знаю, где я трачу свои деньги

Создание тестового случая для баланса в менеджере расходов

С этим Пользовательская история Мы можем построить голый минимальный тестовый случай. Который должен показать Баланс что у нас на нашем счете.

test_endpoints.py

def test_get_balance_in_transacations():
    r = requests.get(url+'/transactions/')

    assert r.status_code == 200

Теперь давайте запустим ваш недавно созданный test_get_balance_in_transactions Тестовый случай тогда.

Так как вы не создали транзакции Конечная точка, это не просит вас изменить свой тест, чтобы быть 404 Отказ

Для этого, чтобы пройти, нам нужно назвать конечную точку транзакции в excanseses_manager.py Отказ

expanses_manager.py

@app.route('/transactions/', methods=['GET'])
def list_of_transactions():
    response = jsonify({})
    response.status_code = 200
    return response

С этим вы проходили свой первый тест. Теперь давайте создадим еще один тестовый случай, который проверяет содержание ответа на Баланс 0 Отказ

test_endpoints.py

def test_get_balance_in_transacations():
    r = requests.get(url+'/transactions/')
    assert r.status_code == 200

    data = r.json()
    assert data[balance'] == 0

Ожидайте, что ваши тестовые случаи потерпят неудачу, если вы запустите вышеуказанный код. Нам нужно изменить excanseses_manager.py для этого пройти.

expanses_manager.py

@app.route('/transactions/', methods=['GET'])
def list_of_transactions():
    response = jsonify({'balance': 0})
    response.status_code = 200
    return response

Когда вы запускаете его снова, вы увидите, что это проходит Для этого теста.

Вы закончили пользовательскую историю?

Так что теперь мой вопрос для вас, мы исполняли наши Пользовательская история Для этого теста?

Если нет, какие вещи все еще отсутствуют? Хорошее предположение будет конечными точками, которую вы создали в Часть 2 Отказ

Так как мы знаем, что кроме Баланс Менеджера расходов, нам нужно получить Количество транзакций основана на конечной точке.

До этого нам нужно очистить наш код для этого test_get_balance_in_transacations конечная точка.

test_endpoints.py

def test_get_balance_in_transacations():
    r = requests.get(url+'/transactions/')
    data = r.json()

    assert r.status_code == 200
    assert data['balance'] == 0

Получить количество транзакций в конечной точке транзакций

После того, как вы сделали с этим кодом, создайте новый тестовый случай, который тестирует количество транзакций в Транзакции конечная точка.

test_endpoints.py

def test_get_number_of_transacations():
    r = requests.get(url+'/transactions/')
    data = r.json()

    assert r.status_code == 200
    assert len(data['transactions']) != 0

Этот тестовый случай проверяет Общее количество транзакций Должно быть больше, чем 0 Отказ

Еще раз вашу Тестовый случай не удается Итак, давайте создадим транзакцию для тестового случая для пройти Отказ

expanses_manager.py

@app.route('/transactions/', methods=['GET'])
def list_of_transactions():
    response = jsonify({'balance': 0, 
    'transactions': [ 
        {}
    ]})
    response.status_code = 200
    return response

Проверка полей отдельной транзакции

Как вы уже сделали до сих пор, мы проверили только, если у него больше, чем 0 транзакции.

Мы не потерпели неудачу, если транзакции имеют те же поля, что и Мачные конечные точки найдено в Часть 2 серии.

Итак, теперь давайте создадим эти тесты, чтобы проверить наличие полей в рамках транзакций.

test_endpoints.py

def test_individual_transaction_fields():
    r = requests.get(url+'/transactions/')
    data = r.json()
    fields = list(data['transactions'])

    assert r.status_code == 200
    assert fields[0]['amount'] >= 0.00
    assert fields[0]['current_balance'] < 240
    assert 'jean' in fields[0]['description']
    assert 0 < fields[0]['id'] 
    assert 300 == fields[0]['inital_balance'] 
    assert "2019-01-12 09:00:00" == fields[0]['time']
    assert fields[0]['type'] != 'income'

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

expanses_manager.py

@app.route('/transactions/', methods=['GET'])
def list_of_transactions():
    response = jsonify({'balance': 0, 
    'transactions': [ 
        {'amount': 0.0, 'current_balance': 230, 'description': 'blue jean', 'id':2, 'inital_balance': 300, 'time': "2019-01-12 09:00:00", 'type': 'expense'}
    ]})
    response.status_code = 200
    return response

Рефакторинг к одному классу

Теперь мы рекакторуем ваш 4 Тестовые случаи и консолидировать Это в один класс для простоты беговых испытаний, которые мы называем это Тестовый люкс Отказ

Который вы можете ввести эту команду, чтобы проверить, что конкретные тестирование

pytest -v test_endpoints.py::NameOfTheSuite

test_endpoints.py

class TestTransactions():
    def test_index_page(self):
        r = requests.get(url+'/')
        assert r.status_code == 200

    def test_get_balance_in_transacations(self):
        r = requests.get(url+'/transactions/')
        data = r.json()

        assert r.status_code == 200
        assert data['balance'] == 0

    def test_get_number_of_transacations(self):
        r = requests.get(url+'/transactions/')
        data = r.json()

        assert r.status_code == 200
        assert len(data['transactions']) != 0

    def test_individual_transaction_fields(self):
        r = requests.get(url+'/transactions/')
        data = r.json()
        fields = list(data['transactions'])

        assert r.status_code == 200
        assert fields[0]['amount'] >= 0.00
        assert fields[0]['current_balance'] < 240
        assert 'jean' in fields[0]['description']
        assert 0 < fields[0]['id'] 
        assert 300 == fields[0]['inital_balance'] 
        assert "2019-01-12 09:00:00" == fields[0]['time']
        assert fields[0]['type'] != 'income'

Основы развития тестирования

Если бы вы не заметили, что постоянная неудача и рефакторинг к проходить Ваши тестовые случаи – это практика разработки программного обеспечения, называемая Тестовое развитие Отказ

Что можно использовать для того, чтобы дополнить его с Pтойцами для создания различных тестовых случаев для ваших будущих проектов.

Основной процесс TDD

  • Создать не удалось прецедент
  • Реализовать Код пройти
  • Код рефакторов и начните с вершины снова

Оставшиеся истории конечной точки

Вот оставшаяся конечная точка Пользовательские истории Для вас, чтобы создать, на котором я предоставим исходный код за две недели в моем репо GitHub для этого товарищеского учебного пособия:

  • Создать новую транзакцию – как Пользователь Я хочу иметь Запишите мои расходы Так что Я знаю Где мои деньги собираются

  • Обновите индивидуальную транзакцию – как Пользователь Я хочу редактировать определенную транзакцию так что ** у меня был правильный баланс **

  • Удалить отдельную транзакцию – как Пользователь Я хочу Удалить транзакцию так что ** у меня был правильный баланс в моем менеджере расходов * *

Заключение

Если бы вы были со мной до тех пор, если бы вы были со мной в конце этой серии, я хотел бы поблагодарить вас за то, что наступил время, чтобы пройти через эту часть 3-х частейю, так как это не значит, чтобы написать его.

Помните, что я буду выпустить решение для этой серии оставшихся конечных точек для Пост , Поставить & Удалить HTTP-запросы в о Две недели время.

Это было честью написать это 3 Часть серии, я надеюсь, что вы узнали, может быть полезен в том, чтобы помочь вам в создании Redful API конечные точки в Колбу Использование Pteest , Почтальон и TDD техника.

Ссылки

Расширяющийся управляющий исходный код

Документация API в Postman

Пишу Тестовые случаи формируют истории пользователей от критериев принятия

История пользователя

Тестовое развитие: что это такое, а что нет.

Python тестирование с Pтойцами

Колбы

Питиш

Метод HTTP-запроса

Коды состояния HTTP

Если вам нравится моя статья, либо подпишитесь на Максимальная еженедельная рассылка Или вы можете Следуйте за Чтобы получить последнее обновление моей статьи на Dev

Этот пост был изначально размещен в блоге Макса на Создание reзов API с колбой, Postman & Pteest – часть 3 (ЧИТАТЬ ВРЕМЯ: 20 минут) и картинка из Фото Rachael Gorjestani на Unsplash

Оригинал: “https://dev.to/steelwolf180/building-restful-api-with-flask-postman–pytest—part-3-read-time-20-mins-26ha”