Pelnas:
- Galimybė sukurti patikimą vartotojo sąsajos bandomąjį kodą su dirbtiniu intelektu, įskaitant duomenų testavimą, atvirą laukimą ir tvirtinimą, kuris patvirtina tikrąjį vartotojo rezultatą
- Galimybė išvengti trapių testų (blogas parinkiklis, aklas laukimas) ir palengvinti testų priežiūrą puslapio objekto modelio struktūroje
- Galimybė išbandyti kiekvieną vartotojo sąsajos testą, sukurtą sulaužant kodą, ir aptikti bei ištaisyti netikrus testus
Kiekvienas paspaudimas, kiekvienas formos užpildymas, kiekvienas puslapio perėjimas, kurį vartotojas atlieka naršyklėje, negali būti vėl ir vėl tikrinamas ranka – štai kodėl egzistuoja UI testavimo automatizavimas (naudotojo sąsaja; šie testai imituoja vartotojo elgesį programiškai valdydami tikrą naršyklę). Šiam darbui dažniausiai naudojami selenas, dramaturgas ir kiparisas. Dirbtinis intelektas (AI) yra labai įgudęs rašyti šių įrankių kodą: aprašote bandomąjį atvejį, AI pateikia veiksmingo automatizavimo scenarijaus projektą. Tačiau čia vėl įsijungia pagrindinis šio modulio įspėjimas: UI testo kodas, kurį sukuria AI, dažnai gali būti trapūs testai, kurie „šviečia žaliai, bet patvirtina, kad tai neteisinga“ arba sklinda vėjyje. Jūsų darbas yra ne paleisti šį kodą, o įsitikinti, kad jis tikrai patikimai patvirtina teisingą dalyką.
Šiame skyriuje mes siekiame sukurti patikimus, prižiūrimus ir tikrai patvirtinančius UI testus su AI; Išmoksite išvengti trapių išbandymų.
Trys tvirto vartotojo sąsajos testavimo ramsčiai
1. Teisingas elementų lokatorius. Bandymas naudoja parinkiklį, kad surastų elementą puslapyje. AI dažnai sukuria trapius selektorius: ilgus XPath kelius (adresas pernelyg priklauso nuo puslapio struktūros), selektorių pagal CSS klasių pavadinimus (nutrūksta, kai keičiasi dizainas). Tvirtas būdas yra stabilūs atributai, tokie kaip data-testid, kuriuos kūrėjas pridėjo testavimui. Aiškiai primeskite tai AI.
2. Aiškus laukimas. Svarbiausias vartotojo sąsajos testavimo pažeidžiamumo šaltinis yra laikas. Nuolatinis miegas(3) (aklas laukimas) yra bloga praktika: kartais jo neužtenka, kartais sugaištama laikas. Teisingas būdas yra naudoti aiškų laukimą, kuris sako „palaukite, kol pasirodys šis elementas“. Dramaturgas tai daro daugiausia automatiškai; Selenyje turite aiškiai to paprašyti.
3. Prasmingas tvirtinimas. Bandymas turėtų patikrinti rezultatą, kurį vartotojas iš tikrųjų matys, pvz., „užsakymo numeris pasirodė ekrane“, o ne tik „puslapis įkeltas“. Jei AI atliktas testas neturi tvirtinimo arba yra nesvarbus, šis testas duoda pseudo-pasitikimą (1-asis vienetas).
Įspėjimas: pirmą kartą pamatę dirbtinio intelekto sugeneruotą vartotojo sąsajos testą, patikrinkite daugiausia tris dalykus: ar parinkikliai atlikti (duomenų tikrinimas), ar laukiama (nėra aklo miego) ir ar tvirtinimas patvirtina tikrąjį vartotojo rezultatą? Jei šie trys yra gerai, testas tikriausiai yra tvirtas.
Puslapio objekto modelis
Testams augant, kiekvieno testo rašymo parinkikliai tampa priežiūros košmaru. Puslapio objekto modelis (POM – dizaino šablonas, kuris surenka kiekvieno puslapio/ekrano parinkiklius ir veiksmus į vieną klasę) išlaiko parinkiklį vienoje vietoje; Pasikeitus sąsajai, ją atnaujinate viename faile. Leiskite AI atlikti testus POM struktūroje, o ne tiesiogiai; Tai žymiai palengvina priežiūrą.
Silpnas raginimas / Stiprus raginimas
Silpnas: „Parašykite prisijungimo puslapio Seleno testą“.
Stiprus: „Parašykite prisijungimo srauto testą naudodami „Playwright“ („TypeScript“). Parinkikliai naudoja tik duomenų testą; nekontroliuoja, ką mato vartotojas, o ne puslapio pavadinimą“.
Galingas raginimas; Įrankis pateikia kalbą, parinkiklio politiką, laukimo strategiją, architektūrą (POM) ir išraiškingą tvirtinimo lūkesčius.
Bandymo duomenys ir aplinkos nepriklausomumas
Tvirtas vartotojo sąsajos testas ne tik parašytas teisingai, bet ir sukuria bei išvalo savo testo duomenis. Dirbtinio intelekto sukurti testai dažnai susieja su vartotoju arba įrašu, kuris, kaip manoma, jau egzistuoja aplinkoje („prisijunkite kaip administratorius“). Ši prielaida nutrūksta, kai testas vykdomas kitoje aplinkoje arba po kito testo (užsakymo priklausomybės problema 9 skyriuje). Tiesa ta, kad kiekvienas testas bandymo pradžioje sukuria jam reikalingus duomenis (arba paruošia juos API iškvietimu), o pabaigoje išvalo. Aiškiai nurodykite AI „nustatyti bet kokius duomenis, nuo kurių priklauso šis testas; nesiimkite paruoštų duomenų iš išorės“.
Kitas svarbus dalykas yra neatlikti UI testavimo naudojant tikrus vartotojo duomenis. Jei testavimo aplinkoje naudojama gamybinės duomenų bazės kopija, šie įrašai yra realių asmenų duomenys; ekrano kopijos ir bandymo įrašai gali atskleisti šiuos duomenis. Naudoti sintetines (išgalvotas) bandomąsias paskyras; ji saugo konfidencialumą ir daro testus atkuriamus. „Užsakymo atšaukimo“ testo atlikimas naudojant tikrą kliento paskyrą yra ir etinė, ir veiklos klaida.
Patarimas: naudokite kuo mažiau vartotojo sąsajos testų; Tikrąjį patvirtinimą palikite API ir vienetų testams, kurie yra greiti ir stabilūs. UI testavimas yra brangus ir trapus – naudokite jį tik tam, kad patvirtintumėte tikrai galutinio vartotojo srautą (bandymo piramidės logika).
Transporto priemonių palyginimas
funkcija
seleno
dramaturgas
kiparisas
kalbomis
Java, C#, Python, JS
JS/TS, Python, .NET, Java
JavaScript / TypeScript
automatinis budėjimo režimas
Ne (ranka)
Taip (stiprus)
Taip
Kelių naršyklių
platus
„Chromium“ / „Firefox“ / „WebKit“.
Dominuojantis chromas
polinkis į trapumą
Aukštas (rankinis budėjimo režimas)
žemas
žemas
Mokymosi lengvumas
vidutinis
lengva
lengva
lygiagretus veikimas
Reikalingas tinklelis
įmontuotas
Gyventojas/mokamas
Prašydami kodo iš AI, aiškiai nurodykite, kuriai transporto priemonei jis priklauso; Priešingu atveju jis gali sukurti painų, neveikiantį kodą.
Keturi kopijuojami šablonai
1) Tvirta vartotojo sąsajos bandymo karta:
Jūsų vaidmuo: vyresnysis testavimo automatizavimo inžinierius. Rašykite testus su [įrankiu + kalba] šiam srautui: [srautas]. Taisyklės: - Tik selektorių duomenys-testid; Naudojant XPath/CSS klasę. - Jokio aklo miego; Naudokite aiškų / automatinį laukimą. - Taikyti puslapio objekto modelį. - Leiskite kiekvienam tvirtinimui patikrinti tikrąjį naudotojo rezultatą. Kiekvieno bandymo pradžioje pakomentuokite, kuriuos priėmimo kriterijus patvirtinate.
2) Trapumo kontrolė:
Ištirkite šį UI testą, ar nėra trapumo: – ar yra nestabilus parinkiklis (ilgas
3) Konvertavimas į puslapio objektą:
Konvertuokite šį paprastą testo kodą į puslapio objekto modelio struktūrą. Perkelti parinkiklius ir veiksmus į puslapių klases; Leiskite bandomajam failui nuskaityti tik scenarijaus srautą. [Įrankis/kalba].Kodas: [įklijuoti kodą]
4) Pseudo-perėjimo įrodymas:
Įrodykite, kad šis vartotojo sąsajos testas iš tikrųjų patvirtina: kokį vienintelį programos kodo pakeitimą, kuris pavers šį testą RAUDONA? Jei nerandate pakeitimo, kuris sugadintų testą, testas yra netinkamas; pridėkite trūkstamus tvirtinimus.Bandymas: [įklijuoti bandymą]
trys mini dėklai
1 atvejis – išsivadavimas iš trapios selektorių. Iš 40 testų, kuriuos viena komanda atliko su AI, 70 % buvo sugadinti po sąsajos atnaujinimo; nė viena iš jų nebuvo tikrosios klaidos, jie visi buvo trapūs XPath parinkikliai. Komanda pavertė testus į duomenų patikrinimo bazę, naudodama „trupumo patikros“ šabloną. Per kitus tris sąsajos atnaujinimus klaidingų pertraukų skaičius sumažėjo iki nulio; priežiūros laikas sumažėjo nuo 6 valandų iki 30 minučių per savaitę.
2 atvejis – klaidingai sėkmingo vartotojo sąsajos testas. AI sukūrė „įdėti į krepšelį“ testą; testas buvo žalias. Kai buvo paleistas „netikrinamas pravažiavimo įrodymas“ šablonas, pasirodė, kad bandymas tikrino tik mygtuko paspaudimą ir puslapio pavadinimą, niekada nepatikrindamas, ar krepšelio skaitiklis padidėjo, ar ne. Net jei krepšelio logika buvo visiškai sulaužyta, testas praėjo. Pridėtas teisingas teiginys (krepšelio ženklelis yra "1").
3 atvejis – aklas laukimo spąstai. AI atliktame Seleno teste po kiekvieno žingsnio buvo miegas(2); 60 testų užtruko 14 minučių ir vis tiek retkarčiais nutrūkdavo. Perjungus į atvirą laukimą (palaukite, kol elementą bus galima spustelėti) laikas sumažėjo iki 5 minučių ir trapumas išnyko. Aklas laukimas buvo lėtas ir nepatikimas.
Dažnos klaidos
- Sutinku su trapiais rinkėjais. Naudojant ilgus XPaths, kuriuos sukuria AI; Bandymai sugenda pirmą kartą pakeitus sąsają.
- Palikimas aklas `miegas`. Laiko „išsprendimas“ su fiksuotu laukimu; ir lėti, ir neryžtingi.
- Trivialus tvirtinimas. Tiesiog patikrinkite, ar puslapis įkeltas; netikrinama tikrojo vartotojo rezultato (fake-pass).
- Augti be POM. Paskirstykite selektorius kiekvienam testui; Pasikeitus sąsajai rankiniu būdu atnaujinama dešimtys failų.
- Nenurodomas įrankis. Nenurodykite AI, kokio įrankio / kalbos norite; gauti netvarkingą, neveikiantį kodą.
- Pasitikėjimas, kai paleidžiate sugeneruotą kodą ir perduodate. Netestuojama sulaužant kodą.
Apibendrinant
UI testavimo automatizavimas patikrina naudotojo elgseną valdydamas tikrąją naršyklę su programa. AI greitai sugeneruoja šį kodą, tačiau yra dvi didelės spąstos: trapūs testai (blogas parinkiklis, aklas laukia) ir netikri sėkmingi testai (neišsamus / nereikšmingas tvirtinimas). Trys tvirto vartotojo sąsajos testavimo ramsčiai yra įsipareigojimo parinkiklis (duomenų tikrinimas), aiškus laukimas ir tvirtinimas, patvirtinantis tikrąjį vartotojo rezultatą. Puslapio objekto modelyje sugeneruoti testai labai supaprastina priežiūrą. Išbandykite kiekvieną sugeneruotą testą su klausimu "koks pakeitimas tai sugadins?"
Taikymo užduotis
Pasirinkite naudotojo srautą iš savo projekto (pvz., prisijungimas arba paieška). Atlikite AI rašymo testus naudodami „tvirtas vartotojo sąsajos testų kartos“ šabloną. Tada: (1) patikrinkite ir pataisykite parinkiklius ir laukiate su „trupumo patikra“, (2) įrodykite, kad kiekvienas testas iš tikrųjų patvirtina „pseudo-pasitikimą“, (3) sulaužykite kodą ir stebėkite, kad testas nusidažo raudonai. Praneškite apie atliktų ir ištaisytų testų skaičių bei rastų pažeidžiamumų ir pseudo patvirtinimų skaičių.
kontrolinis sąrašas
- [ ] Aiškiai pateikiau AI įrankį, kalbą, parinkiklio politiką ir architektūrą (POM).
- [ ] Patikrinau, kad parinktuvai yra patikrinti duomenys.
- [ ] Įsitikinau, kad vietoj aklo miego naudoju aiškų / automatinį laukimą.
- [ ] Patikrinau, kad kiekvienas tvirtinimas patvirtina tikrąjį naudotojo rezultatą.
- [ ] Išbandžiau kiekvieną testą sulaužydamas kodą; Mačiau, kad jis tapo raudonas.
- [ ] Testus surinkau Puslapio objekto modelio struktūroje.