Мектепке кайтуу: автоматташтырылган тесттер менен күрөшүү үчүн кол менен тестирлөөчүлөрдү кантип үйрөтүү керек

QA тапшырган бештен төртөө автоматташтырылган тесттер менен иштөөнү үйрөнүүнү каалашат. Кол менен сыноочулардын мындай каалоолорун бардык эле ишканалар жумуш убактысында аткара албайт. Wrike кызматкерлер үчүн автоматташтыруу мектебин өткөргөн жана көптөгөн адамдардын бул каалоосун ишке ашырган. Мен бул мектепке так QA студенти катары катыштым.

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

Врейктин мектепти уюштуруудагы тажрыйбасы

Автоматташтыруу мектебинин зарылдыгы айкын болгон кезде аны уюштуруу автоматташтыруунун техникалык начальниги Стас Давыдовго жуктелген. Эмне үчүн бул демилгени көтөрүп чыгышканын, натыйжага жетиштиби, кетирген убактысына өкүнөбү, андан башка ким түшүндүрө алат? Ага сөз берели:

— 2016-жылы биз автотесттер үчүн жаңы фреймворк жаздык жана аны тесттерди жазуу оңой болгудай кылып жасадык: кадимки кадамдар пайда болду, структура бир топ түшүнүктүү болуп калды. Биз бир идея менен келдик: жаңы тесттерди жазгысы келгендердин бардыгын тартуу керек жана аны түшүнүү үчүн биз лекциялардын сериясын түздүк. Биз коллективдуу темалардын планын тузуп чыктык, келечектеги лекторлордун ар бири езуне бирден алып, ал боюнча доклад даярдап.

— Окуучулар кандай кыйынчылыктарга дуушар болушту?

— Негизинен, албетте, архитектура. Биздин тесттердин түзүлүшү боюнча көптөгөн суроолор болду. Пикирлерде бул темада көп нерсе жазылган жана кененирээк түшүндүрүү үчүн кошумча лекцияларды өткөрүүгө туура келди.

— Мектеп өзүн актадыбы?

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

Мен өзүмдүн атымдан биздин бөлүмдөрдүн ортосундагы байланыш күлкүлүү жеңил деңгээлге чейин жөнөкөйлөштүрүлгөнүн кошумчалайм. Мисалы, азыр мен кайсы учурларда жана атомдуктун кандай деңгээлинде автоматташтыруу жөнүндө ойлонуунун кереги жок. Натыйжада, бардык кызыкдар тараптар тынымсыз өсүп жаткан тесттик камтууга толук кам көрүшөт. Эч ким башкалардан мүмкүн эмес нерсени талап кылбайт.

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

Уюштуруу боюнча кеңештер

Мектеп пайдалуу болду, бирок, Стас моюнга алгандай, кээ бир кыйынчылыктар бар болчу, ошондуктан кошумча лекцияларды уюштурууга туура келди. Жана жакында эле студент кезимде өзүмдү сабатсыздык менен салыштырып көрдүм - азыр мен тестчилерди автоматташтырылган тесттерди түшүнүүгө үйрөтүүнүн идеалдуу жолун түзүү үчүн төмөнкү кадамдарды түздүм.

0-кадам. Сөздүк түзүңүз

Албетте, бул кадам QA үчүн гана керек эмес. Бирок, мен муну ачык айткым келет: автоматташтырылган код базасы окула турган формада сакталышы керек. Программалоо тилдери - жок дегенде тилдер, жана ушундан сиз сууга түшүүнү баштасаңыз болот.

Мектепке кайтуу: автоматташтырылган тесттер менен күрөшүү үчүн кол менен тестирлөөчүлөрдү кантип үйрөтүү керек

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

Мектепке кайтуу: автоматташтырылган тесттер менен күрөшүү үчүн кол менен тестирлөөчүлөрдү кантип үйрөтүү керек

(Спойлер - тапшырма администратордун атынан эс алуу аркылуу өчүрүлөт, андан кийин агымда бул тууралуу жазуу бар экенин көрөбүз.)

Бул кадам гана QAA жана QA тилдерин жакындатат. Автоматташтыруу топтору үчүн кол менен тестирлөөчүлөр иштин натыйжаларын түшүндүрүү үчүн жеңилирээк болот: аларды азыраак деталдаштырса болот. Ошентсе да баары бири-бирин түшүнүшөт. Биз утуштарды машыгуу баштала электе эле алдык.

1-кадам. Фразаларды кайталаңыз

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

Биринчи сабакта автотесттерди түз кантип жазуу керектиги боюнча негиз берүү керек. Биз иштеп чыгуу чөйрөсүн түзүүгө жардам беребиз (менин учурда, Intellij IDEA), учурдагы кадамдарды колдонуу менен учурдагы класста башка ыкманы жазуу үчүн зарыл болгон минималдуу тил эрежелерин түшүндүрөбүз. Биз алар менен бир-эки тест жазып, үй тапшырмасын беребиз, мен мындай форматтамакмын: мастерден бутактан ажыратылган, бирок андан бир нече тесттер алынып салынган. Алардын сүрөттөмөлөрү гана калды. Сыноочулардан бул тесттерди калыбына келтирүүнү суранабыз (албетте, айырманы көрсөтүү аркылуу эмес).

Натыйжада, баарын угуп, кылган адам:

  1. иштеп чыгуу чөйрөсү интерфейси менен иштөөнү үйрөнүү: бутактарды, ысык баскычтарды, тапшырмаларды жана түртүүнү түзүү;
  2. тилдин жана класстардын структурасынын негиздерин өздөштүрүү: инъекцияларды каякка киргизүү жана каяктан импорттоо керек, аннотациялар эмне үчүн керек жана ал жерде кадамдардан тышкары кандай символдор кездешет;
  3. аракеттин айырмасын түшүнүү, күтүү жана текшерүү, эмнени кайда колдонуу керек;
  4. автотесттер менен кол менен текшерүүлөрдүн айырмасын байкаңыз: автотесттерде интерфейс аркылуу аракеттерди аткаруунун ордуна тигил же бул иштеткичти тарта аласыз. Мисалы, тапшырма көрүнүшүн ачуунун, киргизүүнү тандоонун, текстти терүүнүн жана Жөнөтүү баскычын чыкылдатуунун ордуна комментарийди түздөн-түз серверге жөнөтүңүз;
  5. кийинки кадамда жооп ала турган суроолорду түзүңүз.

Акыркы пункт абдан маанилүү. Бул жоопторду алдын ала оңой эле берүүгө болот, бирок бул маанилүү окутуу принциби болуп саналат, бул суроолор түзүлбөгөн жооптор эсте калбайт жана акыры керек болгондо колдонулбайт.

Ушул убакта QA тобунан автоматика инженери ага согушта бир нече сыноолорду жазуу тапшырмасын берип, анын филиалына тапшырууга уруксат берсе идеалдуу болмок.

Эмне берүүгө болбойт:

  1. иштеп чыгуу чөйрөсүнүн функционалдуулугу жана программалоо тилинин өзү жөнүндө тереңирээк билим, бул өз алдынча бутактары менен иштөөдө гана керек болот. Бул эстен кетпейт, сиз аны эки же үч жолу түшүндүрүшүңүз керек, бирок биз автоматташтыруу боюнча инженерлердин убактысын баалайбыз, туурабы? Мисалдар: конфликттерди чечүү, gitке файлдарды кошуу, нөлдөн баштап класстарды түзүү, көз карандылыктар менен иштөө;
  2. xpath менен байланышкан бардык нерсе. Олуттуу. Бул тууралуу өзүнчө, бир жолу жана абдан топтолуп сүйлөшүү керек.

2-кадам. Грамматиканы тереңирээк карап чыгуу

Келгиле, №0 кадамдагы тапшырманын скриншотун эстейли. Бизде checkCommentWithTextExists деп аталган кадам бар. Биздин тестирлөөчү бул кадам эмне экенин түшүнөт жана биз кадамдын ичин карап, аны бир аз ажырата алабыз.

Ал эми ичинде бизде төмөнкүлөр бар:

onCommentBlock(userName).comment(expectedText).should(displayed());

onCommentBlock кайда

onCommonStreamPanel().commentBlock(userName);

Эми биз “оюнчук ал” деп эмес, “үстүнөн үчүнчү текчедеги көк шкафта жайгашкан “Детский мир” дүкөнүнөн оюнчук сатып ал” дегенди үйрөнүп жатабыз. Биз элементти ырааттуу түрдө, чоңураак элементтерден көрсөтүп жатканыбызды түшүндүрүү керек (агым -> белгилүү бир адамдын комментарийлери менен блок -> бул блоктун көрсөтүлгөн текст турган бөлүгү).

Жок, дагы эле xpath жөнүндө айтууга убакыт жок. Кыскача айтканда, бул көрсөтмөлөрдүн баары алар тарабынан сүрөттөлөт жана мурас алар аркылуу өтөт. Бирок, биз бул матчтар жана официанттар жөнүндө сүйлөшүү керек, алар бул кадамга өзгөчө тиешелүү жана эмне болуп жатканын түшүнүү үчүн зарыл; Бирок ашыкча жүктөбөңүз: студентиңиз кийинчерээк татаал ырастоолорду өз алдынча изилдей алат. Мүмкүн, should, waitUntil, displayed();, exist();, not();

Үй тапшырмасы айдан ачык: белгилүү бир сандагы тесттер үчүн зарыл болгон бир нече кадамдардын мазмуну алынып салынган бутак. Сыноочулар аларды калыбына келтирип, чуркоо кайрадан жашыл болсун.

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

3-кадам. Толук чөмүлүү

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

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

Мектепке кайтуу: автоматташтырылган тесттер менен күрөшүү үчүн кол менен тестирлөөчүлөрдү кантип үйрөтүү керек

Бардыгы:

"//div[contains(@class, ‘stream-panel’)]//a[contains(@class,'author') and text()='{{ userName }}’]//div[contains(@class,'change-wrapper') and contains(.,'{{ text }}’)]"

Окуянын ирети абдан маанилүү. Биринчиден, биз ар кандай болгон xpath алып, элементтер өтмөгүндө кантип бир жана бир гана элемент бар экенин көрсөтөбүз. Андан кийин, структура жөнүндө сүйлөшөбүз: качан WebElement колдонуу керек болгондо жана жаңы элемент үчүн өзүнчө файлды түзүү керек болгондо. Бул мурасты жакшыраак түшүнүүгө мүмкүндүк берет.

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

Бул учурда, көрүүчүлөр алардын кантип тукум кууп өткөнүн жана onCommentBlock дарегинде чекиттен кийин эмнени киргизүүгө болорун так түшүнүшү керек. Бул жерде биз бардык операторлорду түшүндүрөбүз: /, //, ., [] ж.б. Биз жүккө колдонуу жөнүндө билимди кошобуз @class жана башка зарыл нерселер.

Мектепке кайтуу: автоматташтырылган тесттер менен күрөшүү үчүн кол менен тестирлөөчүлөрдү кантип үйрөтүү керек

Студенттер xpath кантип которууну түшүнүшү керек. Консолидациялоо - бул туура, үй тапшырмасы. Биз элементтердин сыпаттамаларын жок кылабыз, аларга тесттердин ишин калыбына келтирүүгө уруксат беребиз.

Эмне үчүн бул өзгөчө жол?

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

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

Source: www.habr.com

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