DBMSдеги бирдик тесттери - биз муну Sportmasterде кантип жасайбыз, экинчи бөлүк

Биринчи бөлүк - бул жерде.

DBMSдеги бирдик тесттери - биз муну Sportmasterде кантип жасайбыз, экинчи бөлүк

Кырдаалды элестетиңиз. Сиздин алдыңызда жаңы функцияларды иштеп чыгуу милдети турат. Сизде мурункулардан болгон өнүгүүлөр бар. Моралдык милдетиң жок деп ойлосок, эмне кылат элең?

Көбүнчө, бардык эски окуялар унутулуп, баары кайра башталат. Эч ким башка бирөөнүн кодун казып алууну жактырбайт, бирок убакытыңыз болсо, өзүңүздүн системаңызды түзүүгө эмне үчүн болбосун? Бул типтүү мамиле жана ал негизинен туура. Бирок биздин долбоордо туура эмес кылганбыз. Биз келечектеги автоматтык тестирлөө системасын биздин мурункулардан utPLSQL боюнча бирдик тесттериндеги өнүгүүлөргө негиздедик, андан кийин бир нече параллелдүү багыттар боюнча иштей баштадык.

  1. Эски бирдик сыноолорду калыбына келтирүү. Калыбына келтирүү тесттерди берилгендик тутумунун учурдагы абалына ылайыкташтыруу жана тесттерди utPLSQL стандарттарына ылайыкташтыруу дегенди билдирет.
  2. Автотесттер менен так эмне, кандай методдор жана процесстер камтылганын түшүнүү менен маселени чечүү. Сиз бул маалыматты башыңызда сакташыңыз керек, же түздөн-түз автотест кодунун негизинде жыйынтык чыгарышыңыз керек. Ошондуктан, биз каталог түзүүнү чечтик. Биз ар бир автотестке уникалдуу мнемоникалык код ыйгардык, сүрөттөмө түздүк жана жөндөөлөрдү жаздырдык (мисалы, аны кандай шарттарда ишке киргизүү керек же сыноо ишке ашпай калса, эмне болушу керек). Негизи, биз автотесттер жөнүндө метаберилиштерди толтурдук жана ал метаберилиштерди стандарттуу utPLSQL схема таблицаларына жайгаштырдык.
  3. Экспансия стратегиясын аныктоо, б.а. автоматташтырылган тесттер аркылуу текшерилүүгө тийиш болгон функцияларды тандоо. Биз үч нерсеге көңүл бурууну чечтик: жаңы системаны жакшыртуу, өндүрүштүк инциденттер жана негизги система процесстери. Ошентип, биз чыгаруу менен параллелдүү өнүгүп жатабыз, анын жогорку сапатын камсыз кылууда, бир эле учурда регрессиянын чөйрөсүн кеңейтүүдө жана маанилүү жерлерде системанын ишенимдүүлүгүн камсыз кылууда. Мындай тоскоолдуктардын биринчиси чек боюнча арзандатууларды жана бонустарды бөлүштүрүү процесси болду.
  4. Албетте, биз жаңы автотесттерди иштеп чыга баштадык. Биринчи чыгаруу тапшырмаларынын бири лоялдуулук системасынын алдын ала аныкталган үлгүлөрүнүн аткарылышын баалоо болгон. Биздин долбоор шарттардын негизинде кардарларды тандаган катуу бекитилген SQL сурамдарынын блогуна ээ. Мисалы, акыркы сатып алуулары белгилүү бир шаарда болгон бардык кардарлардын тизмесин же орточо сатып алуу суммасы белгилүү бир мааниден жогору болгон кардарлардын тизмесин алыңыз. Жазылган автотесттерден кийин, биз алдын ала аныкталган үлгүлөрдү текшерип, эталондук көрсөткүчтөрдүн параметрлерин жаздык жана кошумча жүктөмдү тестирлөөдөн өттүк.
  5. Автотесттер менен иштөө ыңгайлуу болушу керек. Эң кеңири тараган эки иш - автотесттерди жүргүзүү жана тесттик маалыматтарды түзүү. Биздин системада ушундайча эки көмөкчү модулдар пайда болду: ишке киргизүү модулу жана маалыматтарды өндүрүү модулу.

    Ишке киргизгич бир текст киргизүү параметри менен бир универсалдуу процедура катары көрсөтүлөт. Параметр катары сиз автотесттин мнемоникалык кодун, пакеттин атын, тесттин атын, автотест жөндөөсүн же сакталган ачкыч сөздү өткөрө аласыз. Процедура шарттарды канааттандырган бардык автотесттерди тандап, иштетет.

    Маалыматтарды генерациялоо модулу тестирлөөдөн өтүп жаткан системанын ар бир объекти үчүн (базадагы таблица) ал жерге маалыматтарды киргизген атайын процедура түзүлгөн пакет түрүндө берилген. Бул процедурада демейки маанилер мүмкүн болушунча толтурулат, бул бармакты чыкылдатуу менен түзмө-түз объекттерди түзүүнү камсыз кылат. Жана колдонууга ыңгайлуу болушу үчүн, түзүлгөн маалыматтар үчүн шаблондор түзүлгөн. Мисалы, тесттик телефон жана бүтүргөн сатып алуу менен белгилүү бир курактагы кардарды түзүңүз.

  6. Автотесттер тутумуңузга ылайыктуу убакта башталып, иштеши керек. Ошондуктан, күн сайын түнкү ишке киргизүү уюштурулуп, анын жыйынтыгы боюнча жыйынтыктар боюнча отчет түзүлүп, корпоративдик почта аркылуу бүткүл өнүктүрүү командасына жөнөтүлөт. Эски автотесттерди калыбына келтирип, жаңыларын түзгөндөн кийин жалпы иштөө убактысы 30 мүнөттү түздү. Бул спектакль баарына ылайыктуу болду, анткени ишке киргизүү жумуш убактысынан тышкары болгон.

    Бирок биз иштин ылдамдыгын оптималдаштыруунун үстүндө иштешибиз керек болчу. Өндүрүштөгү лоялдуулук системасы түнкүсүн жаңыртылып турат. Чыгарылгандардын биринин алкагында биз түн ичинде шашылыш өзгөртүүлөрдү киргизүүгө туура келди. Түнкү саат үчтө автотесттердин жыйынтыгын жарым саат күтүү бошонууга жооптуу адамды сүйүнтпөй (Алексей Васюковго жалындуу салам!) Эртеси эртең менен биздин системага карата көптөгөн жылуу сөздөр айтылды. Бирок натыйжада иш үчүн 5 мүнөттүк норма түзүлдү.

    Ишти тездетүү үчүн биз эки ыкманы колдондук: автотесттер үч параллелдүү жипте иштей баштады, бактыга жараша, бул биздин лоялдуулук системабыздын архитектурасына байланыштуу абдан ыңгайлуу. Жана биз автотест өзү үчүн тест маалыматтарын түзбөй, системада ылайыктуу нерсени табууга аракет кылган ыкмадан баш тарттык. Өзгөртүүлөрдү киргизгенден кийин жалпы иштөө убактысы 3-4 мүнөткө чейин кыскарган.

  7. Автоматтык тесттери бар долбоор ар кандай стенддерге орнотулушу керек. Саякатыбыздын башында өзүбүздүн пакеттик файлдарыбызды жазуу аракеттери болду, бирок өз алдынча жазылган автоматташтырылган орнотуу толук коркунучтуу экени айкын болду жана биз өнөр жай чечимдерине кайрылдык. Долбоор көп түз кодду (биринчи кезекте биз автотесттердин кодун сактайбыз) жана өтө аз маалыматтарды (негизги маалыматтар автотесттер жөнүндө метаберилиштер) камтыгандыктан, Liquibase долбоорунда ишке ашыруу абдан жөнөкөй болуп чыкты. .

    Бул маалымат базасынын схемасын өзгөртүүгө көз салуу, башкаруу жана ишке ашыруу үчүн ачык булактуу, маалымат базасынан көз карандысыз китепкана. Команда сабы же Apache Maven сыяктуу алкактар ​​аркылуу башкарылат. Liquibase иштөө принциби абдан жөнөкөй. Бизде белгилүү бир жол менен уюштурулган долбоор бар, ал максаттуу серверге жайылтышы керек болгон өзгөртүүлөрдөн же скрипттерден жана бул өзгөртүүлөр кандай ырааттуулукта жана кандай параметрлер менен орнотулушу керектигин аныктаган башкаруу файлдарынан турат.

    DBMS деңгээлинде атайын таблица түзүлөт, анда Liquibase rollover журналын сактайт. Ар бир өзгөртүүнүн эсептелген хэш бар, ал ар бир жолу маалымат базасындагы долбоор менен абалдын ортосунда салыштырылат. Liquibase аркасында биз системабызга өзгөртүүлөрдү оңой эле каалаган схемага киргизе алабыз. Автотесттер азыр сыноо жана чыгаруу схемаларында, ошондой эле контейнерлерде (иштеп чыгуучулардын жеке схемалары) ишке киргизилди.

DBMSдеги бирдик тесттери - биз муну Sportmasterде кантип жасайбыз, экинчи бөлүк

Ошентип, биздин бирдик тестирлөө системасын колдонуунун натыйжалары жөнүндө сүйлөшөлү.

  1. Албетте, биринчиден, биз мыкты программалык камсыздоону иштеп чыга баштаганыбызга ынандык. Автотесттер күн сайын ишке киргизилет жана ар бир чыгарылышта ондогон каталар табылат. Анын үстүнө, бул каталардын айрымдары биз чындап эле өзгөрткүбүз келген функцияга кыйыр түрдө байланыштуу. Бул каталар кол менен тестирлөө жолу менен табылганына олуттуу шектенүүлөр бар.
  2. Команда азыр конкреттүү функциянын туура иштеп жатканына ишенет... Биринчиден, бул биздин маанилүү процесстерге тиешелүү. Мисалы, акыркы алты айдын ичинде бизде жеңилдиктерди жана дүмүрчөктөрдү бөлүштүрүү боюнча эч кандай көйгөйлөр болгон жок, релиздеги өзгөрүүлөргө карабастан, мурунку мезгилдерде кандайдыр бир жыштык менен каталар орун алган.
  3. Биз тестирлөө итерацияларынын санын кыскарта алдык. Автотесттер жаңы функциялар үчүн жазылгандыктан, аналитиктер жана толук эмес убакыттагы тестерлер жогорку сапаттагы кодду алышат, анткени ал буга чейин текшерилген.
  4. Автоматташтырылган тестирлөөнүн айрым иштеп чыгуулары иштеп чыгуучулар тарабынан колдонулат. Мисалы, контейнерлер боюнча тест маалыматтары объектти түзүү модулунун жардамы менен түзүлөт.
  5. Биз иштеп чыгуучулар тарабынан автоматташтырылган тестирлөө системасын "кабыл алуу" үчүн иштеп чыкканыбыз маанилүү. Бул маанилүү жана пайдалуу деген түшүнүк бар. Бирок өзүмдүн тажрыйбамдан бул нерседен алыс деп айта алам. Автотесттерди жазуу керек, аларды колдоо жана иштеп чыгуу керек, натыйжаларды талдоо керек жана көп учурда бул убакыт чыгымдары жөн эле арзыбайт. Өндүрүшкө барып, ал жактагы көйгөйлөр менен күрөшүү бир топ жеңил. Бул жерде иштеп чыгуучулар тизилип, бизден алардын функцияларын автотесттер менен жабууну суранышат.

кийинкиси эмне

DBMSдеги бирдик тесттери - биз муну Sportmasterде кантип жасайбыз, экинчи бөлүк

Автоматташтырылган тестирлөө долбоорун өнүктүрүү пландары жөнүндө сүйлөшөлү.

Албетте, Sportmasterдин лоялдуулук системасы тирүү жана өнүгүүнү улантууда, автотесттерди дээрлик чексиз иштеп чыгууга болот. Демек, өнүгүүнүн негизги багыты - камтуу аймагын кеңейтүү.

Автотесттердин саны көбөйгөн сайын, алардын жалпы иштөө убактысы тынымсыз көбөйөт жана биз кайрадан аткаруу маселесине кайтууга туура келет. Кыязы, чечим параллелдүү жиптердин санын көбөйтүү болот.

Бирок бул өнүгүүнүн ачык жолдору. Эгерде биз анча маанилүү эмес нерсе жөнүндө айтсак, биз төмөнкүлөрдү баса белгилейбиз:

  1. Учурда автотестти башкаруу МБС деңгээлинде жүргүзүлөт, б.а. ийгиликтүү иш үчүн PL/SQL билими талап кылынат. Зарыл болсо, системаны башкаруу (мисалы, метадайындарды ишке киргизүү же түзүү), сиз Jenkins же ушуга окшош нерсени колдонуп, кандайдыр бир администратор панелин түзө аласыз.
  2. Ар бир адам сандык жана сапаттык көрсөткүчтөрдү жакшы көрөт. Автоматташтырылган тестирлөө үчүн, мындай универсалдуу көрсөткүч Code Coverage же кодду камтуу метрикасы болуп саналат. Бул көрсөткүчтү колдонуу менен биз текшерилип жаткан системабыздын кодунун канча пайызы автотесттер менен камтылганын аныктай алабыз. 12.2 версиясынан баштап Oracle бул көрсөткүчтү эсептөө мүмкүнчүлүгүн берет жана стандарттуу DBMS_PLSQL_CODE_COVERAGE пакетин колдонууну сунуш кылат.

    Биздин автотест тутумубузга бир жылдан ашкан жана балким азыр биздин камтууну баалоого убакыт келди. Менин акыркы долбоордо (Sportmaster долбоору эмес) ушундай болгон. Автотесттердин үстүндө иштегенден бир жыл өткөндөн кийин жетекчилик биз коддун канча пайызын камтыганына баа берүү милдетин койду. 1% ашуун камтуу менен, башкаруу бактылуу болмок. Биз, иштеп чыгуучулар, болжол менен 10% натыйжа күткөн. Коддун камтылышын орнотуп, ченеп, 20% алдык. Майрам үчүн биз сыйлык алганы барганбыз, бирок аны алуу үчүн кандай жол менен барып, кийин кайда барганыбыз такыр башка кеп.

  3. Автотесттер ачыкка чыккан желе кызматтарын текшере алат. Oracle бизге муну абдан жакшы кылууга мүмкүндүк берет жана биз мындан ары бир катар көйгөйлөргө туш болбойбуз.
  4. Жана, албетте, биздин автоматташтырылган тестирлөө системасы башка долбоорго колдонулушу мүмкүн. Биз алган чечим универсалдуу жана Oracle колдонууну гана талап кылат. Башка Sportmaster долбоорлору автоматтык тестирлөөгө кызыкдар деп уктум, балким биз аларга барабыз.

табылгалары

Жыйынтыктап көрөлү. Sportmaster лоялдуулук системасынын долбоорунда биз автоматташтырылган тестирлөө системасын ишке киргизе алдык. Ал Стивен Фейерштейндин utPLSQL чечимине негизделген. utPLSQL айланасында автотест коду жана көмөкчү өз алдынча жазылган модулдар бар: ишке киргизүү модулу, маалыматтарды генерациялоо модулу жана башкалар. Автотесттер күн сайын ишке киргизилет жана эң негизгиси алар иштейт жана пайдалуу. Биз жогорку сапаттагы программалык камсыздоону чыгара баштаганыбызга ишенебиз. Ошол эле учурда, алынган чечим универсалдуу болуп саналат жана Oracle DBMS боюнча автоматташтырылган тестирлөө уюштуруу зарыл болгон каалаган долбоорго эркин колдонулушу мүмкүн.

PS Бул макала анча так эмес: текст көп жана техникалык мисалдар дээрлик жок. Эгерде тема жалпысынан кызыктуу болсо, анда биз аны улантууга даярбыз жана уландысы менен кайтып келүүгө даярбыз, анда акыркы алты ай ичинде эмне өзгөргөнүн айтып, коддуу мисалдарды келтиребиз.

Келечекте баса белгилей турган жагдайлар же ачыктоону талап кылган суроолор болсо, комментарий жазыңыз.

Сурамжылоого катталган колдонуучулар гана катыша алышат. Кирүү, өтүнөмүн.

Бул тууралуу дагы жазсак болобу?

  • Ооба албетте

  • Жок рахмат

12 колдонуучу добуш берди. 4 колдонуучу добуш берүүдөн баш тартты.

Source: www.habr.com

Комментарий кошуу