Címke: TypeScript

A TypeScript egy Microsoft által fejlesztett nyílt forráskódú, magas szintű programozási nyelv, amely a JavaScript szintaktikus felsőhalmaza (superset). Ez azt jelenti, hogy minden érvényes JavaScript kód egyben érvényes TypeScript kód is, viszont a TypeScript statikus típusosságot és fejlettebb fejlesztői eszközöket ad a nyelvhez.

  • Playwright & expect.poll

    Bár nagyon sokat használtam, mégsincs kéznel egy darab példa kódom sem ezzel kapcsolatban. Így hát a Playwright bibliát fogom segítségül hozni a példák bemutatására.

    Mire való?

    Nekem ez akkor volt nagyon hasznos, amikor API teszteket írtam, és a GET endpoint válaszánál nem volt elég egy 200-as válasz kód, mivel a háttérben a szinkronizációs folyamat nem ért be, tehát a GET endpoint-ot addig kellett hívni, amíg a megfelelő válasz meg nem érkezett.

    Elsőre én is, mint egy kis cserkész, betettem egy while loop-ba, és működött tökéletesen. Aztán rátaláltam a Playwright által támogatott gyári megoldásra, és azt kell mondanom, hogy zseniálisan jól működőtt.

    Példa kód a hivatalos oldalról

    await expect.poll(async () => {
      const response = await page.request.get('https://api.example.com');
      return response.status();
    }, {
      // Custom expect message for reporting, optional.
      message: 'make sure API eventually succeeds',
      // Poll for 10 seconds; defaults to 5 seconds. Pass 0 to disable timeout.
      timeout: 10000,
    }).toBe(200);

    Mi is történik itt? A GET endpoint válaszkódjával térünk vissza, és azt hasonlítjük össze az elvárttal. Teszük ezt addig, amíg tart a timeout-ban megadott érték.

    Következő példa: intervals

    await expect.poll(async () => {
      const response = await page.request.get('https://api.example.com');
      return response.status();
    }, {
      // Probe, wait 1s, probe, wait 2s, probe, wait 10s, probe, wait 10s, probe
      // ... Defaults to [100, 250, 500, 1000].
      intervals: [1_000, 2_000, 10_000],
      timeout: 60_000
    }).toBe(200);

    Ekkor az intervals-ban megadott értékek fogják jelenteni a próbálkozások közt eltelt időt. Ezt érdemes úgy beállítani, hogy lehetőleg ne generáljuk túl nagy extra terhelést a rendszer számára.

    Példa a soft-ra

    await expect.soft.poll(async () => {
      const response = await page.request.get('https://api.example.com');
      return response.status();
    }).toBe(200);

    Az expect.soft kapcsán nekem az a megélésem, hogy nagyon megoszlanak a vélemények. Vannak, akik teljes mértékben ellenzik a használatát, mások pedig – mint én is – úgy vannak vele, hogy vannak olyan esetek, amikor szükséges lehet. Ugye, soft esetén ha hibára fut, nem áll meg a futás, hanem megy tovább a teszt.

    Szóval nagyon hasznos tud lenni a Playwright online elérhető dokumentációja. Ha bármi kérdés merülne fel, ajánlom, hogy ott kezdödjön a kutatás.

  • Automatizáló framework-ök a szakmám során

    Eddigi pályafutásom során jó pár framework-höz volt szerencsém különféle programnyelvek mellett, és hát azt kell mondanom, hogy ideje ezeket összegyűjtenem, mert kezdem egy részét elfelejteni.

    • Selenium WebDriver (#C, JAVA)
    • HP UFT (Visual Basic Script)
    • Katalon Studio (Kotlin)
    • Cypress (JavaScript)
    • Playwright (TypeScript)

    Selenium + C# + NUnit

    Kezdjünk is bele. Szóval még az automatizáló pályám elején volt lehetőségem a munkám mellett gyakorolni, és az épp aktuális Selenium volt a választott C#-pal. Ez akkoriban azt jelentette, hogy ahogy ma egy demó kód kinéz, kb úgy irtam én is meg Visual Studioban, majd pedig NUnitban a saját gépemről futottak a tesztek. Attól függetlenül, hogy messze volt egy professziónális megoldástól, szépen fogta a regressziós hibákat.

    Valahogy így kell elképzelni, ahogy a tesztek futottak.

    HP UFT + Visual Basic Script + HP ALM

    Ez volt az első hivatalos automatizálós projektem, ami előtt még kaptam HP képzést is, bár ennél a munka és a szükséges tudás összeszedése internetről sokkal hasznosabbnak bizonyult. Ahogy nézem, a HP dolgai igencsak megváltoztak, más kezeli őket.

    HP ALM kapcsán a Gurunál találtam egy értékelhető leírást, és a jól emlékszem, én ennek az oldalnak használtam fel a tudásanyagát annak idején. Viszont jól látszik, hogy elszaladt az idő felette. Talán az egyik cimborám kérdezte pár éve, hogy mi a vélemenyem egy ilyen projektről, és már akkor azt mondtam, hogy kerülje el, mert nincs jövője.

    Annak idején ez az ökoszisztéma igencsak jól működött, bár ára is volt (cég fizette). Az ALM végezte a központosítást, az UFT pedig az automata tesztek fejlesztésért volt felelős.

    Így nézett ki az UFT.

    Az ALM pedig így.

    Szerintem ez a kettő együtt akkoriban zseniális párost alkotott.

    Katalon Studio

    Kísérletezgettem vele annak idején. Még tetszett is, de valahogy körülményesnek ítéltem meg a használatát. Ennél egy IDEs kódszerkesztővel jobban és minőségibben lehet/lehetett dolgozni. Az pozitív volt, hogy próbálta egy IDE-n belül kezelni a dolgokat, mint a HP UFT, viszont egy idő után kezdet átláthatatlanná válni számomra. Azóta egyébként valószínűleg ez is sokat fejlődött, bár nekem nem volt időm követni a változásokat.

    Valami ilyesmire emlékszem.

    Cypress + JavaScript

    Na ezt imádtam. Könnyedén és gyorsan lehetett benne dolgozni, bár csak 1 évet töltöttem vele. Egy negatívuma azért van/volt, hogy az async/await dolgokat maga kezeli. Ez az esetek túlnyomó többségében nagyon jól működik, de amikor valamiért ez nem jó, az fájdalmas tud lenni.

    Ha jól rémlik, én is VS Code-dal használtam, illetve GitLab-ban futottak a tesztek.

    Ha jól sejtem VS Codeban.

    Playwright + TypeScript

    Abszolút kedvenc. 3 évet töltöttem vele, és imádtam minden percet. Annyira könnyed és légies, és gyorsan lehet vele haladni annak köszönhetően, hogy zseniálisan van felépítve benne szinte minden, hogy csak ajánlani tudom.

    Több különböző nyelvet is támogat, bár nekem a TypeScript volt használatban. Illetve nagyon jól dokumentált. Nem volt szükség sok Google keresésre, mivel a leírás hozzá megválaszolt mindent.

    Ez pedig ilyen volt.

  • Playground avagy Playwright első lépései

    Elöljáróban annyit, hogy az itt elkészítésre kerülő dolgok nem éles rendszerhez készülnek, hanem csak kipróbálási célból, vagy épp arra, hogy segítséget nyújtsanak.

    Mint minden jó írás, én is próbálom azzal kezdeni az első ilyen típusú bejegyzést, hogy mik is azok az első lépések, amiket szükséges megtennünk ahhoz, hogy el tudjunk kezdeni, automata teszteket implementálni.

    Én mindezt Windows környezetben, és TypeScript alapon valósítom meg, ami GitHub-ban lesz tárolva, futtatva.

    Amire első körben szükségünk van, egy NodeJs telepítés, és lehetőleg abból is egy legújabb LTS változat. Ez a telepítés nem egy nagy kunszt, szimpla next, next, finish, viszont az egész alapja. Miután a telepítés végzett, egy node -v parancsot kiadva terminálban, meg tudunk győződni arról, hogy az adott verzió elérhető-e a gépünkön.

    Majd szükségünk lesz egy fejlesztő környezetre, amelyből én a Visual Studio Code-ot használom, mert számomra igencsak kézre áll. Letöltést követően ezt is könnyedén telepíthetjük.

    Most már majdnem adottak az alapok, hogy belekezdjünk a Playwright telepítésébe, de előtte én meg azt mondanám, hogy válaszuk ki a package managert is, és mivel jelenleg a pnpm az, ami új és előre mutató, így azt választom.

    A pnpm telepítésére nyissunk egy power shellt, majd pedig adjuk ki a következő parancsot: Invoke-WebRequest https://get.pnpm.io/install.ps1 -UseBasicParsing | Invoke-Expression.

    Majd pedig győződjünk meg róla, hogy létrejött a megfelelő bejegyzés a system environment variables-ben. Ha ez rendben, érdemes újraindítani a VS Code-ot, mielőtt folytatnánk a következő lépésekkel.

    Most pedig elkezdhetjük a Playwright telepítését. Először is hozzunk létre egy könyvtárat a számítógépen (amit később majd hozzáadunk egy Git repositoryhoz). Szóval nyissunk egy terminált, és adjuk ki a következő parancsot: pnpm create playwright. Miután a telepítés lefutott, pár kérdést kapunk, ahol, ha semmi nem mond ellent neki, válaszuk az alapértelmezett válaszokat, miszerint TypeScript, tests könyvtár, GitHub Actions workflow, Install Playwright browsers.

    Mit látunk most, ha megnyitjuk az explorert? Van egy playwright.config.ts fájlunk, ami a tesztekhez szükséges beállításokat tartalmazza. Van egy package.json és package-lock.json, amik a csomagkezelésért, parancsokért felelnek, illetve a már említett tests könyvtár, ahová az alap telepítés egy example.spec.ts fájlt hozott létre, amit le is tudunk futtatni, ezzel kipróbálni, hogy a telepítésünk sikeres volt.

    A következő parancsot terminálból kiadva tudjuk lefuttatni az összes tesztet (jelen pillanatban azt az egyet, ami alapból létrejött): pnpm exec playwright test.

    Miután a tesztek lefutottak, a pnpm exec playwright show-report parancs megnyitja a riportot, amin keresztül látni lehet, hogy pontosan milyen eredménnyel zárult a futás.

    UI Mode-ban is van mód futtatni és elemezni, erre a pnpm exec playwright test –ui parancs szolgál.

    A Playwright frissítése: pnpm install --save-dev @playwright/test@latest, a böngészők letöltése: pnpm exec playwright install --with-deps parancsokon keresztül történik.

    Végezetül pedig az aktuális Playwright verzióját igy nézhetjük meg: pnpm exec playwright –version.

    Az a helyzet, hogy maga a Playwright erre íródott oldala a legjobb forrás, ahonnan én is összeszedtem az információkat. Ezt érdemes lapozgatni, én eddig mindenre találtam megoldást benne.