Jak testować kod WWW?

głosy
11

Czy ktoś ma jakieś dobre wskazówki dotyczące pisania kodu testowego dla rozwoju bazy backend gdzie jest ciężkie uzależnienie od państwa?

W szczególności chcę napisać testy dla kodu pobierania rekordów z bazy danych, ale odpowiedzi będzie zależeć od danych zawartych w bazie danych (które mogą się zmieniać w czasie).

Czy ludzie zwykle zrobić oddzielny system rozwoju z „zamrożone” bazy danych tak, że dana funkcja powinna zawsze powrócić dokładnie ten sam zestaw wyników?

Jestem całkiem pewien, że to nie jest nowy problem, więc byłbym bardzo zainteresowany, aby dowiedzieć się od doświadczeń innych ludzi.

Są tam dobre artykuły, które obecnie nie omawiać tę kwestię rozwoju internetowego w ogóle?

I zazwyczaj napisać kod PHP, ale spodziewałbym wszystkie te kwestie są w dużej mierze niezależne od języka i ramy.

Utwórz 05/08/2008 o 22:58
źródło użytkownik
W innych językach...                            


10 odpowiedzi

głosy
5

Należy spojrzeć na DBUnit lub spróbować znaleźć odpowiednik PHP (nie musi być jeden tam). Można go używać do przygotowania bazy danych z określonego zestawu danych, który reprezentuje dane testowe, a więc każdy test nie będzie już zależeć od bazy danych i pewnego stanu istniejącego. W ten sposób, każdy test jest samowystarczalne i nie pęknie podczas dalszego użytkowania bazy danych.

Aktualizacja: Szybkie wyszukiwanie google pokazał rozszerzenie jednostki DB dla PHPUnit.

Odpowiedział 05/08/2008 o 23:03
źródło użytkownik

głosy
3

Jeśli jesteś zainteresowany głównie z testów warstwy danych, może chcesz sprawdzić tej książki: Wzory xUnit Test: Refaktoryzacja kodu testowego . Zawsze byłem pewien o tym sam, ale ta książka ma wielkie zadanie, aby pomóc wyliczyć obawy takie jak wydajność, powtarzalność, etc.

Odpowiedział 06/08/2008 o 05:14
źródło użytkownik

głosy
2

Używamy w pamięci bazy danych (HSQL: http://hsqldb.org/ ). Hibernacja ( http://www.hibernate.org/ ) ułatwia nam wskazać nasze testy jednostkowe w db testowania, z dodatkowym bonusem, że działają tak szybko jak błyskawica ..

Odpowiedział 10/09/2008 o 13:02
źródło użytkownik

głosy
2

Myślę, że to zależy od tego, co baza danych używasz, ale Red Gate (www.red-gate.com) uczynić narzędzie o nazwie SQL Data Generator. To może być skonfigurowany tak, aby wypełnić swoją bazę danych z sensownych poszukujących danych testowych. Można również powiedzieć to, aby zawsze korzystać z tego samego materiału siewnego w generator liczb losowych więc „random” dane jest taka sama za każdym razem.

Następnie można pisać testy jednostkowe, aby skorzystać z tego niezawodnego, powtarzalnego danych.

Jeśli chodzi o testowanie stronę internetową rzeczy, jestem obecnie poszukuje do Selen (selenium.openqa.org). To wydaje się być cross-browser zdolny zestaw testów, które pomogą Ci funkcjonalność testową. Jednak, podobnie jak w przypadku wszystkich tych narzędzi testowych strona internetowa, nie ma prawdziwy sposób na sprawdzenie, jak te rzeczy wyglądają we wszystkich przeglądarkach bez rzucania ludzkie oko nad nimi!

Odpowiedział 06/08/2008 o 14:44
źródło użytkownik

głosy
1

W ogóle zgadzam się z Piotrem, ale do tworzenia i usuwania danych testowych nie użyłbym SQL bezpośrednio. Wolę korzystać z niektórych CRUD API, który jest używany w produkcie, aby utworzyć dane jako podobny do produkcji, jak to możliwe ...

Odpowiedział 10/09/2008 o 12:31
źródło użytkownik

głosy
1

Chciałbym zaproponować, aby korzystać z trzech baz danych. Jedna baza produkcyjna, jedna baza danych rozwoju (wypełnione niektórych znaczących danych dla każdego dewelopera) i jedna baza danych badania (z pustych stołów i może kilka wierszy, które są zawsze potrzebne).

Droga do testowania kodu do bazy danych jest:

  1. Wstawić kilka wierszy (za pomocą SQL), aby zainicjować stan
  2. Uruchomić funkcję, którą chcesz przetestować
  3. Porównać oczekiwano z rzeczywistymi wynikami. Tutaj można korzystać z normalnej ramy testów jednostkowych
  4. Oczyścić wierszy, które zostały zmienione (tak następny bieg nie patrz poprzedni bieg)

Porządkowe mogą być wykonane w sposób standardowy (oczywiście tylko w bazie testowej) z DELETE * FROM table.

Odpowiedział 19/08/2008 o 19:40
źródło użytkownik

głosy
1

Oto moja strategia (używam JUnit, ale jestem pewien, że istnieje sposób, aby zrobić równowartość w PHP):

Mam metodę, która działa zanim wszystkie testy jednostkowe dla konkretnej klasy DAO. Stawia bazę dev do znanego stanu (dodaje wszystkie dane testowe, etc.). Jak uruchomić testy, ja śledzić jakichkolwiek danych dodawanych do znanego stanu. Dane te są czyszczone na końcu każdego testu. Po zakończeniu wszystkich testów dla klasy skończył, inna metoda usuwa wszystkie dane z testów w bazie danych dev, pozostawiając go w stanie, w jakim znajdował się przed przeprowadzono testy. To trochę pracy, aby to wszystko zrobić, ale ja zwykle napisać metod w klasie DBTestCommon gdzie wszystko moich klas testowych DAO można się do nich dostać.

Odpowiedział 11/08/2008 o 14:30
źródło użytkownik

głosy
1

Można spróbować http://selenium.openqa.org/ jest bardziej do testowania GUI zamiast testowania aplikacji warstwy danych, ale nie nagrywać swoje działania, które następnie mogą być odtwarzane do automatyzacji testów na różnych platformach.

Odpowiedział 06/08/2008 o 13:06
źródło użytkownik

głosy
1

Jeśli można skonfigurować baza danych o znanej ilości przed uruchomieniem testów i zburzyć na końcu, wtedy będziesz wiedzieć, jakie dane są pracuje.

Następnie można użyć coś jak selen łatwo przetestować z UI (zakładając, web-based tutaj, ale istnieje wiele narzędzi testowania UI tam dla innych UI-smaki) i wykryć obecność niektórych zapisów wycofali z bazy danych.

Na pewno warto konfigurowania albo testową wersję bazy danych - lub pisania skryptów testowych wypełnić bazę danych ze znanymi jako część testów.

Odpowiedział 05/08/2008 o 23:08
źródło użytkownik

głosy
1

Mam dokładnie ten sam problem z mojej pracy i uważam, że najlepszym pomysłem jest mieć skrypt PHP, aby ponownie utworzyć bazę danych, a następnie oddzielnego skryptu gdzie rzucam szalonych dane na to, aby sprawdzić, czy łamie go.

Nie kiedykolwiek korzystał z żadnych testów jednostkowych lub tym podobne, więc nie mogę powiedzieć, czy to działa, czy nie przykro.

Odpowiedział 05/08/2008 o 23:03
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more