Vă mulțumim pentru susținere

Cum de a testa codul Web?

Are cineva sugestii bune pentru scrierea codului de testare pentru dezvoltarea bazei de date în cazul în care există o dependență puternică de stat?

În mod specific, vreau să scriu teste pentru cod care prelucrează înregistrări din baza de date, dar răspunsurile vor depinde de datele din bază de date (care se pot schimba în timp).

Oamenii fac, de obicei, un sistem separat de dezvoltare cu o bază de date "înghețată", astfel încât orice funcție dată să întoarcă întotdeauna exact același set de rezultate?

Sunt sigur că acest lucru nu este o problemă nouă, așa că aș fi foarte interesat să învăț din experiența altora.

Există articole bune acolo care discută această problemă a dezvoltării web în general?

De obicei, scriu cod PHP, dar mă aștept ca toate aceste aspecte să fie în mare parte limbaj și cadru agnostic.

0
adăugat editat

10 răspunsuri

Ai putea încerca http://selenium.openqa.org/ este mai mult pentru testarea GUI decât pentru date aplicație de testare a nivelului, dar înregistrează acțiunile dvs. care apoi pot fi redate pentru a automatiza testele pe diferite platforme.

0
adăugat

Ar trebui să căutați în DBUnit sau să încercați să găsiți un echivalent PHP (trebuie să existe unul acolo). Puteți să o utilizați pentru a pregăti baza de date cu un set specific de date care reprezintă datele dvs. de testare și, prin urmare, fiecare test nu va mai depinde de baza de date și de o anumită stare. În acest fel, fiecare test este autonom și nu se va rupe în timpul utilizării ulterioare a bazei de date.

Actualizare: o căutare rapidă pe Google a afișat o extensie a unității DB pentru PHPUnit.

0
adăugat
Foarte interesant, cu siguranta va trebui sa incep sa caut in asta. Nu prea scriu corect teste unitare din acest motiv și este o practică proastă pe care trebuie să o elimin.
adăugat autor kaybenleroll

Am aceeași problemă exactă cu munca mea și cred că cea mai bună idee este să ai un script PHP pentru a re-crea baza de date și apoi un script separat unde voi arunca date nebune la el pentru a vedea dacă o rupe.

Nu am folosit vreodată nici o unitate de testare sau de așa ceva nu pot spune dacă funcționează sau nu îmi pare rău.

0
adăugat

Dacă vă preocupați în cea mai mare măsură de testarea stratului de date, vă recomandăm să consultați această carte: Modele de test xUnit: Cod de testare Refactoring . Întotdeauna am fost sigur de asta, dar această carte face o treabă bună pentru a ajuta la enumerarea preocupărilor precum performanța, reproductibilitatea etc.

0
adăugat

Cred că depinde ce bază de date folosiți, dar Red Gate (www.red-gate.com) face un instrument numit SQL Data Generator. Aceasta poate fi configurată pentru a umple baza de date cu date de testare sensibile. Puteți, de asemenea, să îi spuneți să utilizeze întotdeauna aceeași sămânță în generatorul de numere aleatorii, astfel încât datele dvs. "aleatorii" să fie identice de fiecare dată.

Puteți apoi să vă scrieți testele unității pentru a utiliza aceste date fiabile și repetabile.

În ceea ce privește testarea aspectului web al lucrurilor, în prezent mă uit la Selenium (selenium.openqa.org). Aceasta pare să fie o suită de testare compatibilă cu browserul care vă va ajuta să testați funcționalitatea. Cu toate acestea, ca și în cazul tuturor acestor instrumente de testare a site-urilor web, nu există nicio modalitate reală de a testa cât de bine aceste lucruri arată în toate browserele, fără a le arunca o privire umană!

0
adăugat

Dacă puteți seta baza de date cu o cantitate cunoscută înainte de a rula testele și a rupe la sfârșit, atunci veți ști cu ce date lucrați.

Apoi, puteți folosi ceva de genul Selenium pentru a testa cu ușurință de la interfața dvs. (presupunând că există web-based aici, dar există o mulțime de instrumente de testare UI acolo pentru alte arome UI) și detectarea prezenței anumitor înregistrări retrase din baza de date.

Merită definit să fie instalată o versiune de test a bazei de date - sau să faceți scripturile dvs. de testare să populeze baza de date cu date cunoscute ca parte a testelor.

0
adăugat

În general, sunt de acord cu Peter, dar pentru crearea și ștergerea datelor de testare nu aș folosi direct SQL. Prefer sa folosesc un API CRUD care este folosit in produs pentru a crea date cat mai apropiate de productie ...

0
adăugat

Iată strategia mea (folosesc JUnit, dar sunt sigur că există o modalitate de a face echivalentul în PHP):

Am o metodă care rulează înainte de toate testele de unitate pentru o anumită clasă DAO. Acesta pune baza de date dev într-o stare cunoscută (adaugă toate datele de test etc.). Pe măsură ce fac teste, urmăresc toate datele adăugate la starea cunoscută. Aceste date sunt curățate la sfârșitul fiecărui test. După ce au fost executate toate testele pentru clasă, o altă metodă elimină toate datele de testare din baza de date dev, lăsându-l în starea în care se afla înainte de a începe testele. Este un pic de lucru pentru a face toate acestea, dar de obicei, scriu metodele într-o clasă DBTestCommon unde toate clasele mele de test DAO pot ajunge la ele.

0
adăugat

Aș propune să folosesc trei baze de date. O bază de date de producție, o bază de date de dezvoltare (completat cu câteva date semnificative pentru fiecare dezvoltator) și o bază de date de testare (cu tabele goale și poate câteva rânduri care sunt întotdeauna necesare).

O modalitate de a testa codul bazei de date este:

  1. Introduceți câteva rânduri (folosind SQL) pentru a inițializa starea
  2. Rulați funcția pe care doriți să o testați
  3. Comparați așteptările cu rezultatele reale. Aici puteți utiliza cadrul standard de testare a unităților
  4. Curățați rândurile care au fost modificate (astfel încât următoarea derulare nu va vedea derularea precedentă)

Curățirea ar putea fi efectuată într-un mod standard (desigur, numai în baza de date de testare) cu DELETE * FROM table .

0
adăugat

Utilizăm o bază de date în memorie (hsql: http://hsqldb.org/ ). Hibernate ( http://www.hibernate.org/ ) ne face ușor să ne îndreptăm testele pe unități la testarea db, cu bonusul adăugat că rulează la fel de rapid ca fulgerul.

0
adăugat