SlideShare a Scribd company logo
ПРОВЕДЕНИЕ UNIT ТЕСТОВ
Москва, 2023 г.
2
Модульные (Unit) тесты
• Работают на очень низком уровне, близко к исходному коду приложения. Они заключаются в тестировании отдельных методов и функций классов,
компонентов или модулей, используемых в ПО. Модульные тесты, как правило, не требуют больших расходов на автоматизацию.
Интеграционные тесты
• В ходе интеграционного тестирования проверяется, хорошо ли работают вместе различные модули и сервисы, используемые приложением.
Функциональные тесты
• Проверка бизнес-требований приложения. Проверяют только результат некоторого действия, не проверяют промежуточные состояния системы.
Сквозные тесты
• Копирует поведение пользователя при работе с ПО в контексте всего приложения. Обеспечивает контроль того, что различные схемы действий
пользователя работают должным образом.
Приемочное тестирование
• Формальные тесты, которые проверяют, отвечает ли система требованиям бизнеса. При этом во время тестирования должно быть запущено само
приложение, и основное внимание уделяется воспроизведению поведения пользователей.
Тестирование производительности
• Оценивается работа системы при определенной рабочей нагрузке. С их помощью можно оценить надежность, скорость, масштабируемость
приложения. Это может быть наблюдение за временем отклика, определение поведения системы при работе со значительными объемами данных.
Smoke-тестирование
• Базовые тесты, проверяющие основные функциональные возможности приложения. Цель — убедиться, что основные возможности работают как
запланировано.
Виды тестирования
Создание Unit теста
3
import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
if __name__ == '__main__':
unittest.main()
python -m unittest
Запуск класса из консоли:
Пример кода для тестового класса:
Тестирование простейшей функции
4
Тестируемая функция: Тестовый класс:
import unittest
from current import current_calculation
class TestCurrent(unittest.TestCase):
def test_positive(self):
self.assertEqual(current_calculation(380, 10), 38)
self.assertEqual(current_calculation(220, 2), 110)
self.assertEqual(current_calculation(12.2, 2), 6.1)
if __name__ == '__main__':
unittest.main()
def current_calculation(voltage, resistance):
return round(voltage / resistance, 6)
Тестирование простейшей функции
5
Тестируемая функция: Тестовый класс:
import unittest
from current import current_calculation
class TestCurrent(unittest.TestCase):
def test_positive(self):
self.assertEqual(current_calculation(380, 10), 38)
self.assertEqual(current_calculation(220, 2), 110)
self.assertEqual(current_calculation(12.2, 2), 6.1)
def test_negative_resistance(self):
self.assertRaises(ValueError, current_calculation, 100, -2)
if __name__ == '__main__':
unittest.main()
def current_calculation(voltage, resistance):
if resistance < 0:
raise ValueError("Resistance can`t be negative")
return round(voltage / resistance, 6)
Тестирование простейшей функции
6
Тестируемая функция: Тестовый класс:
import unittest
from current import current_calculation
class TestCurrent(unittest.TestCase):
def test_positive(self):
self.assertEqual(current_calculation(380, 10), 38)
self.assertEqual(current_calculation(220, 2), 110)
self.assertEqual(current_calculation(12.2, 2), 6.1)
def test_zero_division(self):
self.assertRaises(ZeroDivisionError, current_calculation, 10, 0)
def test_negative_resistance(self):
self.assertRaises(ValueError, current_calculation, 100, -2)
if __name__ == '__main__':
unittest.main()
def current_calculation(voltage, resistance):
if resistance == 0:
raise ZeroDivisionError("Division by zero")
if resistance < 0:
raise ValueError("Resistance can`t be negative")
return round(voltage / resistance, 6)
Тестирование простейшей функции
7
Тестируемая функция: Тестовый класс:
import unittest
from current import current_calculation
class TestCurrent(unittest.TestCase):
def test_positive(self):
self.assertEqual(current_calculation(380, 10), 38)
self.assertEqual(current_calculation(220, 2), 110)
self.assertEqual(current_calculation(12.2, 2), 6.1)
def test_type(self):
self.assertRaises(TypeError, current_calculation, "Hello World", 2)
self.assertRaises(TypeError, current_calculation, 220, [12])
def test_zero_division(self):
self.assertRaises(ZeroDivisionError, current_calculation, 10, 0)
def test_negative_resistance(self):
self.assertRaises(ValueError, current_calculation, 100, -2)
if __name__ == '__main__':
unittest.main()
def current_calculation(voltage, resistance):
if type(voltage) not in [int, float]:
raise TypeError("Voltage must be real number")
if type(resistance) not in [int, float]:
raise TypeError("Resistance must be real number")
if resistance == 0:
raise ZeroDivisionError("Division by zero")
if resistance < 0:
raise ValueError("Resistance can`t be negative")
return round(voltage / resistance, 6)
Документация библиотеки
8
https://docs.python.org/3/library/unittest.html
unittest — Unit testing framework

More Related Content

PDF
Александр Ярулин - Автоматизация тестирования с xUnit
PPTX
Максим Щепелин. "Unittesting. Как?"
PDF
Лекция 11. Тестирование.
PDF
Unit тестирование
PDF
C# Desktop. Занятие 17.
PDF
C++ STL & Qt. Занятие 10.
PDF
Стратегия тестирования крупного проекта в условиях Agile разработки v2
PPTX
Надежный тест-дизайн
Александр Ярулин - Автоматизация тестирования с xUnit
Максим Щепелин. "Unittesting. Как?"
Лекция 11. Тестирование.
Unit тестирование
C# Desktop. Занятие 17.
C++ STL & Qt. Занятие 10.
Стратегия тестирования крупного проекта в условиях Agile разработки v2
Надежный тест-дизайн

Similar to Unit tests Python examples (6)

PPTX
Александр Александров -- Надёжный тест-дизайн (мастер-класс)
PPTX
Автоматизация.pptx
PDF
Vladimir Obrizan "Ecosystem for reliable Python programming"
PDF
тестирование
PDF
Марина Широчкина: Тестирование
PDF
Unit testing iOS Applications
Александр Александров -- Надёжный тест-дизайн (мастер-класс)
Автоматизация.pptx
Vladimir Obrizan "Ecosystem for reliable Python programming"
тестирование
Марина Широчкина: Тестирование
Unit testing iOS Applications
Ad

Unit tests Python examples

  • 2. 2 Модульные (Unit) тесты • Работают на очень низком уровне, близко к исходному коду приложения. Они заключаются в тестировании отдельных методов и функций классов, компонентов или модулей, используемых в ПО. Модульные тесты, как правило, не требуют больших расходов на автоматизацию. Интеграционные тесты • В ходе интеграционного тестирования проверяется, хорошо ли работают вместе различные модули и сервисы, используемые приложением. Функциональные тесты • Проверка бизнес-требований приложения. Проверяют только результат некоторого действия, не проверяют промежуточные состояния системы. Сквозные тесты • Копирует поведение пользователя при работе с ПО в контексте всего приложения. Обеспечивает контроль того, что различные схемы действий пользователя работают должным образом. Приемочное тестирование • Формальные тесты, которые проверяют, отвечает ли система требованиям бизнеса. При этом во время тестирования должно быть запущено само приложение, и основное внимание уделяется воспроизведению поведения пользователей. Тестирование производительности • Оценивается работа системы при определенной рабочей нагрузке. С их помощью можно оценить надежность, скорость, масштабируемость приложения. Это может быть наблюдение за временем отклика, определение поведения системы при работе со значительными объемами данных. Smoke-тестирование • Базовые тесты, проверяющие основные функциональные возможности приложения. Цель — убедиться, что основные возможности работают как запланировано. Виды тестирования
  • 3. Создание Unit теста 3 import unittest class TestStringMethods(unittest.TestCase): def test_upper(self): self.assertEqual('foo'.upper(), 'FOO') if __name__ == '__main__': unittest.main() python -m unittest Запуск класса из консоли: Пример кода для тестового класса:
  • 4. Тестирование простейшей функции 4 Тестируемая функция: Тестовый класс: import unittest from current import current_calculation class TestCurrent(unittest.TestCase): def test_positive(self): self.assertEqual(current_calculation(380, 10), 38) self.assertEqual(current_calculation(220, 2), 110) self.assertEqual(current_calculation(12.2, 2), 6.1) if __name__ == '__main__': unittest.main() def current_calculation(voltage, resistance): return round(voltage / resistance, 6)
  • 5. Тестирование простейшей функции 5 Тестируемая функция: Тестовый класс: import unittest from current import current_calculation class TestCurrent(unittest.TestCase): def test_positive(self): self.assertEqual(current_calculation(380, 10), 38) self.assertEqual(current_calculation(220, 2), 110) self.assertEqual(current_calculation(12.2, 2), 6.1) def test_negative_resistance(self): self.assertRaises(ValueError, current_calculation, 100, -2) if __name__ == '__main__': unittest.main() def current_calculation(voltage, resistance): if resistance < 0: raise ValueError("Resistance can`t be negative") return round(voltage / resistance, 6)
  • 6. Тестирование простейшей функции 6 Тестируемая функция: Тестовый класс: import unittest from current import current_calculation class TestCurrent(unittest.TestCase): def test_positive(self): self.assertEqual(current_calculation(380, 10), 38) self.assertEqual(current_calculation(220, 2), 110) self.assertEqual(current_calculation(12.2, 2), 6.1) def test_zero_division(self): self.assertRaises(ZeroDivisionError, current_calculation, 10, 0) def test_negative_resistance(self): self.assertRaises(ValueError, current_calculation, 100, -2) if __name__ == '__main__': unittest.main() def current_calculation(voltage, resistance): if resistance == 0: raise ZeroDivisionError("Division by zero") if resistance < 0: raise ValueError("Resistance can`t be negative") return round(voltage / resistance, 6)
  • 7. Тестирование простейшей функции 7 Тестируемая функция: Тестовый класс: import unittest from current import current_calculation class TestCurrent(unittest.TestCase): def test_positive(self): self.assertEqual(current_calculation(380, 10), 38) self.assertEqual(current_calculation(220, 2), 110) self.assertEqual(current_calculation(12.2, 2), 6.1) def test_type(self): self.assertRaises(TypeError, current_calculation, "Hello World", 2) self.assertRaises(TypeError, current_calculation, 220, [12]) def test_zero_division(self): self.assertRaises(ZeroDivisionError, current_calculation, 10, 0) def test_negative_resistance(self): self.assertRaises(ValueError, current_calculation, 100, -2) if __name__ == '__main__': unittest.main() def current_calculation(voltage, resistance): if type(voltage) not in [int, float]: raise TypeError("Voltage must be real number") if type(resistance) not in [int, float]: raise TypeError("Resistance must be real number") if resistance == 0: raise ZeroDivisionError("Division by zero") if resistance < 0: raise ValueError("Resistance can`t be negative") return round(voltage / resistance, 6)