Dobici:
- Sposobnost izrade robusnog testnog koda korisničkog sučelja s umjetnom inteligencijom, uključujući data-testid, open wait i assert koji provjerava rezultat stvarnog korisnika
- Sposobnost izbjegavanja osjetljivih testova (loš selektor, slijepo čekanje) i olakšavanje održavanja testova u strukturi Page Object Model
- Sposobnost testiranja svakog testa korisničkog sučelja proizvedenog razbijanjem koda te otkrivanje i popravljanje lažno položenih testova
Svaki klik, svako ispunjavanje obrasca, svaki prijelaz na stranicu koji korisnik napravi u pregledniku ne može se uvijek iznova testirati ručno — zato postoji automatizacija testiranja korisničkog sučelja (korisničko sučelje; ti testovi oponašaju ponašanje korisnika programskim pokretanjem pravog preglednika). Selenium, Playwright i Cypress najčešći su alati za ovaj posao. Umjetna inteligencija (AI) vrlo je vješta u pisanju koda za ove alate: vi opisujete testni slučaj, AI vam daje nacrt djelotvorne skripte za automatizaciju. Ali ovdje ponovno dolazi do izražaja središnje upozorenje ovog modula: testni kod korisničkog sučelja koji proizvodi umjetna inteligencija često mogu biti osjetljivi testovi koji "svjetle zeleno, ali potvrđuju pogrešnu stvar" ili lupaju na vjetru. Vaš posao nije pokrenuti ovaj kod, već osigurati da zaista robusno provjerava pravu stvar.
U ovoj jedinici, cilj nam je proizvesti robusne testove korisničkog sučelja s umjetnom inteligencijom koje je moguće održavati i istinski validirati; Naučit ćete izbjegavati osjetljive testove.
Tri stupa čvrstog testiranja korisničkog sučelja
1. Ispravan lokator elemenata. Test koristi selektor za pronalaženje elementa na stranici. AI često proizvodi osjetljive selektore: duge XPath staze (adresa previše ovisi o strukturi stranice), selektore temeljene na nazivima CSS klasa (prekidaju se kada se dizajn promijeni). Robusni način su stabilni atributi kao što je data-testid koje je razvojni programer dodao za testiranje. Eksplicitno nametnite ovo AI-ju.
2. Eksplicitno čekanje. Izvor broj jedan ranjivosti u testiranju korisničkog sučelja je vrijeme. Stalno spavanje(3) (slijepo čekanje) je loša praksa: ponekad nije dovoljno, ponekad gubi vrijeme. Ispravan način je korištenje eksplicitnog čekanja, koje kaže "pričekajte dok se ovaj element ne pojavi". Dramaturg to čini uglavnom automatski; U Seleniumu to morate izričito zatražiti.
3. Smislena tvrdnja. Test bi trebao potvrditi rezultat koji će korisnik stvarno vidjeti - poput "broj narudžbe pojavio se na zaslonu", a ne samo "stranica je učitana". Ako test koji je izradio AI nema tvrdnju ili je nevažan, taj test proizvodi pseudoprolaz (1. jedinica).
Oprez: kada prvi put vidite test korisničkog sučelja generiran umjetnom inteligencijom, provjerite najviše tri stvari: jesu li selektori predani (data-testid), jesu li čekanja uključena (bez slijepog spavanja) i potvrđuje li tvrdnja stvarni korisnički rezultat? Ako su ova tri u redu, test je vjerojatno solidan.
Model objekta stranice
Kako testovi rastu, pisanje selektora unutar svakog testa postaje noćna mora za održavanje. Page Object Model (POM — uzorak dizajna koji skuplja selektore i akcije za svaku stranicu/zaslon u jednu klasu) drži selektor na jednom mjestu; Kada se sučelje promijeni, ažurirate ga u jednoj datoteci. Neka AI proizvodi testove u POM strukturi, a ne izravno; To znatno olakšava održavanje.
Slab upit / Jak upit
Slabo: "Napišite Selenium test za stranicu za prijavu."
Jako: "Napišite test tijeka prijave s Playwrightom (TypeScript). Selektori koriste samo data-testid; ne koriste kontrolu onoga što korisnik vidi, a ne naslov stranice."
Snažan brz; Alat daje jezik, politiku selektora, strategiju čekanja, arhitekturu (POM) i ekspresivna očekivanja za potvrdu.
Testni podaci i neovisnost o okruženju
Solidan test korisničkog sučelja ne samo da je ispravno napisan, već također gradi i čisti vlastite testne podatke. Testovi generirani umjetnom inteligencijom često se povezuju s korisnikom ili zapisom za koji se pretpostavlja da već postoji u okruženju ("prijavite se kao admin korisnik"). Ova se pretpostavka razbija kada se test izvodi u drugom okruženju ili nakon drugog testa (problem ovisnosti o redoslijedu u jedinici 9). Istina je da svaki test stvara podatke koji su mu potrebni na početku testa (ili ih priprema API pozivom) i čisti ih na kraju. Eksplicitno uputite AI da "unutar testa postavi sve podatke o kojima ovaj test ovisi; nemojte pretpostavljati gotove podatke izvana."
Druga kritična točka je ne provoditi testiranje korisničkog sučelja sa stvarnim korisničkim podacima. Ako se kopija proizvodne baze podataka koristi u testnom okruženju, ti su zapisi podaci stvarnih osoba; snimke zaslona i testne snimke mogu otkriti te podatke. Koristite sintetičke (fiktivne) testne račune; istovremeno štiti povjerljivost i čini testove ponovljivim. Provođenje testa "otkazivanja narudžbe" sa stvarnim korisničkim računom je i etička i operativna pogreška.
Savjet: držite testove korisničkog sučelja što je moguće manje; Stvarnu provjeru prepustite API-ju i jediničnim testovima koji su brzi i stabilni. Testiranje korisničkog sučelja je skupo i krhko — koristite ga samo za provjeru stvarnog toka korisnika od kraja do kraja (testirajte logiku piramide).
Usporedba vozila
značajka
selen
dramatičar
čempres
jezika
Java, C#, Python, JS
JS/TS, Python, .NET, Java
JavaScript/TypeScript
automatsko stanje pripravnosti
Ne (ručno)
Da (jako)
da
Višestruki preglednik
široka
Chromium/Firefox/WebKit
Dominantan kromom
sklonost lomljivosti
Visoko (ručno stanje pripravnosti)
nizak
nizak
Jednostavnost učenja
srednji
lagano
lagano
paralelni rad
Potrebna rešetka
ugrađeni
Stanovnik/plaćen
Kada tražite kod od AI, jasno navedite kojem vozilu pripada; U suprotnom može proizvesti zbunjujući kod koji ne radi.
Četiri predloška za kopiranje
1) Generiranje solidnog testa korisničkog sučelja:
Vaša uloga: viši inženjer za automatizaciju testiranja. Napišite testove pomoću [alat + jezik] za sljedeći tok: [tok]. Pravila: - Selektori samo data-testid; Korištenje XPath/CSS klase. - Nema slijepog spavanja; Koristite eksplicitno/automatsko čekanje. - Primijenite Page Object Model. - Neka svaka tvrdnja potvrdi stvarni korisnički rezultat. Komentirajte na početku svakog testa koje kriterije prihvaćanja potvrđujete.
2) Kontrola lomljivosti:
Provjerite lomljivost sljedećeg testa korisničkog sučelja: - Postoji li nestabilan birač (dug
3) Pretvorba u objekt stranice:
Pretvorite sljedeći obični testni kod u strukturu Page Object Model. Premještanje selektora i akcija na klase stranica; Neka testna datoteka čita samo tijek scenarija. [Alat/jezik].Kôd: [zalijepite kod]
4) Dokaz pseudoprijelaza:
Dokažite da ovaj test korisničkog sučelja zapravo potvrđuje: Koju promjenu trebam napraviti u kodu aplikacije koja će ovaj test pretvoriti u CRVENO? Ako ne možete pronaći promjenu koja će pokvariti test, test je neadekvatan; dodaj tvrdnje koje nedostaju.Test: [zalijepi test]
tri mini kućišta
Slučaj 1 — Oslobađanje od krhkog izbornika. Od 40 testova koje je jedan tim napravio s AI, 70% je pokvareno nakon ažuriranja sučelja; nijedan od njih nije bio pravi bug, svi su bili krhki XPath selektori. Tim je pretvorio testove u bazu podataka s testovima s predloškom "provjera lomljivosti". Tijekom sljedeća tri ažuriranja sučelja, broj lažnih prekida pao je na nulu; vrijeme održavanja smanjeno sa 6 sati na 30 minuta tjedno.
Slučaj 2 — test korisničkog sučelja s lažnim prolazom. AI je napravio test "dodaj u košaricu"; test je bio zelen. Kada je pokrenut predložak "lažni dokaz prolaza", činilo se da test provjerava samo klik na gumb i naslov stranice, nikad ne provjeravajući je li se brojač košarice povećao ili ne. Čak i ako je logika kolica potpuno pokvarena, test je prošao. Dodana istinita tvrdnja (oznaka košarice je "1").
Slučaj 3 — Zamka slijepog čekanja. U Selenium testu koji je izradio AI, bilo je spavanja (2) nakon svakog koraka; 60 testova trajalo je 14 minuta i ipak se povremeno kvarilo. Nakon prelaska na otvoreno čekanje (pričekajte da se na element može kliknuti) vrijeme se smanjilo na 5 minuta i lomljivost je nestala. Čekanje na slijepo bilo je sporo i nepouzdano.
Uobičajene greške
- Pristati na krhke izbornike. Korištenje dugih XPathova koje generira AI u obliku kakav jest; Testovi se ruše pri prvoj promjeni sučelja.
- Napuštanje slijepog `spa`. "Rješavanje" vremena s fiksnim čekanjem; i sporo i neodlučno.
- Trivijalna tvrdnja. Samo provjerite je li se stranica učitala; ne provjeravajući stvarni korisnički rezultat (lažna propusnica).
- Rastite bez POM-a. Podijelite selektore svakom testu; Ručno ažuriranje desetaka datoteka kada se sučelje promijeni.
- Ne navodeći alat. Ne govoreći umjetnoj inteligenciji koji alat/jezik želite; postaje neuredan, neradni kod.
- Povjerenje kada pokrenete generirani kod i prođete. Ne testira se razbijanjem koda.
Ukratko
Automatizacija testiranja korisničkog sučelja provjerava ponašanje korisnika pokretanjem stvarnog preglednika s programom. AI brzo generira ovaj kod, ali postoje dvije velike zamke: krhki testovi (loš selektor, čekanje na slijepo) i testovi lažnog prolaza (nepotpuna/trivijalna tvrdnja). Tri stupa čvrstog testiranja korisničkog sučelja su selektor predaje (data-testid), eksplicitno čekanje i potvrđivanje koje provjerava stvarni korisnički rezultat. Generiranje testova u Page Object Modelu radikalno pojednostavljuje održavanje. Testirajte svaki generirani test s pitanjem "koja promjena će ovo pokvariti?"
Zadatak aplikacije
Odaberite korisnički tijek iz vlastitog projekta (npr. prijava ili pretraživanje). Neka AI napiše testove s predloškom "generiranje robusnog UI testa". Zatim: (1) provjerite i popravite selektore i pričekajte s "provjerom krhkosti", (2) dokažite da je svaki test stvarno validan s "dokazom pseudoprolaznosti", (3) razbijte kod i primijetite da test postaje crven. Izvijestite o broju napravljenih i ispravljenih testova te o broju ranjivosti i pseudoprolazaka koje ste pronašli.
popis za provjeru
- [ ] AI-u sam jasno dao alat, jezik, pravila odabira i arhitekturu (POM).
- [ ] Provjerio sam jesu li selektori testirani na podatke.
- [ ] Obavezno sam koristio eksplicitno/automatsko čekanje umjesto slijepog sna.
- [ ] Provjerio sam potvrđuje li svaka tvrdnja stvarni korisnički rezultat.
- [ ] Testirao sam svaki test razbijanjem koda; Vidio sam da je postalo crveno.
- [ ] Prikupio sam testove u strukturi Page Object Model.