Softwarové testování

|

O tom, že se aplikace mají testovat je asi zbytečné psát. Mezi to více zajímavé patří testování na “vyšší” úrovni, tedy integrační testy. Na to využíváme Cucumber a pod ním Capybaru. Tyto nástroje dohromady simulují chování téměř skutečného uživatele.

Jednou z vlastností NAUC.cz je přihlašování externími službami (Twitter, Facebook, LinkedIn), takže se podíváme, jak tuto funkčnost testujeme :-)

Pro začátek je otázkou, jestli zahrnout do testů samotnou kontrolu odpovědí ověřovacích služeb na přítomnost a obsah využívaných atributů (jméno, e-mail, atd.) anebo rovnou provádět jejich prostřednictvím přihlášení a kontrolovat jeho výsledek.

Pokud by šlo o co nejčistší přístup, potřebujeme napřed mít funkční komunikaci s ověřovací službou a tedy jistotu, že odpověď obsahuje atributy, které očekáváme. To potom napasovat na vytváření uživatele.

U přístupu z “vyššího” pohledu už mám uživatele a výstup z ověřovací služby. Chci, aby uživatel po vytvoření obsahoval nějaké atributy z ověřovací služby. Takže mě odpověď od ověřovací služby moc nezajímá, jen jsem našel atributy, které potřebuji a hotovo.

Příklad výstupu testu spuštěného v Cucumberu

Jak jsem psal v některém z předchozích článků, pro přihlašování používáme Omniauth a pro každou ověřovací službu máme zvláštní metodu, která nastaví uživateli vybrané atributy. V případě, že se pokouší přistoupit k atributu, který není definován, je přihlášení neúspěšné.

Máme tedy testovací účet například na Twitteru se známým nastavení jeho profilu a testujeme, jestli se po vytvoření nového účtu na NAUC.cz přenesou údaje jako jméno a podobně do uživatele v aplikaci.

Jen pro zajímavost, Twitter a LinkedIn narozdíl od Facebooku neposílají e-mail uživatele, takže si je uživatelé budou muset vyplnit ručně.

… a ještě k bezpečnosti

Poslední dobou se díky Githubu hodně píše o mass-assignment. Je to automatické přiřazení atributů z formuláře odeslaného klientem do modelu. To zrychluje práci při vývoji, ale je nežádoucí, aby mohl uživatel ve formuláři ovlivnit libovolný atribut. O této vlastnosti Ruby on Rails se ví poměrně dlouho (minimálně od roku 2007), ale nejspíš s ní někteří vývojáři nepočítali.

Pokud chcete automatické přiřazování atributů využívat, je víc než vhodné používat seznam editovatelných atributů u modelu (attr_accessible).

Osobně automatické přiřazování používám, ale s attr_accessible a atributy, u kterých to není nutné, nepředávám jako pole formuláře, ale nastavuji v controlleru až před uložením objektu.

Jedním z hlavních smyslů testování je získání (téměř) jistoty, že si budoucími úpravami aplikaci nerozbijeme.

Komentáře nejsou povoleny.