緣起
Codeception 是一套於 2011 年問世的測試框架,它涵蓋了單元測試 (unit test)/功能測試 (functional test)/驗收測試 (acceptance test)。
以往 PHP 的 BDD 開發習慣採用 Behat,因為它的 Cucumber feature file 是業界約定成俗 (de facto) 的標準。
而這次手邊的專案是以 RESTful API 為中心,為了充分實現 CI/CD,逐漸抬頭的 BDD 與隨之興起的 ATDD 勢不可免,因此決定導入 Codeception…
實戰
對於 RESTful API 專案來說,Codeception 與 Behat 比起來有兩項優勢:
1 Request/Reply 直接支援 JSON/XML
以 PATCH
為例,給定 associative array,它會幫你組成 HTTP parameter,如以下內容將變成 Token=eyJpdiI6ImVjiZTc1In0=&Delivered=true
$I->sendPATCH('/orders', [ 'Token' => 'eyJpdiI6ImVjiZTc1In0=', 'Delivered' => true ]);
預設 Content-Type
為 application/x-www-form-urlencoded
,也可以自行指定為 application/json
,參數將以 JSON 編碼送出。
2 內容驗證較直觀
如欲驗證 JSON API 內容是否包含預期值,一個函式即可搞定;Behat 則需借助 PHPUnit 的 assertion。
$I->seeResponseContainsJson([ 'Count' => 10 ]);
產出的測試報告長得像這樣子
參考資料
1. Codeception REST module