Сургууль руу буцах: автоматжуулсан тестийг шийдвэрлэхийн тулд гарын авлагын шалгагчдыг хэрхэн сургах вэ

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

Би Selenium-тай хэрхэн ажиллах талаар суралцсан бөгөөд одоо бараг ямар ч гадны тусламжгүйгээр тодорхой тооны автомат тестийг бие даан дэмждэг. Мөн бидний хамтарсан туршлага, миний хувийн дүгнэлтэд үндэслэн би автоматжуулалтын хамгийн тохиромжтой сургуулийн томъёог гаргахыг хичээх болно.

Wrike-ийн сургууль зохион байгуулах туршлага

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

— 2016 онд бид автомат тестийн шинэ хүрээг бичиж, тест бичихэд хялбар болгосон: ердийн алхамууд гарч, бүтэц нь илүү ойлгомжтой болсон. Бид шинэ сорил бичих хүсэлтэй хүн бүрийг татан оролцуулж, ойлгоход хялбар болгох үүднээс цуврал лекцүүдийг зохион бүтээсэн. Бид хамтдаа сэдвийн төлөвлөгөө гаргаж, ирээдүйн багш нар тус бүр нэгийг нь авч, түүн дээр илтгэл бэлтгэсэн.

-Оюутнуудад ямар бэрхшээл тулгарсан бэ?

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

-Сургууль үр дүнгээ өгсөн үү?

- Тийм ээ, гарцаагүй. Түүний ачаар маш олон хүмүүс тест бичих ажилд оролцож, дунджаар эмнэлэгт хүн бүр автомат тест гэж юу болох, тэдгээрийг хэрхэн бичиж, хэрхэн эхлүүлж байгааг илүү сайн ойлгож эхлэв. Автоматжуулалтын инженерүүдийн ачаалал бас буурсан: туршилтын дүн шинжилгээ хийхэд туслах хүсэлтийг бид хэд дахин бага хүлээн авдаг, учир нь тестер болон хөгжүүлэгчид бараг бүх нөхцөл байдалд өөрсдөө үүнийг даван туулж эхэлсэн. Тус тэнхимийн хувьд хэд хэдэн дотоод давуу тал бий: бид илтгэл, лекц унших туршлага хуримтлуулсан бөгөөд үүний ачаар зарим автоматжуулалтын инженерүүд бага хуралд илтгэл тавьж чадсан бөгөөд шинээр элсэгчдэд зориулсан хүчирхэг видео, танилцуулгыг хүлээн авсан.

Би өөрийнхөө нэрийн өмнөөс манай хэлтэс хоорондын харилцаа холбоог инээдтэй хялбар түвшинд хүртэл хялбаршуулсан гэдгийг нэмж хэлье. Жишээлбэл, одоо би ямар тохиолдол, атомын ямар түвшинд автоматжуулах талаар бодох шаардлагагүй болсон. Үүний үр дүнд бүх сонирхогч талууд байнга нэмэгдэж буй тестийн хамрах хүрээг бүрэн анхаарч байна. Хэн ч бусдаас боломжгүй зүйлийг шаарддаггүй.

Ер нь багуудын ажилд эерэгээр нөлөөлж байгаа нь гарцаагүй. Магадгүй энэ нийтлэлийг уншиж буй хамт олон үүнтэй төстэй зүйл хийх талаар бодож байгаа болов уу? Дараа нь зөвлөгөө энгийн байх болно: автоматжуулсан туршилтууд нь таны хувьд нэн тэргүүний асуудал бол үнэ цэнэтэй юм. Дараа нь бид илүү төвөгтэй асуултын талаар ярих болно: энэ бүгдийг хэрхэн зөв зохион байгуулах вэ, ингэснээр бүх талуудын зардал хамгийн бага, гарц нь хамгийн их байх болно.

Зохион байгуулах зөвлөмжүүд

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

Алхам 0. Толь бичиг үүсгэх

Мэдээжийн хэрэг, энэ алхам нь зөвхөн QA-д шаардлагатай биш юм. Гэсэн хэдий ч би үүнийг тодорхой болгохыг хүсч байна: автоматжуулалтын кодын санг унших боломжтой хэлбэрээр хадгалах ёстой. Програмчлалын хэлүүд - наад зах нь биш хэлүүд, эндээс та шумбалтаа эхлүүлж болно.

Сургууль руу буцах: автоматжуулсан тестийг шийдвэрлэхийн тулд гарын авлагын шалгагчдыг хэрхэн сургах вэ

Элементүүдийн нэр бүхий даалгавар харах дэлгэцийн агшин энд байна. Та taskview-г хар хайрцаг хэлбэрээр туршиж байгаа бөгөөд амьдралдаа Селенийг хэзээ ч харж байгаагүй гэж төсөөлөөд үз дээ. Энэ код юу хийдэг вэ?

Сургууль руу буцах: автоматжуулсан тестийг шийдвэрлэхийн тулд гарын авлагын шалгагчдыг хэрхэн сургах вэ

(Spoiler - даалгаврыг админы нэрийн өмнөөс амралтаар устгасан бөгөөд дараа нь дамжуулалтад энэ тухай бичлэг байгааг бид харж байна.)

Зөвхөн энэ алхам нь QAA болон QA хэлийг ойртуулдаг. Автоматжуулалтын багууд гүйлтийн үр дүнг тайлбарлахад илүү хялбар байдаг; гар шалгагч нар кейс үүсгэхэд бага хүчин чармайлт гаргах шаардлагатай байдаг: тэдгээрийг илүү нарийвчлалтай болгох боломжтой. Гэсэн хэдий ч бүгд бие биенээ ойлгодог. Бодит бэлтгэл эхлэхээс өмнө бид ялалтаа авсан.

Алхам 1. Үг хэллэгийг давт

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

Эхний хичээл дээр автомат тестийг хэрхэн шууд бичих талаар үндэслэл өгөх нь зүйтэй. Бид хөгжүүлэлтийн орчныг (миний хувьд Intellij IDEA) бий болгоход тусалдаг, одоо байгаа алхмуудыг ашиглан одоо байгаа ангид өөр аргыг бичихэд шаардлагатай хэлний хамгийн бага дүрмийг тайлбарладаг. Бид тэдэнтэй нэг эсвэл хоёр тест бичиж, гэрийн даалгавар өгдөг, би үүнийг дараах байдлаар форматлах болно: салбар мастераас салаалсан боловч хэд хэдэн тестийг хассан. Зөвхөн тэдний тайлбар л үлдсэн. Бид шалгагчдаас эдгээр тестийг сэргээхийг хүсч байна (мэдээж шоуны ялгаагаар биш).

Үүний үр дүнд бүх зүйлийг сонсож, хийсэн хүн дараахь зүйлийг хийх боломжтой болно.

  1. хөгжүүлэлтийн орчны интерфейстэй ажиллаж сурах: салбарууд, халуун товчлуурууд, үүрэг гүйцэтгэх, түлхэх үүсгэх;
  2. Хэл, ангиудын бүтцийн үндсийг эзэмших: тарилга хаана оруулах, хаанаас импортлох, яагаад тэмдэглэгээ хийх шаардлагатай вэ, алхмаас гадна тэнд ямар тэмдэг байдаг вэ;
  3. үйл ажиллагааны ялгааг ойлгох, хүлээх, шалгах, хаана юу ашиглах;
  4. Автотест болон гарын авлагын шалгалтын хоорондох ялгааг анзаараарай: автотестэнд та интерфэйсээр дамжуулан үйлдлийг гүйцэтгэхийн оронд нэг эсвэл өөр зохицуулагчийг татах боломжтой. Жишээ нь, taskview нээх, оролтыг сонгох, текст бичих, Илгээх товчийг дарахын оронд шууд backend руу тайлбар илгээх;
  5. дараагийн алхамд хариулах асуултуудыг томъёол.

Сүүлийн цэг нь маш чухал юм. Эдгээр хариултыг хугацаанаас нь өмнө хялбархан өгч болох боловч томъёолсон асуултгүй хариултыг санахгүй, эцэст нь шаардлагатай үед ашиглахгүй байх нь заах чухал зарчим юм.

Энэ үед Чанарын хяналтын багийн автоматжуулалтын инженер түүнд тулалдаанд хэд хэдэн туршилт бичих даалгавар өгч, салбар руугаа даатгуулахыг зөвшөөрвөл хамгийн тохиромжтой.

Юу өгч болохгүй вэ:

  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-ийн сэдвийг шинжлэх үед түүний хамгийн чухал хэсгүүд нь ойлгомжгүй байдлаасаа болж мартагдах болно.

Гэсэн хэдий ч та нарын зарим нь үйл явцыг хэрхэн илүү оновчтой болгох талаар туршлагаа хуваалцах боломжтой байх. Сэтгэгдэл дээрх ижил төстэй саналуудыг уншихдаа баяртай байх болно!

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх