Codeception – akceptační testy

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jiří Nápravník
Člen | 710
+
0
-

Chci začít testovat nějaké kritické věci. Třeba nákupní proces v eshopu. Pro tenhle účel mi přijde nejlepší využít akceptační testy přes Selenium, konkrétně přímo přes browser, aby šel i Ajax apod. Sáhl jsem tedy po Codeception.

Napíšu co kde má vyplnit, a na co kliknout. Posud vše v pohodě, ale v klasických akceptačních testech moc asserci nevidím, vidím třeba zda je nějaký text na stránce, zda jsem na dané URL apod. Chtěl bych ale udělat i to, že chci zkontrolovat, zda se uložila objednávka přímo do databáze tak, jak má. Přihodil jsem si tam Codeception modul, pro databázi a kontroluji, zda mi to vrátí, co má. Funguje v pohodě, ale chci se spíše zeptat, jdu na to správně? Mohu si v akceptačních testech takhle sáhnout na databázi?

A druhá věc, jak řešit testovací databázi. Sice jsem si nastavil vlastní databázi v DB modulu, i v Doctrine modulu, ale jak se to spustilo přes browser, tak to stejně pracovalo s vývojovou databází, protože to jde přes standardní index.php a bootstrap…

CZechBoY
Člen | 3608
+
-1
-

Akceptacni testy kontroluje zadavatel rucne. V seleniu delas integracni ;-)

Jinak proces objednavky muzes taky otestovat klasickyma unit testama.

S integracnima testama testuju jen jestli se nachazi prvek tzn prvek neni null nebo je instance element.

Jiří Nápravník
Člen | 710
+
0
-

Tak asi neco nechapu, v Codeception to nazyvaji acceptance, ale musis spustit selenium server…

No proces objednavky unit testama, to si moc nedovedu predstavit. To jsou podle me spise ty integracni ne, tam uz se kontroluje vice tech trid a provazanost mezi nima. Unit testy chapu ja spise pro nejaky knihovny pripadne, kdyz poslu facade tohle pole, tak se vytvori tahle objednavka.

Ja spise potrebuji vyzkouset opravdu funkcnost, ze to dela co ma. Doposud jsem vetsinu testoval rucnim klikanim a kontrolou pak v databazi nebo v adminu, zda se udelalo co melo… To ted v podstate delam automaticky jak jsem napsal v tom testu, ale je to spravne?

Jako jde zkontrolovat samozrejme jestli je tam nejaka flashka, ze byla objednavka odeslana, pripadne jestli jsem presmerovan na spravnou stranku. Ale to je podle me takovy test naprd, protoze nevim, zda se opravdu ulozilo co potrebuji.

CZechBoY
Člen | 3608
+
0
-

Tak udelat neco jako unit test, ale rikal bys tomu jinak :D

Mel bys normalni kod pro vlozeni produktu do kosiku, vytvoreni objednavky apotom vytahnuti objednavky a kontrolu jestli vse v objednavce sedi.

Samozrejme muzes to udelat v Seleniu, ale mne se moc nelibi :D navic hledat vsechny ty selektory…

V unit testu bych to zkracene udelal treba takhle

$product = randomProduct();
$address = randomAddress()
$cart->addProduct($product);
Assert::equal(1, $cart->totalProducts());
Assert::equal$product->getPrice(), $cart->getTotal());
$order = new Order($cart, $address, ...);
$order->send();
$orderDb = findOrderInDb($order->getId());
Assert::notEqual(null, $orderDb);
Assert::equal([$product->getId()], $order->getProductIds());
Jiří Nápravník
Člen | 710
+
0
-

Jasny rozumim, ale tohle je prave to, ze to otestuje tu funkcionalitu, pro me je spise prednejsi zkontrolovat to, ze to funguje vsechno pospolu, jakoby tam byl navstevnik. Takze opravdu prijit, vyplnit formular a zkontrolovat zda je objednavka opravdu u me. Jen mi trochu prijde, ze to co delam je to, ze mozna delam na jednom miste vice ruznych testu dohromady:-)

Nemluve o tom, ze u toho potrebuji i veci jako cookie, ajax apod.

Editoval Jiří Nápravník (6. 4. 2016 21:54)

pata.kusik111
Člen | 78
+
+2
-

Do databáze si určitě šáhnou můžeš, ale já osobně to dělám jenom v případě, že nemám jinou možnost. Ten akceptační test si opravdu představ jako chování zákazníka. Ten se ti asi těžko po odeslání košíku podívá do DB, jestli tam máš záznam. Ale zkontroluje to nějak nepřímo – podívá se do nějaké klientské zóny, že tam tu objednávku má, zkontroluje si e-mail, že mu dorazilo potvrzení.

Pokud si kontroluješ databázi, tak je to spíš integrační test a ten bych dělal jako kontrolu po nějakém presenterRequest (v testu vytvoříš ten, co by měl klient když by odeslal objednávku). A ten pak můžeš vesele kontroloval oproti DB.

Jiří Nápravník
Člen | 710
+
0
-

Díky za reakci. Takže by asi bylo tedy správnější mrknout třeba do adminsitrace, zda ta objednavka dorazila apod. Jen to je asi trochu pracny, tak zatim zustanu u tohohle:)

Můžeš mě někam odkázat, kde se dá o tom dočíst více? Jestli to chápu tak jakoby odešlu formulář a pak si zkontroluji databazi, ale moc to nepobiram, jak realizovat:)