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

Написание модульных тестов для API REST на Python

Узнайте, как писать модульные тесты для API REST с использованием Python.

Автор оригинала: Parth Shandilya.

Небольшая предыстория: в течение последних нескольких месяцев я вносил свой вклад в организацию с открытым исходным кодом под названием FOSSASIA , где я работаю над проектом под названием BadgeYay . Это генератор значков с простым веб-интерфейсом для добавления данных и создания печатных значков в формате PDF.

Серверная часть BadgeYay теперь переведена в REST-API , и для тестирования функций, используемых в REST-API, нам нужна технология тестирования, которая будет тестировать каждую функцию, используемую в API. Для наших целей мы выбрали популярный набор тестов unit tests Python.

В этом блоге я расскажу о том, как я написал модульные тесты для тестирования REST-API BadgeYay.

Во-первых, давайте разберемся, что такое модульные тесты и почему мы выбрали именно их. Затем мы перейдем к написанию тестов API для значка Yay. Эти тесты имеют общую структуру. Таким образом, код, о котором я упоминаю, будет работать в других сценариях тестирования REST API, часто практически без изменений.

Давайте начнем и разберемся в тестировании API шаг за шагом.

Что такое модульные тесты?

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

Почему модульные тесты?

Мы получаем два основных преимущества от модульного тестирования, причем большая часть стоимости идет на первое:

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

Мы всегда должны стремиться писать комплексные тесты, которые достаточно хорошо охватывают рабочий код.

Теперь, вот проблеск того, как я написал модульные тесты для тестирования кода в бэкэнде REST-API Badge Yay. Используя пакет Python модульного теста и запросы модули, мы можем протестировать REST API в автоматизации тестирования.

Ниже приведен фрагмент кода, для которого я написал модульные тесты в одном из моих запросов на вытягивание.

def output(response_type, message, download_link): 
      if download_link == '': 
         response = [
         	{ 
                   'type': response_type, 
                   'message': message 
          	}
          ]
       else: 
         response = [
         	{ 
                   'type': response_type, 
                   'message': message, 
                   'download_link': download_link 
          	}
          ]
 
       return jsonify({'response': response})

Чтобы проверить эту функцию, я в основном создал макет объекта, который может имитировать поведение реальных объектов контролируемым образом, поэтому в этом случае макет объекта может имитировать поведение выходной функции и возвращать что-то вроде ответа JSON, не затрагивая реальный REST API.

Теперь следующая задача-проанализировать ответ JSON и передать конкретное значение ответа JSON в скрипт автоматизации Python. Таким образом, Python читает JSON как объект словаря, и это действительно упрощает способ анализа и использования JSON.

И вот содержание backend/tests/test_basic.py файл.

#!/usr/bin/env python3
"""Tests for Basic Functions"""
import sys
import json
import unittest

sys.path.append("../..")
from app.main import *

class TestFunctions(unittest.TestCase): 
      """Test case for the client methods.""" 
      def setup(self): 
          app.app.config['TESTING'] = True 
          self.app = app.app.test_client() 
      
      # Test of Output function 
      def test_output(self): 
          with app.test_request_context(): 
          # mock object 
          out = output('error', 'Test Error', 'local_host') 
          # Passing the mock object 
          response = [
          	{ 
                        'type': 'error', 
                        'message': 'Test Error', 
                        'download_link': 'local_host' 
           	}
           ] 
           data = json.loads(out.get_data(as_text=True) 
           # Assert response 
           self.assertEqual(data['response'], response)
           
 if __name__ == ' __main__ ': 
      unittest.main()

И, наконец, мы можем убедиться, что все работает, запустив nosetests .

Скриншот прохождения теста

Вот как я писал модульные тесты в репозитории Badge Yay.

На этом я подошел к концу нашего обсуждения написания модульных тестов для API REST в веб-приложениях Python. Я написал этот пост как решение этой проблемы в проекте Badge Yay. Если вам понравился этот пост, подумайте о том, чтобы взглянуть на мою другую работу на GitHub 🙂 .

Источники: Платформа модульного тестирования

PS: Я новичок в блогах, поэтому конструктивная критика не только приветствуется, но и очень нужна!