從來沒有想過,測試REST API將是很困難的,當我正在做fullstack時,我夢想着去REST,所以我沒有弄亂HTML和所有的東西,只有Behat節省了我的時間,它對測試html頁面有很大的幫助。正確的方法來測試REST API(PHP)
但是當涉及到測試API時,我頭痛。假設我有一些資源,例如用戶對話列表。
{
"_links": {
"self": {
"href": "/api/v1/conversations"
}
},
"_embedded": {
"items": [
{
"id": 4,
"name": "Lana Smith",
"avatarUrl": "/static/avatars/597bd819d90f2568107586.png",
"createdAt": "2017-01-05T00:00:00+03:00",
"updatedAt": "2017-01-05T00:00:00+03:00",
"_links": {
"self": {
"href": "/api/v1/conversations/4"
}
}
},
{
"id": 3,
"name": "Ian North [Support Agent]",
"avatarUrl": "/static/avatars/default.png",
"createdAt": "2017-01-04T01:00:00+03:00",
"updatedAt": "2017-01-04T01:02:00+03:00",
"_links": {
"self": {
"href": "/api/v1/conversations/3"
}
}
},
]
}
}
而作爲一個體面的人我有揚鞭文件,指出這個特殊的資源應該是這樣的,這些領域都是可選的,這些都是整數類型,有你有關係,等等等等第四
但是:
- 我怎麼測試結構是這樣招搖的文檔說,這是
- 我怎麼 測試數據是正確的(這樣的用戶有確切的他 個談話,不是別人的,和正確數量的人)
我在我的腦海幾種方法:
- 只是測試JSON在對一個測試硬編碼的整個有效載荷,從反應過來。這裏的困難,有時我不知道例如createdAt/updatedAt在裝載過程中生成的確切值,頭像網址總是隨機的,除非默認等。
- PHPUnit的使用和測試一切手動像:assertPropertyCount($響應,2,「_embedded.items)然後assertProperty等於(...)
如何做到這樣,它不走寫作產品代碼的時間延長了5倍
只有當您可以預測更改零件的值時,您纔可以一次測試整個'JSON',否則按零件進行驗證:具有+1條消息,僅具有消息,查看通過生成的隨機字符串和日期等標識的已發送消息..你應該首先定義一些測試用例來知道你需要什麼驗證。首先計劃。使用Guzzle + goutte,不要忘記在你的功能上添加'@ api'標籤。至於斷言你可以選擇任何方式,我會用基本的php方法來定義我自己的。 – lauda
如果您可以在Swagger/OAI的基礎上構建,您可以參加可以完成部分測試工作的圖書館,例如https://github.com/nabbar/SwaggerValidator-PHP – hakre