Ce este Test Harness? (Exemple)

โšก Rezumat inteligent

Test Harness รฎn testarea software reuneศ™te module, drivere, date de testare ศ™i instrumente de execuศ›ie, astfel รฎncรขt echipele sฤƒ valideze modulele รฎnainte de a exista fiecare dependenศ›ฤƒ, transformรขnd ciclurile de testare blocate รฎn verificฤƒri automate ศ™i repetabile, care raporteazฤƒ rezultatele fฤƒrฤƒ efort manual.

  • ๐Ÿงฉ Definiศ›ie: Un sistem de รฎmperechere (harness) reuneศ™te cazuri de testare, stub-uri, drivere, detalii despre portul de implementare ศ›intฤƒ ศ™i fiศ™ierul sursฤƒ testat รฎntr-o singurฤƒ unitate rulabilฤƒ.
  • ๐ŸŽฏ De ce conteaza: Testarea รฎncepe รฎnainte ca bazele de date, gateway-urile sau modulele backend sฤƒ existe, astfel รฎncรขt defectele apar devreme, atunci cรขnd costul reparaศ›iei rฤƒmรขne cel mai scฤƒzut.
  • ๐Ÿ”ง Pฤƒrศ›i principale: Motorul de execuศ›ie, depozitul de scripturi, depozitul de date de testare, stub-urile, driverele, validatorul de ieศ™ire ศ™i stratul de raportare deศ›in fiecare cรขte o responsabilitate.
  • ๐Ÿ” Flux de lucru: รŽncฤƒrcaศ›i scripturi, invocaศ›i aplicaศ›ia testatฤƒ, รฎnlocuiศ›i modulele lipsฤƒ, capturaศ›i rezultatele, comparaศ›i cu aศ™teptฤƒrile, publicaศ›i un raport.
  • ๐Ÿ›  scule: JUnit se potriveศ™te Java, NUnit se potriveศ™te cu .NET, รฎn timp ce Selenium, TestNG, PyTest ศ™i JMeter Extindeศ›i acoperirea cablajului la lucrฤƒrile cu bandฤƒ adezivฤƒ, paralele ศ™i sub sarcinฤƒ.
  • ๐Ÿ“ˆ Optimizare: Menศ›ineศ›i modulele aliniate cu comportamentul real al modulelor, stocaศ›i datele de testare รฎn afara scripturilor ศ™i rulaศ›i hamul la fiecare compilare de integrare continuฤƒ.

Testaศ›i harness รฎn testarea software-ului

Testaศ›i harness รฎn testarea software-ului este o colecศ›ie de stub-uri, drivere ศ™i alte instrumente de asistenศ›ฤƒ necesare pentru a automatiza execuศ›ia testului. Harnaศ™ul de testare executฤƒ teste utilizรขnd o bibliotecฤƒ de teste ศ™i genereazฤƒ rapoarte de testare. Harnaศ™ul de testare conศ›ine toate informaศ›iile necesare pentru compilarea ศ™i rularea unui test, cum ar fi cazurile de testare, portul de implementare ศ›intฤƒ (TDP), fiศ™ierul sursฤƒ testat, stub-uri etc.

Simplu spus, un sistem de hamuri รฎncadreazฤƒ componenta pe care doriศ›i sฤƒ o verificaศ›i รฎntr-un mediu controlat. Modulele รฎnvecinate care lipsesc sunt รฎnlocuite cu programe fictive mici, intrฤƒrile sosesc dintr-un set de date fix, iar fiecare rezultat este scris รฎntr-un jurnal รฎn loc sฤƒ fie citit de pe un ecran. Secศ›iunile care urmeazฤƒ explicฤƒ de ce echipele construiesc un astfel de sistem, din ce este alcฤƒtuit, cum funcศ›ioneazฤƒ ศ™i unde se potriveศ™te.

De ce sฤƒ folosiศ›i Test Harness?

Existฤƒ un sistem de ham pentru a elimina aศ™teptarea din ciclul de testare. Deoarece simuleazฤƒ orice nu este รฎncฤƒ gata, un testare software Echipa poate รฎncepe verificarea comportamentului รฎn primul sprint, mai degrabฤƒ decรขt dupฤƒ integrarea finalฤƒ. Diagrama de mai jos aratฤƒ unde se aflฤƒ o reศ›ea รฎntre scripturile de testare ศ™i aplicaศ›ia testatฤƒ.

Test ham

  • Automatizaศ›i procesul de testare
  • Executaศ›i seturi de teste de cazuri de testare
  • Generaศ›i rapoarte de testare asociate
  • Suport pentru depanare
  • Pentru a รฎnregistra rezultatele testelor pentru fiecare dintre teste
  • Ajutฤƒ dezvoltatorii sฤƒ mฤƒsoare acoperirea codului la nivel de cod
  • Creศ™teศ›i productivitatea sistemului prin automatizare
  • รŽmbunฤƒtฤƒศ›iศ›i calitatea componentelor software ศ™i a aplicaศ›iilor
  • Pentru a gestiona condiศ›ia complexฤƒ pe care testatorii le sunt dificil de simulat

Aceste cรขศ™tiguri conteazฤƒ cel mai mult รฎn ciclurile de lansare scurte. Cรขnd codul este livrat de mai multe ori pe sฤƒptฤƒmรขnฤƒ, un defect care supravieศ›uieศ™te pรขnฤƒ la etapa de integrare costฤƒ mult mai mult. tracmai mult decรขt unul prins de un ciot รฎn ziua รฎn care a fost scris. Aceastฤƒ recompensฤƒ apare, รฎnsฤƒ, doar atunci cรขnd hamul este asamblat din piesele potrivite.

Componentele cheie ale unui cablaj de testare

Un ham nu este un singur program, ci un ansamblu de piese, fiecare eliminรขnd un obstacol care altfel ar รฎmpiedica rularea nesupravegheatฤƒ a unui test.

  • Scripturi de testare: Instrucศ›iuni automate care precizeazฤƒ paศ™ii de efectuat ศ™i rezultatul aศ™teptat, scrise conform script de testare convenศ›ii.
  • Motor de execuศ›ie a testelor: Runner-ul care citeศ™te scripturile รฎn ordine, rezolvฤƒ dependenศ›ele ศ™i declanศ™eazฤƒ execuศ›ia secvenศ›ialฤƒ sau paralelฤƒ.
  • Depozit de date de testare: Valorile de intrare pฤƒstrate รฎn afara scriptului รฎn CSV, JSON, XML sau o bazฤƒ de date iniศ›ializatฤƒ, adesea completate de testarea instrumentelor de generare a datelor.
  • drivere: Module de apelare fictive care invocฤƒ componenta testatฤƒ atunci cรขnd stratul superior real, cum ar fi o interfaศ›ฤƒ cu utilizatorul, este neterminat.
  • Stubs: Modulele fictive apelau la returnarea de rฤƒspunsuri predefinite, de exemplu, un serviciu de platฤƒ care rฤƒspundea โ€žPlatฤƒ reuศ™itฤƒโ€ fฤƒrฤƒ a contacta o bancฤƒ.
  • Validator de ieศ™ire: Logicฤƒ de afirmaศ›ie care comparฤƒ rezultatul real cu valoarea aศ™teptatฤƒ ศ™i marcheazฤƒ fiecare caz ca fiind admis sau eศ™uat.
  • Stratul de รฎnregistrare ศ™i raportare: Marcaje temporale, capturi de ecran, ieศ™iri din consolฤƒ ศ™i un rezumat al execuศ›iei care evidenศ›iazฤƒ fiecare eศ™ec tracposibil ulterior.

รŽndepฤƒrtaศ›i orice piesฤƒ ศ™i hamul nu mai este automat, deoarece atunci trebuie furnizat ceva manual la fiecare cursฤƒ.

Cum funcศ›ioneazฤƒ un ham de testare?

Un ham repetฤƒ aceeaศ™i buclฤƒ la fiecare execuศ›ie. Cunoaศ™terea acelei bucle รฎศ›i spune exact unde se aflฤƒ propriul tฤƒu... testarea automatizฤƒrii conectฤƒrile de active ศ™i care pas eศ™ueazฤƒ atunci cรขnd o rulare devine roศ™ie.

  1. Pregฤƒtiศ›i mediul: Cablajul rezolvฤƒ configuraศ›ia mediului, deschide conexiuni ศ™i รฎncarcฤƒ dispozitive de fixare, astfel รฎncรขt fiecare rulare รฎncepe din aceeaศ™i stare cunoscutฤƒ.
  2. รŽncฤƒrcaศ›i scripturile de testare: Scripturile, parametrii ศ™i rezultatele aศ™teptate sunt citite din repozitoriu. Nimic nu este introdus รฎn timpul execuศ›iei, ceea ce face ca o a doua execuศ›ie sฤƒ fie comparabilฤƒ cu prima.
  3. รŽnlocuiศ›i modulele lipsฤƒ: ศ˜oferii รฎnlocuiesc apelanศ›ii care nu existฤƒ รฎncฤƒ, iar apelurile scurte รฎnlocuiesc serviciile neterminate, instabile sau costisitoare de apelat.
  4. Invocaศ›i aplicaศ›ia testatฤƒ: Motorul de execuศ›ie declanศ™eazฤƒ fluxul de lucru descris de script, fie cฤƒ este vorba de un apel de metodฤƒ, de un API cerere sau o interacศ›iune cu browserul.
  5. Capturaศ›i rezultatul real: Valorile returnate, sarcinile utile de rฤƒspuns, rรขndurile bazei de date, liniile de jurnal ศ™i starea ecranului sunt toate รฎnregistrate pe mฤƒsurฤƒ ce sunt produse.
  6. Comparaศ›i cu rezultatele aศ™teptate: Validatorul de ieศ™ire activeazฤƒ fiecare valoare capturatฤƒ. Orice nepotrivire marcheazฤƒ cazul ca fiind eศ™uat ศ™i รฎnregistreazฤƒ atรขt valoarea aศ™teptatฤƒ, cรขt ศ™i cea observatฤƒ.
  7. รŽnregistrare ศ™i raportare: Ham-ul scrie un marcaj temporal trace a rulฤƒrii ศ™i genereazฤƒ un raport de succes/eศ™ec pe care un dezvoltator รฎl poate citi fฤƒrฤƒ a rula din nou nimic.
  8. Dฤƒrรขma: Datele temporare, conexiunile ศ™i starea stub-ului sunt ศ™terse, astfel รฎncรขt urmฤƒtorul caz nu poate moศ™teni reziduuri de la acesta.

๐Ÿ’ก Sfat: Reรฎmprospฤƒtaศ›i modulele de rฤƒspuns ori de cรขte ori se modificฤƒ modulul real. Un modul de rฤƒspuns care รฎncฤƒ rฤƒspunde cu formatul din trimestrul trecut va raporta o rulare verde, รฎn timp ce integrarea live este deja defectฤƒ.

Un exemplu practic concretizeazฤƒ bucla. Sฤƒ presupunem cฤƒ pagina de finalizare a comenzii este gata, dar gateway-ul de platฤƒ nu. Un driver lanseazฤƒ cererea pe care interfaศ›a ar trimite-o รฎn mod normal, un stub rฤƒspunde mai รฎntรขi cu โ€žPlatฤƒ reuศ™itฤƒโ€ ศ™i apoi cu un timeout, iar validatorul confirmฤƒ comanda รฎntr-un caz ศ™i o solicitare de reรฎncercare รฎn celฤƒlalt. Ambele cฤƒi sunt verificate รฎnainte ca echipa gateway-ului sฤƒ scrie o linie de cod.

Existฤƒ douฤƒ contexte รฎn care este utilizat Test Harness

Acelaศ™i mecanism serveศ™te douฤƒ scopuri distincte, iar vocabularul se schimbฤƒ uศ™or รฎn funcศ›ie de care dintre ele te afli.

  1. Testarea automatizฤƒrii: Acesta conศ›ine scripturi de testare, parametri necesari pentru a rula aceste scripturi ศ™i pentru a aduna rezultate pentru a le analiza
  2. Testare de integrare: Este folosit pentru a pune รฎmpreunฤƒ douฤƒ unitฤƒศ›i de cod sau modul care interacศ›ioneazฤƒ รฎntre ele pentru a verifica dacฤƒ comportamentul combinat este sau nu conform aศ™teptฤƒrilor.

Luaศ›i รฎn considerare un modul de autentificare ศ™i un modul de profil care trebuie sฤƒ facฤƒ schimb de un token de utilizator. รŽn contextul integrฤƒrii, un driver simuleazฤƒ o autentificare reuศ™itฤƒ ศ™i transmite token-ul logicii de profil, astfel รฎncรขt harta datelorping, verificarea permisiunilor ศ™i randarea ecranului pot fi verificate รฎnainte de finalizarea serviciului de autentificare real. รŽn contextul automatizฤƒrii, aceeaศ™i pereche de cazuri este adฤƒugatฤƒ la o suitฤƒ ศ™i rulatฤƒ din nou la fiecare compilare, fฤƒrฤƒ ca cineva sฤƒ o mai atingฤƒ.

Tipuri de hamuri de testare

Deoarece software-ul este construit รฎn straturi, un sistem de hamuri este de obicei specializat รฎn stratul pe care รฎl verificฤƒ. Patru tipuri acoperฤƒ aproape fiecare proiect.

A cablaj de testare unitarฤƒ exerseazฤƒ cele mai mici porศ›iuni de cod, cum ar fi o singurฤƒ funcศ›ie sau metodฤƒ, fiecare dependenศ›ฤƒ fiind รฎnlocuitฤƒ de un stub. Este cel mai rapid de executat ศ™i cel mai ieftin de รฎntreศ›inut, motiv pentru care testarea unitara Suitele sunt de obicei primul sistem de gestionare pe care o echipฤƒ รฎl construieศ™te. Testarea unui calcul de impozit fฤƒrฤƒ a atinge modulul de facturare este o utilizare tipicฤƒ.

An cablaj de testare a integrฤƒrii verificฤƒ dacฤƒ douฤƒ sau mai multe module coopereazฤƒ corect ศ™i este stratul unde apar nepotrivirile de date ศ™i apelurile eศ™uate. Este cablajul descris รฎn testarea de integrare contextul de mai sus, de exemplu verificarea faptului cฤƒ un serviciu de comenzi transmite sarcina utilฤƒ corectฤƒ unui serviciu de platฤƒ.

A cablaj de testare a sistemului gestioneazฤƒ un flux complet end-to-end prin interfaศ›ฤƒ, serviciu ศ™i bazฤƒ de date, astfel รฎncรขt testarea sistemului poate confirma cฤƒ regulile de business sunt valabile odatฤƒ ce fiecare strat este prezent. A ham de testare de regresie apoi ruleazฤƒ din nou suita acumulatฤƒ dupฤƒ fiecare modificare, ceea ce face ca testarea regresiei practic atunci cรขnd trebuie repetate cรขteva sute de scenarii la fiecare รฎmbinare.

Testaศ›i unelte pentru cablaj

Fiecare dintre aceste tipuri este construit รฎn mod normal pe baza unui instrument existent, mai degrabฤƒ decรขt de la zero. Cele douฤƒ opศ›iuni clasice rฤƒmรขn cadrele de lucru la nivel de unitate:

Dincolo de aceste douฤƒ, majoritatea echipelor adaugฤƒ instrumente care extind hamul la browser, la stratul API sau la profilul de รฎncฤƒrcare. Tabelul de mai jos mapeazฤƒ opศ›iunile comune รฎn funcศ›ie de rolul pe care รฎl joacฤƒ fiecare.

Instrument Cel mai potrivit pentru Rol รฎn interiorul hamului
JUnit Java unitฤƒศ›i ศ™i suite de integrare Furnizeazฤƒ drivere, accesorii ศ™i afirmaศ›ii
NUnit Cod C# ศ™i VB.NET pe platforma .NET Acelaศ™i rol ca JUnit pentru limbaje .NET
Selenium Fluxuri end-to-end bazate pe browser Acศ›ioneazฤƒ ca driver pentru stratul de interfaศ›ฤƒ cu utilizatorul
TestNG Mare Java apartamente care necesitฤƒ grupareping ศ™i alergฤƒri paralele Serveศ™te ca motor de execuศ›ie a testelor
PyTest Python servicii ศ™i verificฤƒri la nivel API Fixฤƒrile servesc ศ™i ca ศ™tifturi ศ™i furnizori de date
Apache JMeter Scenarii de sarcinฤƒ, stres ศ™i performanศ›ฤƒ Genereazฤƒ trafic sintetic pentru aplicaศ›ia testatฤƒ
Postman REST API contracverificarea t Oferฤƒ servere mock care รฎnlocuiesc endpoint-urile neterminate

Indiferent de combinaศ›ia pe care o alegeศ›i, cablajul se amortizeazฤƒ doar atunci cรขnd funcศ›ioneazฤƒ nesupravegheat, aศ™a cฤƒ conectaศ›i-l la integrare continuฤƒ lucrare devreme. Un catalog mai amplu de opศ›iuni este listat รฎn Guru99 instrumente de testare rezumat. O distincศ›ie รฎncฤƒ provoacฤƒ confuzie ศ™i meritฤƒ sฤƒ o clarificaศ›i รฎnainte de a alege ceva.

Test Harness vs Test Framework

Un sistem de รฎmperechere (ham) ศ™i un framework de automatizare sunt adesea tratate ca fiind acelaศ™i lucru, รฎnsฤƒ rฤƒspund la รฎntrebฤƒri diferite: sistemul de รฎmperechere este cel care executฤƒ un test, รฎn timp ce framework-ul este structura รฎn interiorul cฤƒreia sunt proiectate testele. Tabelul de mai jos le prezintฤƒ una lรขngฤƒ alta.

Test ham Testarea cadrului de automatizare
Un ham de testare este compus din drivere ศ™i stub-uri, care sunt mici programe false care interacศ›ioneazฤƒ cu software-ul testat. Este un set de procese, proceduri, abdomentracconceptul t ศ™i un mediu รฎn care testele automate sunt proiectate ศ™i implementate
Nu puteศ›i sฤƒ โ€žรŽnregistraศ›i ศ™i redareโ€ script รฎn Test Harness Un tester poate manual scriptul โ€žรŽnregistrare ศ™i redareโ€ รฎn acest cadru
Harnaศ™ul de testare conศ›ine toate informaศ›iile necesare pentru compilarea ศ™i rularea unui test, cum ar fi cazurile de testare, portul de implementare ศ›intฤƒ (TDP), fiศ™ierul sursฤƒ testat, stub-uri etc. Cadrul de automatizare a testelor conศ›ine informaศ›ii precum biblioteca de testare, instrumente de testare, practici de testare automatฤƒ, o platformฤƒ de testare etc.
Un ham de testare este clasificat รฎn
Testarea automatizฤƒrii
Testare de integrare
Cadrul de automatizare exemple
Testare bazatฤƒ pe date
Testare bazatฤƒ pe cuvinte cheie
Testare bazatฤƒ pe modularitate
Testare hibridฤƒ
Testare bazatฤƒ pe model
Code testare condusฤƒ
Testare bazatฤƒ pe comportament

รŽntrebฤƒri frecvente

Un platformฤƒ de testare este configuraศ›ia hardware, a sistemului de operare, a reศ›elei ศ™i a bazei de date unde se executฤƒ testele. Un cablaj este stratul software de deasupra acestuia care furnizeazฤƒ stub-uri, drivere, date ศ™i rapoarte. Unul este locaศ›ia, celฤƒlalt este mecanismul.

รŽnregistrarea ศ™i redarea nu sunt disponibile, aศ™adar abilitฤƒศ›ile de scripting sunt Java, Python, sau .NET este necesar. Configurarea iniศ›ialฤƒ necesitฤƒ un efort real, modulele se รฎndepฤƒrteazฤƒ de cele reale dacฤƒ sunt neglijate, iar simularea excesivฤƒ poate ascunde defectele de integrare pรขnฤƒ tรขrziu.

Canalul apeleazฤƒ hamul dupฤƒ fiecare commit. Jenkins, Acศ›iunile GitHub sau CI-ul GitLab declanศ™eazฤƒ rularea, hamul executฤƒ scripturi รฎmpotriva stub-urilor, iar compilarea eศ™ueazฤƒ automat atunci cรขnd o aserศ›iune nu este valabilฤƒ.

Modelele de inteligenศ›ฤƒ artificialฤƒ citesc modificฤƒrile interfeศ›ei ศ™i reparฤƒ automat locatoarele sau aserศ›iunile defecte, astfel รฎncรขt un sistem de securitate sฤƒ supravieศ›uiascฤƒ refactorizฤƒrilor. Auto-repararea semnaleazฤƒ, de asemenea, cazurile instabile, eliminรขnd รฎntreศ›inerea manualฤƒ care รฎn mod tradiศ›ional urmeazฤƒ fiecฤƒrei รฎncorporฤƒri. Selenium apartamente.

Da. Modelele generative produc rฤƒspunsuri tip stub dintr-o specificaศ›ie API, elaboreazฤƒ cod de driver din semnฤƒturile modulelor ศ™i sintetizeazฤƒ seturi de date realiste. RevVizualizaศ›i rezultatul รฎnainte de utilizare, deoarece un exemplu plauzibil poate contrazice รฎn continuare ideea realฤƒ.tract.

Rezumaศ›i aceastฤƒ postare cu: