SlideShare a Scribd company logo
1 of 8
ПРОВЕДЕНИЕ 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

Similar to Unit tests Python examples

Unit testing
Unit testingUnit testing
Unit testing
ISsoft
 
Стажировка-2014, занятие 5. Нагрузочное тестирование
Стажировка-2014, занятие 5. Нагрузочное тестированиеСтажировка-2014, занятие 5. Нагрузочное тестирование
Стажировка-2014, занятие 5. Нагрузочное тестирование
7bits
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Ilya Shalyapin
 
Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...
Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...
Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...
solit
 
TestLink
TestLinkTestLink
TestLink
ISsoft
 
[JAM 1.2] Testing in Android (Dzmitry Ivashnev)
[JAM 1.2] Testing in Android (Dzmitry Ivashnev)[JAM 1.2] Testing in Android (Dzmitry Ivashnev)
[JAM 1.2] Testing in Android (Dzmitry Ivashnev)
Evgeny Kaziak
 
ук 03.007.02 2011
ук 03.007.02 2011ук 03.007.02 2011
ук 03.007.02 2011
etyumentcev
 

Similar to Unit tests Python examples (20)

Test design print
Test design printTest design print
Test design print
 
Unit testing
Unit testingUnit testing
Unit testing
 
Continious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-Agile
 
Тесты (типы тестов, организация тестов, создание тестов).
Тесты (типы тестов, организация тестов, создание тестов).Тесты (типы тестов, организация тестов, создание тестов).
Тесты (типы тестов, организация тестов, создание тестов).
 
Стажировка-2014, занятие 5. Нагрузочное тестирование
Стажировка-2014, занятие 5. Нагрузочное тестированиеСтажировка-2014, занятие 5. Нагрузочное тестирование
Стажировка-2014, занятие 5. Нагрузочное тестирование
 
Система генерации чек-листов для регрессионного тестирования на основе анализ...
Система генерации чек-листов для регрессионного тестирования на основе анализ...Система генерации чек-листов для регрессионного тестирования на основе анализ...
Система генерации чек-листов для регрессионного тестирования на основе анализ...
 
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
 
Разработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruРазработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconru
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и Django
 
Test levels
Test levelsTest levels
Test levels
 
Simonova sql server-enginetesting
Simonova sql server-enginetestingSimonova sql server-enginetesting
Simonova sql server-enginetesting
 
Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...
Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...
Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...
 
TestLink
TestLinkTestLink
TestLink
 
Вадим Зубович - Test Link
Вадим Зубович - Test LinkВадим Зубович - Test Link
Вадим Зубович - Test Link
 
[JAM 1.2] Testing in Android (Dzmitry Ivashnev)
[JAM 1.2] Testing in Android (Dzmitry Ivashnev)[JAM 1.2] Testing in Android (Dzmitry Ivashnev)
[JAM 1.2] Testing in Android (Dzmitry Ivashnev)
 
Unit testing iOS Applications
Unit testing iOS ApplicationsUnit testing iOS Applications
Unit testing iOS Applications
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
 
ук 03.007.02 2011
ук 03.007.02 2011ук 03.007.02 2011
ук 03.007.02 2011
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
 
Mva stf module 6 - rus
Mva stf module 6 - rusMva stf module 6 - rus
Mva stf module 6 - rus
 

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)