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)