Јединично тестирање са Питхон модулом униттест

Ниједан добар програмер не примењује код без темељног тестирања. Јединично тестирање је процес тестирања појединачних модула великог програма.

У овом чланку ће се расправљати о томе како можете да извршите јединично тестирање свог кода помоћу модула Питхон униттест. Прво, хајде да разумемо које су врсте тестирања.

Када је у питању тестирање, постоји ручно тестирање и аутоматско тестирање. Ручно тестирање је техника тестирања где људи изводе тест ручно након завршетка развоја. Аутоматско тестирање је техника тестирања где програми аутоматски изводе тест и дају нам резултате.

Схватили бисте да ручно тестирање одузима време и да га је тешко извести. Дакле, програмери пишу код за извођење тестова (аутоматско тестирање). Постоје различите врсте тестирања у аутоматском тестирању. Неки од њих су Унит тестирање, Интегративно тестирање, Енд то енд тестирање, Стрес тестирање, итд.,

Хајде да видимо стандардни ток тестирања.

  • Напишите или ажурирајте код.
  • Напишите или ажурирајте тестове за различите случајеве за ваш код.
  • Покрените тестове (било ручно или помоћу пробног покретача).
  • Погледајте резултате теста. Ако постоје грешке, поправите их и поновите кораке.

Овде ћемо разговарати о најосновнијем и најосновнијем типу тестирања који се зове тестирање јединица. Без икаквог одлагања, хајде да заронимо у стварни водич.

Шта је јединично тестирање?

Јединично тестирање је техника за тестирање малог блока независног кода. Мали блок код ће бити функција у већини случајева. Реч независно значи да не зависи од других делова кода у пројекту.

Рецимо да морамо да проверимо да ли је стринг једнак „вдзвдз“ или не. За то смо написали функцију која узима један аргумент и враћа да ли је једнак “вдзвдз” или не.

def is_equal_to_geekflare(string):
	return string == "techblog.co.rs"

Горња функција нема зависности од било ког другог кода. Дакле, можемо га тестирати независно дајући различите улазне податке. Независни део кода се може користити у целом пројекту.

Важност јединичног тестирања

Генерално, код независних блокова се може користити у целом пројекту. Дакле, мора бити добро написано и тестирано. Јединични тестови су тестови који се користе за тестирање тих типова независних блокова кода. Шта се дешава ако не користимо јединичне тестове за наш пројекат?

  Како оптимизовати ПХП Ларавел веб апликацију за високе перформансе?

Претпоставимо да нисмо тестирали мале блокове кода који се користе у целом пројекту. Сви други тестови као што су интеграцијски тестови, енд-то-енд тестови, итд., који користе друге мале блокове кода могу бити неуспешни. Ово разбија апликацију. Зато се основни градивни блокови кода морају добро тестирати.

Сада знамо важност јединичног тестирања и писаних јединичних тестова за све независне блокове кода. Пошто смо извршили тестове јединица, други тестови као што су интеграцијски тестови, енд-то-енд тестови, итд., неће успети због независног блока кодова.

У наредним одељцима ћемо видети шта је Питхон модул униттест и како користимо модул униттест за писање јединичних тестова у Питхон-у.

Напомена: Претпостављамо да сте упознати са Питхон класама, модулима итд. Ако нисте упознати са Питхон средњим концептима као што су класе, модули, итд., можда ће вам бити тешко да разумете следеће одељке.

Шта је Питхон униттест?

Питхон униттест је уграђени оквир за тестирање за тестирање Питхон кода. Има покретач за тестирање, који нам омогућава да изводимо тестове без много напора. Дакле, можемо користити уграђени модул униттест за тестирање без коришћења модула треће стране. Али, мења се на основу ваших захтева. Уграђени модул униттест је добар за почетак тестирања у Питхон-у.

Морамо да следимо доле наведене кораке да бисмо тестирали Питхон код помоћу модула униттест.

#1. Напишите код.

#2. Увезите модул униттест.

#3. Направите датотеку почевши од кључне речи тест. На пример тест_приме.пи. Кључна реч тест се користи за идентификацију тестних датотека.

#4. Направите класу која проширује класу униттест.ТестЦасе.

#5. Напишите методе (тестове) унутар класе. Свака метода садржи различите тестне случајеве на основу ваших захтева. Морамо да именујемо метод почевши од кључне речи тест.

#6. Покрени тестове. Тестове можемо изводити на различите начине.

  • Покрените команду питхон -м униттест тест_филенаме.пи.
  • Тестне датотеке покрећемо као опште Питхон датотеке са командом питхон тест_филенаме.пи. Да би овај метод функционисао, морамо да позовемо главни метод униттест-а у тест датотеци.
  • И на крају, користећи откриће. Тестове можемо аутоматски покренути помоћу команде питхон -м униттест дисцовер без помињања имена датотеке теста. Пронаћи ће тестове користећи конвенцију именовања коју смо пратили. Дакле, морамо именовати наше тестне фајлове са кључном речи тест у почетку.
  Пречице за Цхроме које треба да знате

Генерално, у тестирању, поредимо излаз кода са очекиваним излазом. Дакле, за поређење излаза, униттест нуди различите методе. Можете пронаћи листу функција за поређење овде.

Можете их лако разумети без икаквих потешкоћа. Они су директни.

То је пуно теорије. Сада морамо ући у кодирање.

Напомена: Ако имате било каквих питања о модулу униттест, можете ићи на документацију и разјасни своје сумње. Без икаквог даљег одлагања, хајде да користимо модул униттест.

Јединични тестови у Питхон-у користећи униттест

Прво ћемо написати неке функције, а затим ћемо се фокусирати на писање тестова. Прво отворите фасциклу у свом омиљеном уређивачу кодова. И креирајте датотеку под називом утилс.пи. Налепите следећи код у датотеку.

import math


def is_prime(n):
    if n < 0:
        return 'Negative numbers are not allowed'

    if n <= 1:
        return False

    if n == 2:
        return True

    if n % 2 == 0:
        return False

    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True


def cubic(a):
    return a * a * a


def say_hello(name):
    return "Hello, " + name

Имамо три различите функције у датотеци утилс.пи. Сада морамо да тестирамо сваку функцију са различитим тест случајевима. Хајде да напишемо тестове за прву функцију ис_приме.

#1. Направите датотеку под називом тест_утилс.пи у фасцикли примера као утилс.пи.

#2. Увезите модул утилс и униттест.

#3. Креирајте класу са именом ТестУтилс која проширује класу униттест.ТестЦасе. Име класе може бити било шта. Покушајте да разреду дате смислено име.

#4. Унутар класе напишите метод под називом тест_ис_приме који прихвата селф као аргумент.

#5. Напишите различите тестне случајеве са аргументима за ис_приме и упоредите излаз са очекиваним излазом.

#6. Пример тестног случаја селф.ассертФалсе(утилс.ис_приме(1)).

#7. Очекујемо да ће излаз ис_приме(1) бити лажан у горњем случају.

#8. Слично као у горњем случају, ми ћемо тестирати различите случајеве на основу функције коју тестирамо.

  9 најбољих Цлоуд ПБКС решења за мала и средња предузећа

Хајде да видимо тестове.

import unittest

import utils


class TestUtils(unittest.TestCase):
    def test_is_prime(self):
        self.assertFalse(utils.is_prime(4))
        self.assertTrue(utils.is_prime(2))
        self.assertTrue(utils.is_prime(3))
        self.assertFalse(utils.is_prime(8))
        self.assertFalse(utils.is_prime(10))
        self.assertTrue(utils.is_prime(7))
        self.assertEqual(utils.is_prime(-3),
                         "Negative numbers are not allowed")


if __name__ == '__main__':
    unittest.main()

Позивамо главни метод модула униттест за покретање тестова помоћу команде питхон филенаме.пи. Сада покрените тестове.

Видећете излаз сличан доњем излазу.

$ python test_utils.py 
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK

Сада покушајте да напишете тест случајеве и за друге функције. Размислите о различитим случајевима за функције и напишите тестове за њих. Погледајте следеће тестове који су додати горњој класи.

...


class TestUtils(unittest.TestCase):
    def test_is_prime(self):
        ...

    def test_cubic(self):
        self.assertEqual(utils.cubic(2), 8)
        self.assertEqual(utils.cubic(-2), -8)
        self.assertNotEqual(utils.cubic(2), 4)
        self.assertNotEqual(utils.cubic(-3), 27)

    def test_say_hello(self):
        self.assertEqual(utils.say_hello("techblog.co.rs"), "Hello, techblog.co.rs")
        self.assertEqual(utils.say_hello("Chandan"), "Hello, Chandan")
        self.assertNotEqual(utils.say_hello("Chandan"), "Hi, Chandan")
        self.assertNotEqual(utils.say_hello("Hafeez"), "Hi, Hafeez")


...

Користили смо само неке од функција за поређење из модула униттест. Можете пронаћи комплетну листу овде.

Научили смо како да напишемо јединичне тестове користећи модул униттест. Сада је време да видимо различите начине за покретање тестова.

Како покренути тестове користећи униттест

Већ смо видели начин за покретање тест случајева у горњем одељку. Хајде да видимо друга два начина за покретање тестова помоћу модула униттест.

#1. Коришћење имена датотеке и модула униттест.

У овој методи ћемо користити модул униттест и име датотеке за покретање тестова. Команда за покретање тестова је питхон -м униттест име датотеке.пи. У нашем случају, команда за покретање тестова је питхон -м униттест тест_утилс.пи.

#2. Користећи метод откривања

Користићемо метод откривања модула униттест да бисмо аутоматски открили све тест датотеке и покренули их. Да бисмо аутоматски детектовали тест фајлове, морамо да их именујемо почевши од кључне речи тест.

Команда за покретање тестова помоћу методе откривања је питхон -м униттест дисцовер. Команда ће открити све датотеке чија имена почињу са тест и извршити их.

Закључак 👩‍💻

Јединични тестови су основно тестирање у свету програмирања. Постоји много других тестова у стварном свету. Покушајте да их научите један по један. Надам се да ће вам овај водич помоћи да напишете основне тестове у Питхон-у користећи модул униттест. Постоје библиотеке независних произвођача као што су питест, Робот Фрамеворк, носе, носе2, коса црта, итд. Можете их истражити на основу захтева вашег пројекта.

Срећно тестирање 😎

Можда ће вас занимати и Питања и одговори на интервјуу за Питхон.