Подешавање тестног пакета за ваш код може се чинити као препрека за коју нисте спремни, али ова библиотека преузима велики напор.
Тестирање је суштински део развоја софтвера. Помаже у раном откривању грешака и смањује вероватноћу грешака у наставку.
Питест је један од најпопуларнијих оквира за тестирање за Питхон. Омогућава вам да пишете мале и читљиве тестове који се могу повећати како ваша апликација расте. Научите како да подесите и користите Питест са својим Питхон кодом.
Подешавање Питест-а
Пре инсталирања Питест-а, најбоље је да створити виртуелно окружење да изолујете своје тестно окружење, тако да можете да избегнете сукобе са другим пакетима и зависностима.
Да бисте креирали виртуелно окружење, покрените следећу команду пре инсталирања Питест-а.
питхон -м венв тестови
Ово ће креирати ново виртуелно окружење под називом тестови у вашем тренутном директоријуму. Да бисте активирали окружење, покрените ову команду ако користите Линук или Мац:
изворни тестови/бин/активација
За Виндовс, покрените ову команду:
тестови\\Скрипте\\активација
Да бисте инсталирали Питест, можете користити пип, Питхон менаџер пакета, са овом командом у вашем терминалу:
пип инсталл питест
Ако немате Пипа, не брините; можете инсталирајте Пип на Виндовс, Мац и Линук.
Покрените следећу команду да проверите да ли сте исправно инсталирали Питест.
питест --версион
Ово би требало да врати број инсталиране верзије.
Креирање првог теста
Размотрите следећу функцију која сабира два броја и враћа резултат.
дефадд_нумберс(а, б):
повратак а + б
Неколико ствари може поћи наопако са овом функцијом. На пример, размотрите шта се дешава ако позовете функцију са ненумеричким вредностима као што је Ништа или вредност типа стринг. Ово су неки од потенцијалних ивичних случајева који могу довести до отказивања функције.
Један од првих тестова које напишете требало би да провери да ли функција враћа очекивани резултат. Да бисте то урадили, можете користити кључну реч ассерт да упоредите стварни излаз функције са очекиваним излазом. У случају функције адд_нумберс, тест функција може изгледати овако:
дефтест_адд_нумберс():
тврдити адд_нумберс(2, 3) == 5
тврдити адд_нумберс(-1, 1) == 0
тврдити адд_нумберс(0, 0) == 0
Ова тест функција укључује три исказа ассерт, од којих сваки пореди излаз функције адд_нумберс са очекиваном вредношћу. Први тест проверава да сабирање 2 и 3 враћа 5, други тест проверава да ли сабирање -1 и 1 враћа 0, а трећи тест проверава да сабирање 0 и 0 враћа 0.
Како покренути тестове са Питест-ом
Након што сте написали своје тестове, следећи корак је да их покренете. Да бисте то урадили помоћу Питест-а, идите до директоријума који садржи вашу тест датотеку и покрените команду питест:
питест
Ако све функционише како је очекивано, видећете поруку која показује да су сви тестови успешно прошли. Међутим, ако било која од тврдњи не успе, Питест ће пријавити грешку и показати вам улазне вредности које су изазвале грешку.
На пример, рецимо да сте покренули следећу тест функцију за функцију адд_нумберс:
дефтест_адд_нумберс():
тврдити адд_нумберс(2, 3) == 6
тврдити адд_нумберс(-1, 1) == 0
тврдити адд_нумберс(0, 0) == 0
Прва тврдња неће успети јер је очекивана вредност била 6, али је стварна вредност била 5 (збир 2 и 3). Питест ће вратити следећу поруку:
Ова порука вам показује улазне вредности које су изазвале вредност и такође вам говори колика би стварна вредност требало да буде. Ово олакшава брзо препознавање и исправљање грешака у вашем коду.
Коришћење Питест.раисес за утврђивање изузетака
Сада, хајде да напишемо тест да покријемо један од ивичних случајева функције адд_нумберс. Када проследите ненумерички аргумент као што је Ноне у функцију, Питхон би требало да покрене изузетак ТипеЕррор.
Већ би требао бити руковање изузецима у вашим Питхон програмима, и можете тестирати да ли их ваш код такође подиже исправно.
Да бисте то урадили, копирајте следећу тестну функцију у своју датотеку. Користи менаџер контекста питест.раисес да провери да ли позивање функције адд_нумбер са „Ноне“ изазива изузетак ТипеЕррор.
увоз питест
дефтест_адд_нумберс_витх_инвалид_инпутс():
са питест.раисес (ТипеЕррор):
адд_нумберс(Ниједан, 2)
Затим покрените Питест из командне линије. Ако се изузетак не покрене, тест неће успети.
Можете ићи даље и проверити детаље поруке о изузетку. Менаџер контекста производи ЕкцептионИнфо објекат са детаљима.
На пример, у овој тест функцији, потврдите поруку о изузетку овако:
дефтест_адд_нумберс_витх_инвалид_инпутс():
са питест.раисес(ТипеЕррор) као екц_инфо:
адд_нумберс(Ниједан, 2)
тврдити екц_инфо.валуе.аргс[0] == "неподржани тип(ови) операнда за +: 'НонеТипе' и 'инт'"
Ако порука не одговара оној у тесту, Питест ће указати на грешку.
Како користити параметризовано тестирање за тестирање више улаза одједном
Уместо да ручно позивате функцију са вишеструким улазима попут овог:
дефтест_адд_нумберс():
тврдити адд_нумберс(2, 3) == 6
тврдити адд_нумберс(-1, 1) == 0
тврдити адд_нумберс(0, 0) == 0
Питест пружа параметризовану функцију тестирања која вам омогућава да лакше урадите исту ствар. Ево како можете да препишете тест функцију изнад:
увоз питест
@питест.марк.параметризе("а, б, очекивано", [
(2, 3, 5),
(-1, 1, 0),
(0, 0, 0)
])
дефтест_адд_нумберс(а, б, очекивано):
тврдитиадд_нумберс(а, б)== очекивано
Како покренути више тестова
До сада сте написали само два теста за функцију адд_нумберс. За сложеније функције са више тестова, можда ћете желети да их групишете у класу.
На пример, ево како бисте креирали тест класу за функцију додавања.
класаТестАддФунцтион:
@питест.марк.параметризе("а, б, очекивано", [
(2, 3, 5),
(-1, 1, 0),
(0, 0, 0),
])
дефтест_аддитион_витх_нумберс(сам, а, б, очекивано):
тврдити адд_нумберс (а, б) == очекивано
дефтест_адд_нумберс_витх_инвалид_инпутс(сам):
са питест.раисес (ТипеЕррор) као екц_инфо:
адд_нумберс(Ниједан, 2)
тврдити екц_инфо.валуе.аргс[0] == "неподржани тип(ови) операнда за +: 'НонеТипе' и 'инт'"
Имајте на уму да треба да додате префикс имену класе са „Тест“ како би Питест могао да је идентификује као тестну класу и да је покрене.
Питест има много више функција
Користећи Питест, можете аутоматски да проверите да ваш код ради како очекујете. Питест нуди многе друге функције као што су инструменти који вам омогућавају да подесите и срушите тестне податке и ознаке за подешавање метаподатака на вашим тест функцијама.
Поред тога, можете да интегришете Питест у свој ЦИ цевовод и да почнете да покрећете тестове аутоматски и непрекидно када промените свој код.