Тестване на REST API с помощта на PHPUnit

Създавам набор от RESTful API и сега се изисква да пиша модулни тестове за тях. Не съм сигурен какво всъщност трябва да тестват единичните тестове.

Трябва ли модулните тестове да проверяват дали отговорът, получен от сървъра, е правилен за различни входове? Ако е така, добра практика ли е да имате предварително дефиниран набор от правилни формати на отговор и да проверявате отговорите спрямо тях?

АКТУАЛИЗАЦИЯ

Обаждам се на тези услуги чрез CURL и определено мога да проверя кода на състоянието. Отговорът може да варира за различните входове, така че трябва ли да проверя за всички възможни отговори?

Как обикновено се извършва модулно тестване за RESTful API, използвайки PHPUnit като цяло?


person Harsha    schedule 16.09.2012    source източник


Отговори (2)


Ако слоят данни на вашия API е достатъчно абстрахиран, така че да можете да получавате последователен и предсказуем изход за даден вход, вашите тестови случаи определено трябва да включват някои общи очаквания за изход за някакъв краен списък с входове. Те също трябва да тестват за всякакви случаи на грешка, които можете да ударите нагоре.

Ако вашият API не може да работи срещу слой данни, който е в предвидимо състояние (например, ако е свързан с живи данни или с данни, които се споделят между разработчиците), в крайна сметка ще прекарате много време в коригиране на вашия тестове за правилно моделиране на новото състояние на данните. Това прави модулното тестване по-малко ценно, тъй като може да не ги изпълнявате толкова често и тъй като никога не сте сигурни дали неуспешният тест се дължи на промяна в данните или промяна в логиката на програмата. Дали това надвишава риска от липса на модулни тестове или не, ще зависи от вашата индивидуална ситуация (колко често тестовете се повреждат, колко критична е услугата и т.н.).

Що се отнася до това как да използвате PHPUnit за изпълнение на тестови случаи, не мога да отговоря конкретно, но предполагам, че бихте направили както отбеляза @basiljames; изпълнете повикване срещу дадена крайна точка и проверете дали полученият отговор правилно отговаря на вашите очаквания. Не е толкова различен от всеки друг модулен тест, с изключение на факта, че може да работят малко по-бавно.

person cori    schedule 17.09.2012

Можете да използвате JUnit за вашите тестови случаи. Ще трябва да проверите за HTTP Status Code и след това съдържанието на отговора за всеки конкретен атрибут или стойност.

person basiljames    schedule 16.09.2012