2018 yilda JavaScript testlarining umumiy ko'rinishi

TL; DR; Birlashma va integratsiya testlari uchun Jest va UI sinovlari uchun TestCafe-dan foydalaning.

*********** Muhim yangilanish: ***********

2019 yil uchun ushbu qo'llanmaning yangi versiyasiga o'tish uchun bu erni bosing.

Ushbu qo'llanma sizni 2018 yilda JavaScript-ni sinab ko'rishning eng muhim asoslari, shartlari, vositalari va yondashuvlari bilan tanishtirishga mo'ljallangan. U pastki qismida joylashgan ko'plab ajoyib maqolalardagi ma'lumotlarni birlashtiradi va Welldone Software-dagi tajribamdan kelib chiqadi. yillar davomida turli xil mahsulotlar uchun turli xil sinov echimlarini amalga oshirdik.

Ushbu qo'llanmani o'qigan va tushungan har bir kishi, 2018 yil uchun veb-ishlab chiqarish hamjamiyatida JavaScript sinovining katta rasmini yaxshi bilishini taxmin qilishlari mumkin.

  • Men ushbu maqola uchun juda jiddiy tadqiq qildim. Agar men o'tkazib yuborgan yoki xato qilgan narsani ko'rsangiz, bu haqda sharhlang, men hech qanday vaqt ichida javob bermayman.
  • Sahifaning pastki qismidagi havolalarga e'tibor bering. Ularni o'qish sizga katta rasmni tushunishdan, mutaxassis bo'lishdan (nazariy jihatdan) talab qiladi.
  • Ushbu qo'llanmani amalga oshirishning eng yaxshi usuli - har qanday sinov turlarini tanlash, sizga mos keladigan bir nechta vositalarni tanlash va ularning barchasini sinab ko'rish. Biz ko'plab vositalar va amaliyotlar dunyosida yashayapmiz. Sizning maqsadingiz ularni filtrlash va sizning shaxsiy holatlaringiz uchun eng yaxshi to'plamga kirish.

Rohatlaning :)

Kirish

Facebook tomonidan sinov uchun mo'ljallangan Jest logotipiga qarang:

Ko'rinib turibdiki, ularning shiori "og'riqsiz" JavaScript testini va'da qilmoqda, ammo "izohlardan bir yigit" ta'kidlaganidek:

Va haqiqatan ham Facebookda ushbu shiordan foydalanish uchun yaxshi sabab bor. Umuman olganda, JS ishlab chiquvchilari veb-sayt sinovlaridan unchalik mamnun emaslar. JS sinovlari cheklangan, bajarilishi qiyin, sekin va ba'zan qimmatga tushadi.

Shunga qaramay, to'g'ri strategiya va vositalarning to'g'ri kombinatsiyasi bilan deyarli to'liq qamrovga erishish mumkin va sinovlar juda tartibli, sodda va nisbatan tezkor bo'lishi mumkin.

*********** Muhim yangilanish: ***********

2019 yil uchun ushbu qo'llanmaning yangi versiyasiga o'tish uchun bu erni bosing.

Sinov turlari

Turli xil sinov turlari haqida ko'proq va chuqurroq bu erda va shu erda o'qishingiz mumkin.
Umuman olganda, veb-sayt uchun eng muhim test turlari:

  • Birlik testlari - kirishni etkazib berish va natija kutilganiga ishonch hosil qilish orqali individual funktsiyalarni yoki sinflarni sinash.
  • Integratsiya testlari - yon ta'sirlarni qo'shib, kutilganidek harakat qilish uchun test jarayonlari yoki tarkibiy qismlar.
  • UI testlari - (A.K.A Funktsional testlar) Kutilayotgan xatti-harakatni ta'minlash uchun ichki tuzilishidan qat'i nazar, brauzer yoki veb-saytni boshqarish orqali mahsulotning o'zida sinov stsenariylari.

Sinov vositalarining turlari

Sinov vositalarini quyidagi funktsiyalarga bo'lish mumkin. Ba'zilar bizga faqat bitta funktsiyani, boshqalari esa kombinatsiyani taqdim etadi.

Keyinchalik moslashuvchan funktsionallikka ega bo'lish uchun, hatto bir xil darajada erishish mumkin bo'lsa ham, vositalar kombinatsiyasidan foydalanish odatiy holdir.

  1. Sinov tuzilishini taqdim eting (Mocha, Yasemin, Jest, Bodring)
  2. Tasdiqlash funktsiyalarini bering (Chai, Jasmine, Jest, Kutilmagan)
  3. Sinov natijalarini yaratish, ko'rsatish va tomosha qilish (Mocha, Jasmin, Jest, Karma)
  4. Oldingi ishlanmalardagi o'zgarishlar maqsadga muvofiq ekanligiga ishonch hosil qilish uchun tarkibiy va ma'lumotlar tuzilmalarining suratlarini yaratish va taqqoslash (Jest, Ava)
  5. Moxlar, ayg'oqchilar va stublar bilan ta'minlang (Sinon, Yasemin, ferment, Jest, testdouble)
  6. Kod qamrovi to'g'risida hisobot tayyorlang (Istanbul, Jest, Blanket)
  7. Brauzer yoki brauzerga o'xshash muhitni ularning ssenariylari bajarilishini boshqarish bilan ta'minlang (Protractor, Nightwatch, Phantom, Casper)

Yuqorida keltirilgan ba'zi atamalarni tushuntirib beramiz:

Sinov tuzilishi sizning testlaringizni tashkil qilishni anglatadi. Bugungi kunda testlar odatda xulq-atvor rivojlanishini (BDD) qo'llab-quvvatlaydigan BDD tuzilishida tashkil etiladi. Ko'pincha bunday ko'rinadi:

Tasdiqlash funktsiyalari - bu tekshirilayotgan o'zgaruvchilar kutilayotgan qiymatni o'z ichiga olganligiga ishonch hosil qiluvchi funktsiyalardir. Ular odatda quyidagicha ko'rinadi, bu erda eng mashhurlari birinchi ikkita:

MASLAHAT: Mana, Yaseminning ilg'or ko'rsatmalari haqida yoqimli maqola.

Josuslar bizga funktsiyalar haqida ma'lumot berishadi - Ular necha marta chaqirilgan, qanday hollarda va kim tomonidan?

Ular integratsiya testlarida jarayonlarning yon ta'siri kutilganidek amalga oshirilganligiga ishonch hosil qilish uchun ishlatiladi. Masalan, ba'zi bir jarayon davomida hisoblash funktsiyasi necha marta chaqirildi?

Stubing yoki dublyaj (filmlardagi juftliklar kabi) tanlangan modullardagi kutilgan xatti-harakatni ta'minlash uchun tanlangan funktsiyalarni tanlangan funktsiyalarga almashtiradi.

Agar biz user.isValid () har doim boshqa bir komponentni sinab ko'rsangiz, sinov paytida haqiqat qaytishini ta'minlashini xohlasak, masalan:

Shuningdek, u va'dalar bilan ishlaydi:

Makes yoki Fakes - bu jarayonlarning turli qismlarini sinash uchun ma'lum modullarni yoki xatti-harakatlarni soxtalashtirish.

Masalan, Sinon, jarayonni sinab ko'rishda oflayn, tezkor va kutilayotgan javoblarni ta'minlash uchun serverni soxtalashtirishi mumkin.

Suratni sinash - bu ma'lumotlar strukturasini kutilgan bilan taqqoslash.

Quyidagi misol, rasmiy Jest hujjatlaridan, ma'lum bir Link komponentining surat sinovini ko'rsatadi.

U aslida tarkibiy qismni namoyish etolmaydi va rasmga tushirmaydi, lekin uning ichki ma'lumotlarini quyidagicha alohida faylda saqlaydi:

Sinov tugagach va yangi surat avvalgisidan farq qilsa, ishlab chiqaruvchi ushbu o'zgartirishni rejalashtirishga rozi bo'lishini so'raydi.

Eslatma: Odatda suratlar tarkibiy qismlarning ma'lumotlarini taqqoslash uchun amalga oshiriladi, ammo ular boshqa ma'lumotlar turlarini taqqoslashlari mumkin, masalan, redux do'konlari va dasturdagi turli birliklarning ichki tuzilishi.

Brauzer yoki brauzerga o'xshash muhit uchtadan biri bo'lishi mumkin:

  • jsdom - Haqiqiy brauzerni taqlid qiladigan toza JavaScript muhiti. UI interfeysi mavjud emas va u hech narsa bermaydi - sizga oynani, hujjatni, tanani, joylashuvni, cookie-fayllarni, selektsionerlarni va brauzer ichida JS-ni ishga tushirganda nimani qo'lga kiritishingizni ta'minlaydi.
  • Headless Browser Environment - brauzerga tezroq javob berish uchun interfeys interfeysisiz ishlaydigan brauzer.
  • Haqiqiy brauzer muhiti - sinovlarni ochadigan va boshqaradigan haqiqiy brauzer.

*********** Muhim yangilanish: ***********

2019 yil uchun ushbu qo'llanmaning yangi versiyasiga o'tish uchun bu erni bosing.

Hammasini birga qo'yish

Iloji bo'lsa, barcha test turlari uchun bir xil vositalardan foydalanishni tavsiya etamiz:
Xuddi shu test tuzilishi va sintaksis (1), tasdiqlash funktsiyalari (2), natijalar to'g'risida hisobot va kuzatuv mexanizmi (4).

Shuningdek, biz ikki xil jarayonni yaratishni taklif qilamiz. Biri ishlaydigan birlik va integratsiya testlari uchun, ikkinchisi UI testlari uchun. Buning sababi, UI sinovlari ko'proq vaqt talab etadi, ayniqsa turli xil brauzerlarda sinovdan o'tgan bo'lsa va odatda sizga turli xil qurilmalar va brauzerlarni taqdim qilish uchun tashqi xizmatdan foydalansangiz (bu keyinroq muhokama qilinadi) va pulni talab qilishi mumkin, shuning uchun siz uni ishlatishni afzal ko'rasiz. birinchi jarayonga qaraganda kamroq. Masalan: faqat bitta xususiyat filialini birlashtirishdan oldin.

Birlik sinovlari

Ilovalar, xizmatlar va yordamchilarning barcha kichik toza bo'linmalarini qamrab olishi kerak. Ushbu jihozlarning barchasini oddiy va harflar bilan kiriting va tasdiqlash funktsiyalaridan foydalanib, ularning chiqishi kutilganiga ishonch hosil qiling (3). Qaysi birliklar qamrab olinganligini bilish uchun qamrovni yoritish vositasidan (6) foydalaning.

Birlik testlari funktsional dasturlash va sof funktsiyalardan iloji boricha ko'proq foydalanishning sabablaridan biridir.
Ilovangiz qanchalik toza bo'lsa, uni sinash osonroq bo'ladi.

Integratsiya sinovlari

Eski maktab testlari birlikni sinashga qaratilgan edi va natijada ko'plab kichik qismlar ishlaydigan dasturlar paydo bo'ldi, ammo umuman olganda jarayonlar muvaffaqiyatsiz davom etmoqda.
Integratsion testlar (shu jumladan oniy rasmlar), boshqa tomondan, kutilmagan nosozliklarni aniqlashi mumkin, bunda siz bitta narsani tuzatasiz va boshqasini buzasiz.
Shuni ham yodda tutish kerakki, haqiqiy dunyoda, nomukammal dizayni va qora qutilarning keng qo'llanilishi sababli, hamma birliklar ham toza emas va hamma birliklar ham sinab ko'rilmaydi - Ba'zi birliklarni faqat katta jarayonning bir qismi sifatida sinovdan o'tkazish mumkin. .

Integratsiya testlari muhim o'zaro bog'liq modul jarayonlarini qamrab olishi kerak. Birlikni tekshirish bilan taqqoslaganda, ehtimol siz kutilgan yon ta'sirni ta'minlash uchun ayg'oqchilarni (5) ishlatgan bo'lardingiz va shunchaki maxsus testda bo'lmagan qismlarni masxara qilish va o'zgartirish uchun chiqishni va stublarni (5) tasdiqlash o'rniga.

Bundan tashqari, birlik sinovlaridan farqli o'laroq, brauzer yoki brauzerga o'xshash muhit (7) oynaga bog'liq bo'lgan jarayonlarga yordam berishi mumkin va jarayonning bir qismi muayyan qismlarni taqdim etish yoki ular bilan o'zaro aloqa qilish kerak bo'lganda.

Ushbu tarkibiy qismlarni suratga olish sinovlari (4) ham ushbu toifaga kiradi. Ular bizga tanlangan tarkibiy qismlarni amalda ko'rsatmasdan yoki brauzer yoki brauzerga o'xshash muhitni ishlatmasdan qanday ta'sir qilishini sinab ko'rish usulini taqdim etadi.

UI sinovlari

Ba'zan tez va samarali birlik va integratsiya sinovlari etarli emas.

UI sinovlari har doim ilgari muhokama qilingan brauzer yoki shunga o'xshash muhitda (7) ishlaydi.

Ular ushbu muhitlardagi foydalanuvchilarning xatti-harakatlarini taqlid qiladi (bosish, yozish, aylantirish va h.k.) va ushbu stsenariylar aslida oxirgi foydalanuvchi nuqtai nazaridan ishlayotganiga ishonch hosil qiladi.

Shuni esda tutish kerakki, ushbu sinovlarni o'rnatish eng qiyin. O'zingizni turli xil mashinalarda, qurilmalarda, brauzer turlari va versiyalarida sinov o'tkazish uchun muhit yaratayotganingizni tasavvur qiling. Shuning uchun siz uchun ushbu xizmatni taqdim etadigan ko'plab xizmatlar mavjud. Va bundan ham ko'proq narsani bu erda topish mumkin.

Umumiy sinov vositalarining ro'yxati

jsdom

jsdom - bu WHATWG DOM va HTML standartlarining JavaScript dasturidir. Boshqacha qilib aytganda, jsdom brauzer muhitini oddiy JS-dan boshqa hech narsa ishlatmasdan taqlid qiladi.

Yuqorida aytib o'tilganidek, ushbu simulyatsiya qilingan brauzer muhitida sinovlar juda tez o'tishi mumkin. Jsdomning kamchiliklari shundaki, hamma narsani haqiqiy brauzerdan tashqarida taqlid qilish mumkin emas (masalan, skrinshotni suratga olmaysiz), shuning uchun uni ishlatish sizning test imkoniyatlaringizni cheklaydi.

Shuni ta'kidlash kerakki, JS hamjamiyati uni tezda yaxshilaydi va hozirgi versiya haqiqiy brauzerga juda yaqin.

Istanbul

Istambul sizga kodingizning qancha qismi birlik sinovlari bilan qoplanganligini aytib beradi. U bayonot, chiziq, funktsiya va filialni qamrab olish to'g'risida foizlarda hisobot beradi, shunda siz nimani qoplash kerakligini yaxshiroq tushunasiz.

Karma

Karma sizga brauzerda va brauzerda jsdom kabi muhitda testlarni o'tkazishga imkon beradi.

Karma sinov muhitini sahifa muhitida o'tkazish uchun maxsus veb-sahifaga ega sinov serveriga ega. Ushbu sahifani ko'plab brauzerlarda ishlatish mumkin.

Bu shuningdek brauzerStack kabi xizmatlardan foydalangan holda testlarni masofadan boshqarish mumkinligini anglatadi.

Chay

Chay - eng mashhur tasdiqlash kutubxonasi.

Kutilmagan

Kutilmagan - bu Chayning biroz farqli sintaksisi bo'lgan tasdiqlash kutubxonasi. Bu shuningdek kengaytirilishi mumkin, shuning uchun tasdiqlarni kutubxonalar kabi kutubxonalar yordamida yanada rivojlantirsa bo'ladi, bu erda siz ko'proq bu erda o'qishingiz mumkin.

Sinon.JS

Sinon - bu har qanday birlik sinov tizimida ishlaydigan JavaScript uchun juda kuchli mustaqil josuslar, stublar va mazaxlar.

testdouble.js

testdouble - bu Sinon qilgan ishlarni kam bajaradigan va uni yaxshiroq bajarishni talab qiladigan kamroq mashhur kutubxona. Dizayn, falsafa va xususiyatlarda bir nechta farqlar bilan, uni ko'p hollarda foydali qilish mumkin. bu haqda bu erda, shu erda va shu erda o'qishingiz mumkin.

Wallaby

Wallaby - eslatib o'tishga arziydigan yana bir vosita. Bu bepul emas, lekin ko'plab foydalanuvchilar uni sotib olishni tavsiya qiladilar. Bu sizning IDE-da ishlaydi (u barcha asosiylarini qo'llab-quvvatlaydi) va kodni o'zgartirish testlariga tegishli bo'lib, real vaqtda real vaqt rejimida biron bir narsa muvaffaqiyatsiz tugaganligini ko'rsatadi.

Bodring

Bodring Gherkin sintaksisidan foydalangan holda qabul mezonlari fayllari va ularga mos keladigan testlar o'rtasida bo'linish orqali BDD-da testlarni yozishda yordam beradi.

Testlar turli xil tillarda yozilishi mumkin, shu jumladan biz qo'llab-quvvatlagan JS:

Ko'pgina jamoalar ushbu sintaksisni TDD-ga qaraganda qulayroq deb topishadi.

Birligingiz va integratsiya sinovlari doirasini tanlang

Ehtimol siz qilishingiz kerak bo'lgan birinchi tanlov bu qanday ramkadan foydalanmoqchisiz va kutubxonalar. Noyob vositalarga ehtiyoj paydo bo'lguncha, sizning ramkangiz taqdim etadigan vositalardan foydalanish tavsiya etiladi.

* Qisqasi, agar siz "yangi ishni boshlashni" xohlasangiz yoki yirik loyihalarning tezkor doirasini qidirmoqchi bo'lsangiz, Jest bilan boring.
* Agar siz juda moslashuvchan va kengaytiriladigan konfiguratsiyani istasangiz, Mocha bilan boring.
* Agar siz soddaligini izlayotgan bo'lsangiz, Ava bilan boring.
* Agar siz haqiqatan ham past darajadagi bo'lishni xohlasangiz, lenta bilan boring.

Bu erda ba'zi bir xususiyatlarga ega eng taniqli vositalarning ro'yxati:

mocha

Mocha hozirgi kunda eng ko'p foydalaniladigan kutubxona. Yasemindan farqli o'laroq, u uchinchi tomonning ayblovlari, masxara qilish va josuslik vositalari (odatda Enzim va Chay) bilan qo'llaniladi.

Bu shuni anglatadiki, Mocha-ni o'rnatish biroz qiyinroq va ko'proq kutubxonalarga bo'linadi, ammo u yanada moslashuvchan va kengaytmalar uchun ochiqdir.

Masalan, agar siz maxsus tasdiqlash mantig'ini xohlasangiz, siz Chayni fork qilishingiz va faqat Chayni o'zingizning tasdiqlash kutubxonangiz bilan almashtirishingiz mumkin. Buni Yaseminada ham qilish mumkin, ammo Mochada bu o'zgarish yanada aniqroq bo'ladi.

  • Community - noyob stsenariylarni sinash uchun ko'plab plaginlar va kengaytmalar mavjud.
  • Kengaytirish - Sinon singari plaginlar, kengaytmalar va kutubxonalar Jasmina yo'q xususiyatlarni o'z ichiga oladi
  • Globallar - sukut bo'yicha globallarni yaratadi, lekin aniq aytishlaricha, josuslarga o'xshagan ayg'oqchilar va josuslar emas - ba'zi odamlar globallarning bu kabi ko'rinmasligidan hayratda qolishadi.

Jest

Jest - Facebook tomonidan tavsiya etilgan sinov doirasi. Keyinchalik muhokama qiladigan Jasmine-ga asoslanadi. Bugungi kunda Facebook o'zining funktsional imkoniyatlarining ko'pini almashtirdi va uning ustiga ko'plab qo'shimcha funktsiyalarni qo'shdi.

Ko'p miqdordagi maqola va bloglarni o'qib chiqqaningizdan so'ng, odamlar Jestning tezkorligi va qulayligidan hayratda qolishadi.
  • Ishlash - Avvalo Jest aqlli parallel sinov mexanizmini amalga oshirish orqali ko'plab sinov fayllari bo'lgan yirik loyihalar uchun tezroq hisoblanadi (Masalan, bizning tajribamizdan va ushbu blog xabarlarida: bu erda, bu erda, bu erda, bu erda).
  • UI - aniq va qulay.
  • Tayyor-borish - Sinon singari kutubxonalarga teng keladigan tasdiqlash, josuslik, masxaralash bilan birga keladi. Agar sizga ba'zi noyob xususiyatlar kerak bo'lsa, kutubxonalardan osongina foydalanish mumkin.
  • Globals - Yasemindagi singari, u standart globallarni yaratadi, shuning uchun ularni talab qilishning hojati yo'q. Bu ham yomon deb hisoblanishi mumkin, chunki bu sizning testlaringizni kamroq moslashuvchan va kamroq boshqariladigan qiladi, lekin aksariyat hollarda bu sizning hayotingizni osonlashtiradi:
  • Fotosuratni sinab ko'rish - eng tezkor surat Facebook tomonidan ishlab chiqilgan va qo'llab-quvvatlangan, garchi u deyarli har qanday boshqa tizimda vositani birlashtirish doirasida yoki to'g'ri plaginlar yordamida ishlatilishi mumkin.
  • Yaxshilangan modullar masxara qilish-Jest sizga sinov tezligini oshirish uchun og'ir modullarni masxara qilishning oson usulini taqdim etadi. Masalan, tarmoqni so'rash o'rniga, xizmatni va'da qilingan vaziyatda masxara qilish mumkin.
  • Kod qamrovi - Istanbulga asoslangan kuchli va tez o'rnatilgan kodni qamrab olish vositasini o'z ichiga oladi.
  • Ishonchlilik - bu nisbatan yosh kutubxona bo'lsa-da, 2017 yil davomida Jest barqarorlashdi va hozir ishonchli deb hisoblanadi. Hozirda u barcha yirik IDE va ​​vositalar tomonidan qo'llab-quvvatlanadi.
  • Development-est faqat yangilangan fayllarni yangilaydi, shuning uchun testlar ko'rish rejimida juda tez ishlaydi.

yasemin

Yasemin - bu Jestga asoslangan sinov maydonchasi. Nima uchun siz hali ham yaseminni ishlatasiz? Bu uzoq vaqtdan beri mavjud bo'lib, jamiyat tomonidan yaratilgan juda ko'p miqdordagi maqola va vositalarga ega.

Bundan tashqari, Angular hali ham uni Jest-dan foydalanishni taklif qiladi, garchi Jest ham Angular sinovlarini o'tkazish uchun juda mos bo'lsa-da, ko'p odamlar buni qilishadi.

  • Tayyor-borish - sinovni boshlash uchun kerak bo'lgan barcha narsalar bilan birga keladi.
  • Globals - global miqyosdagi barcha muhim sinov xususiyatlariga mos keladi.
  • Jamiyat - Bu bozorda 2009 yildan beri mavjud bo'lib, unga asoslangan ko'plab maqolalar, takliflar va vositalarni to'plagan.
  • Burular - uning barcha versiyalari uchun keng burchakli qo'llab-quvvatlovga ega va rasmiy burchak hujjatida tavsiya etilganidek.

AVA

Ava - bu parallel ravishda sinovlarni olib boradigan minimalistik test kutubxonasi.

  • Tayyor-borish - sinovni boshlash uchun kerak bo'lgan barcha narsalar bilan birga keladi (josuslik va dublyajdan tashqari, siz hech qachon qo'sha olmaysiz). Sinov tuzilishi va tasdiqlash uchun quyidagi sintaksisdan foydalanish va Node.js-da ishlaydi:
  • Globals - Yuqorida ko'rib turganimizdek, u sinov globallarini yaratmaydi, shuning uchun siz testlaringizni ko'proq nazorat qila olasiz.
  • Oddiylik - ko'pgina rivojlangan xususiyatlarni qo'llab-quvvatlayotganda, murakkab APIsiz oddiy tuzilish va tasdiqlar.
  • Development-Ava faqat yangilangan fayllarni yangilaydi, shuning uchun sinovlar tomosha rejimida tezkor ishlaydi.
  • Tezlik - testlarni alohida Node.js jarayonlari kabi parallel ravishda bajaradi.
  • Surat rasmini sinash ramkaning bir qismi sifatida qo'llab-quvvatlanadi.

lenta

Lenta ularning barchasida sodda. Bu siz tugun bilan ishlaydigan juda qisqa va "nuqtaga" API bilan ishlaydigan JS faylidir.

  • Oddiylik - murakkab APIsiz minimalizm tuzilishi va tasdiqlar. Avadan ham ko'proq.
  • Globals - Hech qanday sinov globallarini yaratmaydi, shuning uchun siz testlaringizni ko'proq nazorat qila olasiz.
  • Sinovlar o'rtasida Shared Shtat yo'q - Lenta testlarning modulyalligi va foydalanuvchilarni testlar tsikli davomida maksimal darajada boshqarilishini ta'minlash uchun "beforeEach" kabi funktsiyalardan foydalanishni taqiqlaydi.
  • Hech qanday CLI kerak emas - Lenta shunchaki JS ishlaydigan joyda ishlaydi.

UI sinov vositalari

Avvalo, yuqorida aytib o'tilganidek, bu erda va bu erda siz sinovlarni o'tkazadigan mashinalarni joylashtiradigan va ushbu testlarni turli xil qurilmalar va brauzerlarda bajarishga yordam beradigan xizmat ko'rsatuvchi provayderlar haqida ajoyib maqolalarni topishingiz mumkin.

UI sinovlari uchun doimiy vositalar soni ularni amalga oshirishda ham, falsafada ham, APIda ham bir-biridan juda farq qiladi, shuning uchun turli xil echimlarni tushunish va ularni mahsulotingizda sinab ko'rish uchun vaqt sarflash tavsiya etiladi.

* Qisqasi, ishonchli va sodda brauzer montaj qilinadigan bitta vosita yordamida "boshlashni" xohlasangiz, TestCafe-ga o'ting.
* Agar siz oqim bilan borishni istasangiz va maksimal darajada jamoatchilik tomonidan qo'llab-quvvatlanmoqchi bo'lsangiz, WebdriverIO bu yo'l.
* Agar siz brauzerlararo ko'magi haqida qayg'urmasangiz, Puppeteer-dan foydalaning.
* Agar sizning ilovangizda foydalanuvchilarning murakkab aralashuvlari va grafikalari bo'lmasa, shakllar va navigatsiyalarga to'la tizim kabi, Casper kabi brauzerning boshsiz vositalaridan foydalaning.

selen

Selenium, foydalanuvchi xatti-harakatlarini taqlid qilish uchun brauzerni avtomatlashtiradi. Bu maxsus testlar uchun yozilmagan va API yordamida brauzerda foydalanuvchi harakatlarini simulyatsiya qiladigan serverni fosh qilish orqali ko'p maqsadlarda brauzerni boshqarishi mumkin.

Seleniumni ko'p jihatdan va turli xil dasturlash tillaridan foydalangan holda boshqarish mumkin, va ba'zi bir vositalar yordamida hatto biron bir real dasturlashsiz ham.

Ammo bizning ehtiyojimizga ko'ra Selenium serveri bizning NodeJS va brauzer ishlaydigan server o'rtasida aloqa qatlami bo'lib xizmat qiladigan Selenium WebDriver tomonidan boshqariladi.

Node.js <=> WebDriver <=> Selenium Server <=> FF / Chrome / IE / Safari

WebDriver-ni sinov tizimingizga import qilish mumkin va testlar uning bir qismi sifatida yozilishi mumkin:

WebDriver-ning o'zi siz uchun etarli bo'lishi mumkin va haqiqatan ham ba'zi odamlar uni odatdagidek foydalanishni taklif qilmoqdalar, ammo turli xil kutubxonalar uni eterni almashtirish yoki o'rash orqali kengaytirish uchun yaratilgan.

Va haqiqatan ham WebDriverni o'rash ortiqcha kodni qo'shishi va disk raskadrovka jarayonini yanada qiyinlashtirishi mumkin, bu esa uni WebDriverning eng faol rivojlanishidan (2018 yil uchun) ajratishi mumkin.

Shunga qaramay, ba'zi odamlar uni to'g'ridan-to'g'ri ishlatmaslikni afzal ko'rishadi. Selenyum ishlashi uchun ba'zi kutubxonalarni ko'rib chiqamiz:

Appium

Apium, quyidagi vositalar yordamida mobil qurilmadagi veb-saytlarni sinab ko'rish uchun Seleniumga o'xshash API-ni taqdim etadi:

  • iOS 9.3+: Apple-ning XCUITest
  • IOS 9.3-dan oldin: Apple-ning UIA avtomatizatsiyasi
  • Android 4.2+: Google-ning UiAutomator / UiAutomator2
  • Android 2.3+: Google-ning asboblari. (Asboblarni qo'llab-quvvatlash alohida loyihani yig'ish orqali ta'minlanadi, Selendroid)
  • Windows Phone: Microsoft-ning WinAppDriver

Shunday qilib, agar siz Selenium yoki Selenium asosidagi vositalardan foydalansangiz, apium-ni mobil qurilmalarda sinab ko'rish uchun ishlatishingiz mumkin.

Protraktor

Protractor - bu yaxshilangan sintaksis va Angular uchun maxsus o'rnatilgan kancalarni qo'shish uchun Seleniumni to'playdigan kutubxona.

  • Burular - maxsus kancalarga ega, ammo boshqa JS ramkalarida ham muvaffaqiyatli ishlatilishi mumkin. Rasmiy hujjatlar ushbu vositadan foydalanishni taklif qiladi.
  • Xatolik haqida xabar berish - yaxshi mexanizm.
  • Support-TypeScript qo'llab-quvvatlashi mavjud va kutubxona ulkan Angular jamoasi tomonidan boshqariladi va xizmat qiladi.

Veb-drayver

WebdriverIO o'z seleniumli WebDriver dasturiga ega.

  • Sintaksis - juda oson va o'qilishi mumkin.
  • Moslashuvchan - juda sodda va agnostik, hatto sinovlarda, moslashuvchan va kengaytiriladigan kutubxonada.
  • Community - Bu yaxshi qo'llab-quvvatlash va ishtiyoqli ishlab chiquvchilar jamoasiga ega, bu esa uni plaginlar va kengaytmalar bilan ta'minlaydi.

Tungi soat

Nightwatch-da selenli WebDriver-ning o'ziga xos versiyasi mavjud. O'zining sinov doirasini sinov serveri, tasdiqlash vositalari va vositalari bilan ta'minlaydi.

  • Framework - Boshqa ramkalar bilan ham foydalanish mumkin, lekin ayniqsa boshqa funktsiyalarning bir qismi sifatida emas, balki funktsional testlarni o'tkazishni xohlasangiz, ayniqsa foydali bo'lishi mumkin.
  • Sintaksis - eng oson va o'qiladigan hisoblanadi.
  • Qo'llab-quvvatlash - skriptlarni qo'llab-quvvatlamaydi va umuman olganda, bu kutubxona boshqalarga qaraganda biroz kamroq qo'llab-quvvatlanadi.

TestCafe

TestCafe - bu selenga asoslangan vositalarga ajoyib alternativ. U 2016 yil oxirida qayta yozilgan va ochiq manbalardan olingan.

Sinov yozuvchisi va mijozlarni qo'llab-quvvatlash kabi dasturiy bo'lmagan test vositalarini taklif qiladigan pullik versiya hali ham mavjud, chunki bu juda muhim, chunki eskirgan ko'plab maqolalar uning kodi yopilgan deb xato yozib, uni kutubxonalarning noqulayligi deb hisoblashadi.

O'zini veb-saytga JavaScript-ning skriptlari sifatida kiritadi, chunki Selenium singari brauzerlarning o'zlarini boshqarish kerak. Bu TestCafe-ga har qanday brauzerda, shu jumladan mobil qurilmalarda ishlashi va JavaScript-ni bajarish tsiklini to'liq boshqarish imkoniyatini beradi.

TestCafe - bu JavaScript va sinovga yo'naltirilgan. U hozirda barqaror va xususiyatlarga to'la deb hisoblansa-da, hozirda u katta rivojlanish bosqichida.

  • Tez sozlash - sizga maxsus brauzerlar kerak emas. Faqat brauzerni oching va sinovlaringizni u erda o'tkazing.
  • Cross Browser va Devices - ko'plab brauzerlar va qurilmalarni qo'llab-quvvatlaydi va ularni SauceLabs yoki BrowserStack-dan foydalanib, ularni sinab ko'rish uchun qurilmalar va brauzerlarni taqdim etadi. Bunga Headless Chrome va Headless Firefox-da testlarni o'tkazish kiradi, ular keyinchalik muhokama qilinadi.
  • Parallel Testing - TestCafe bir vaqtning o'zida bir nechta brauzerlarda sinovlarni o'tkazishi mumkin. Ushbu amaliyot sizning sinov vaqtingizni sezilarli darajada kamaytirishi mumkin.
  • Qulay xatolar haqida xabar berish
  • Eg Ecosystem-TestCafe o'zining sinov tuzilmasidan foydalanadi. Bu juda qulay bo'lishi mumkin, ayniqsa UI testlari odatda boshqa testlardan alohida o'tkazilishi sababli, lekin ba'zi odamlar buni yoqtirmaydilar.

Cypress

Cypress - TestCafe-ning bevosita raqobatchisi. Ular nisbatan bir xil ishni qilmoqdalar, bu veb-saytga testlarni kiritish, lekin ular buni yanada zamonaviy, moslashuvchan va qulay usulda bajarishga harakat qilishadi.

Ular yangiroq bo'lib, shunchaki yopiq beta-versiyadan ommaviy beta-versiyaga o'tdi (2017 yil oktyabr oyida), ammo ular allaqachon ko'plab qabul qiluvchilarga ega.

  • Hozirda xoch-brauzer qo'llab-quvvatlanmaydi - faqat xromni qo'llab-quvvatlaydi (va boshsiz). Ushbu maqola yaratilayotgan paytda ular bu ustida ishlashmoqda. (Va biz maqolani ular bajargandan so'ng yangilaymiz)
  • Murakkab xususiyatlarning etishmasligi - parallel testlar va bir nechta sinov vositalari hali TestCafe bilan taqqoslanmagan, ammo ular mahsulotning qunt bilan ishlaydigan jamoasining yo'l xaritasida mavjud.
  • Hujjatlar - qat'iy va aniq.
  • Nosozliklarni tuzatish asboblari - Nosozliklarni tuzatish va sinov jarayonini qayd qilish.
  • Mocha-ni test tuzuvchisi sifatida ishlatish uni standart holga keltiradi va UI testlaringizni boshqa testlar bilan bir xil tuzilishda amalga oshirishi mumkin.

Qo'g'irchoq

Kukla - bu Google tomonidan ishlab chiqilgan Node.js kutubxonasidir. Boshsiz Chrome-ni boshqarish uchun qulay Node.js API-ni taqdim etadi.

Boshsiz Chrome shunchaki ishga tushirilgan oddiy Chrome v59 +
- boshsiz bayroq. Xrom boshsiz rejimda ishlaganda, uni boshqarish uchun APIni ochib beradi va ilgari aytilganidek, Puppeteer - bu Google tomonidan boshqariladigan JavaScript vositasidir.

Bu erda shuni ta'kidlash kerakki, Firefox ham 2017 yil oxirida ularning boshsiz rejimini chiqardi.

E'tibor bering, turli xil sinov vositalari Headless Chrome va Firefox-dan ham foydalanishlari mumkin. Masalan: TestCafe, Karma,.

  • Qo'g'irchoqboz nisbatan yangi, ammo uning atrofida vositalar va o'rash vositalaridan foydalanadigan va ishlab chiqaradigan katta bir jamoa mavjud.
  • VebKit-ning eski tarmog'iga qurilgan PhantomJS-dan farqli o'laroq, u mahalliy bo'lgani uchun tezroq, u eng yangi va eng yangi Chrome dvigatelidan foydalanadi. (Buni keyingi bo'limda ko'rib chiqamiz)
  • Boshsiz Chrome-ning yana bir kamchiliklaridan biri (shuningdek, Kukl-g'unich) bu flesh kabi kengaytmalarni qo'llab-quvvatlamasligi va yaqin kelajakda bo'lmasligi mumkin.

PhantomJS

Phantom boshqariladigan Chrome-ga o'xshash boshsiz brauzer yaratish uchun krom motorini ishlatadi.

Google o'zlarining qo'g'irchoqchisini e'lon qilganligi sababli, uning yaratuvchisi va xizmat ko'rsatuvchisi Vitaliy Slobodin endi u ustida ishlamaydi, shuning uchun u 2017 yilning o'rtalaridan boshlab ancha sekin saqlanib kelinmoqda, ammo u hali ham bir oz saqlanib qolgan.

Nega Phantom-ni qo'g'irchoqbozdan foydalanasiz?

  • Birinchidan, chunki u ancha etuk va ko'plab ajoyib qo'llanmalar va vositalarga ega.
  • Keyinchalik biz muhokama qiladigan CasperJS kabi ko'plab foydali vositalardan foydalanilgan.
  • U eski Chrome brauzerlarini taqlid qilishi uchun eski WebKit-dan foydalanadi.
  • Bundan tashqari, yuqorida aytib o'tilganidek, Phantom Headless Chrome-dan farqli o'laroq Flash kabi kengaytmalarni qo'llab-quvvatlaydi.

Kabus

Nightmare bu juda sodda sinov sintaksisini taklif qiladigan ajoyib UI sinov kutubxonasidir.

U Phantom-ga o'xshash Electron-ni ishlatadi, ammo yangi Chromium-ni ishlatadi va faol ravishda parvarish qilinadi va ishlab chiqiladi, chunki Electron-ning asosiy maqsadi JavaScript, HTML va CSS-ga ega bo'lgan o'zaro faoliyat platformali ish stollarini yaratishdir.

Shuningdek, ular endi Headless Chrome bilan ham bahslashmoqdalar va tajriba o'tkazmoqdalar.

Nightmare kodi Phantom kodiga qarshi qanday ko'rinadi.

Kasper

Phantom va Slimer skriptlarini yaratishda navigatsiya, skriptlar va sinov dasturlari va referatlar bilan ta'minlash uchun Casper PhantomJS va SlimerJS (Phantom bilan bir xil, ammo Firefox Gecko yordamida yozilgan) ustiga yozilgan.

Slimer uzoq vaqtdan beri keng qo'llanilib kelinmoqda, garchi eksperimental deb hisoblansa-da, ammo 2017 yil oxirida ular beta-versiyasini chiqazdilar:
Yangi Headless Firefox-dan foydalanadigan va hozirda uni barqarorlashtirish va 1.0.0 versiyasini chiqarish ustida ishlayotgan 1.0.0-beta.1.

Ehtimol, Casper yaqin kelajakda PhantomJS-dan Puppeteer-ga ko'chib o'tishi va 2.0 versiyasini kutishi va Headless Chrome va Headless Firefox-da sinab ko'rishning ajoyib vositasi bo'lishi mumkin. Yangiliklarni kuzatib boring, xabardor bo'lib boring; Biz bilan qoling.

KodeceptJS

Yuqorida muhokama qilingan CucumberJS singari, Codecept turli xil kutubxonalar API-sida foydalanuvchi xulq-atvoriga e'tibor beradigan boshqa falsafadan foydalangan holda testlar bilan o'zaro aloqalaringizni amalga oshirish uchun yana bir mavhumlikni taqdim etadi.

Bu quyidagicha ko'rinadi:

Va mana bu kod yordamida bajarilishi mumkin bo'lgan kutubxonalar ro'yxati. Hammasi yuqorida muhokama qilingan.

WebDriverIO, protraktor, kabus, apium, qo'g'irchoq.

Agar bu sintaksis sizning ehtiyojlaringiz uchun yaxshiroq deb hisoblasangiz, uni bering.

Xulosa

Biz veb-ishlab chiqarish hamjamiyatida eng ommabop sinov strategiyalari va vositalarini ko'rdik va umid qilamanki, saytlaringizni sinovdan o'tkazishni osonlashtirdi.

Oxir-oqibat, bugungi kunda amaliy arxitekturaga oid eng yaxshi qarorlar juda faol ishlab chiquvchilar birlashmasi tomonidan ishlab chiqilgan yechimlarning umumiy namunalarini tushunish va ularni o'zingizning tajribangiz bilan birlashtirish va ilovangizning xususiyatlari va uning maxsus ehtiyojlarini hisobga olgan holda qabul qilinadi. .

Oh, va yozish, yozish va qayta yozish, va qayta yozish va qayta yozish va turli xil echimlarni sinab ko'rish :)

Baxtli sinovlar :)

Rahmat :)

Tavsiya etilgan maqolalar

Eng yaxshisi

  • Veb-ilovalarni sinovdan o'tkazish uchun Javascript vositalari (2017 yil iyul)
  • Top-end-end veb-sinovlari uchun eng ko'p baholangan Node.js-ning ramkalari (2017 yil mart)
  • Siz amal qilishingiz kerak bo'lgan eng yaxshi UI testlarni avtomatlashtirish (2017 yil noyabr)
  • GitHub loyihangiz uchun E2E brauzer sinovini qanday sozlash kerak (TestCafe bilan) (2017 yil fevral)
  • Boshsiz brauzer sinovlariga kirish (2017 yil sentyabr)
  • 2017 yilda veb-skriping: Kengaytirilgan boshsiz Chrome bo'yicha maslahatlar va tavsiyalar (2017 yil avgust)
  • GitLab sinov uchun Boshsiz Chrome-ga qanday o'tdi (Phantom-dan) (2017 yil dekabr)

Umumiy

  • Javascriptni avtomatlashtirish bo'yicha eng yaxshi 8 ta ramka (iyun 2016)
  • JavaScript testi: birlik va funktsional qarshi integratsiya testlari (2016 yil aprel)
  • Birlik testi, integratsiya testi va funktsional test nima? (2015 yil aprel)
  • Eng yaxshi 12 brauzerning mosligini tekshirish vositalari (2017 yil iyun).
  • 2018 yilda (10) eng yaxshi 10 ta brauzerning mosligini sinash vositalari.

ayg'oqchilar va stublar

  • Bye-Bye, Sinon - Assalomu alaykum, sinov (2016 yil mart)
  • JavaScript sinov vositalarini namoyish qilish: Sinon.js vs testdouble.js (2017 yil aprel)
  • sindo.js va testdouble.js (2016 yil mart)
  • ferment vs kutilmagan reaktsiya (aprel 2017)

Sinov ramkalarini taqqoslash

  • Reaktsiya sinovi - Jest yoki Mocha? (2017 yil may)
  • Karma, Jest yoki Mocha bilan reaktsion ilovalarni sinab ko'rish (2016 yil avgust)
  • Keling, Javascript sinov doirasini solishtiraylik (Avgust 2016)
  • Jasmin va Mocha, Chai va Sinon (yangilangan 2016 yil fevral)
  • Jasmin va Mocha-JavaScript sinov asoslarini taqqoslash
    (2017 yil yanvar)

Jest

  • Redest ilovangizdagi barcha narsalarni Jest yordamida qanday qilib suratga olishni sinab ko'rishingiz mumkin
    (2016 yil dekabr)
  • PayPal-da P2P guruhida Jestga ko'chib o'tish (2016 yil noyabr)
  • Jest - 0 dan 100% gacha Real Quick qamrovi (2017 yil yanvar)
  • Jest o'yinchilarining yashirin kuchi (2017 yil yanvar)
  • Jest va Enzim yordamida reaktsiya tarkibiy qismlarini sinab ko'rish (2016 yil dekabr)
  • Reest-Redux dasturini Jest va Enzim yordamida sinovdan o'tkazish (2017 yil yanvar)
  • Jest ishtirokidagi suratga tushirilgan sinov reaktsiyasining tarkibiy qismlari (Yanvar 2017)
  • AngularJS ilovasini Jest bilan sinab ko'rish (2016 yil oktyabr)

Ava

  • AVA yordamida osonlikcha sinov o'tkazish (2016 yil aprel)
  • AVA bilan Javascript sinovi (2017 yil fevral)
  • AVA va jsdom bilan JavaScript-ni sinab ko'rish birligi (2016 yil noyabr)
  • Bejeezusni reaktiv ona ilovalaridagi AVA yordamida sinovdan o'tkazish (iyun 2016)

Tasma

  • Nega men Mocha o'rniga lentadan foydalanaman va shuning uchun siz kerak (iyul 2015)
  • Tasmani o'rganing

UI sinovlari

  • Protraktor va Appium yordamida gibrid ilovalarni sinovdan o'tkazish (2017 yil mart)
  • PhantomJS Benchmark va boshsiz Chrome (2017 yil sentyabr)
  • Protdaktor vs WebdriverIO vs NightWatch (2016 yil noyabr)
  • Selenium WebDriver va Node.js yordamida reaktsion ilovalarni sinab ko'rish siz o'ylaganingizdan osonroq (aprel 2016)
  • WebdriverIO - Selenium sinovlarini o'tkazish uchun JavaScript-dan foydalanish (2016 yil avgust)
  • Nightwatch.js yordamida JavaScript funktsional testi (2016 yil avgust)
  • Node.js Nightwatch.js bilan yakuniy sinov (Mart 2017)
  • Sinovni yakunlovchi kabus (2016 yil sentyabr)
  • Protdaktor vs WebdriverIO vs NightWatch (2016 yil noyabr)
  • Stack overflow - Nightwatch.js va webdriver.io o'rtasidagi farq nima? (2016 yil mart)
  • JavaScript brauzerlarini avtomatlashtirish va sinov spetsifikatsiyalaridagi kutubxonalarni taqqoslash (2015 yil dekabr)
  • PhantomJS nima va u qanday ishlatiladi? (2016 yil iyun)
  • CodeceptJS bilan burchakli loyihada tugash uchun sinovlarni o'rnatish (2017 yil dekabr)

TestCafe

  • Qaysi avtomatlashtirilgan sinov vositasini tanlash kerak - Testcafe yoki Selenium WebDriver? (2016 yil yanvar)
  • TestCafe - Ochiq manbali sinov tizimining taqdimoti (Octobeer 2016)
  • Nega Seleniumdan foydalanmaysiz? (2016 yil oktyabr)
  • TestCafe yordamida funktsional sinov (2017 yil mart)
  • UI sinovlarini avtomatlashtirish ramkalarini namoyish qilish: TestCafé va Nightwatch.js (fevral 2018)

Cypress

  • Cypress: veb-ilovalar uchun yakuniy sinovlarning kelajagi (Fevral 2018)