从来没有想过测试一个REST API会那么困难,当我在做fullstack时,我梦想着去REST,所以我没有弄乱html和所有那些东西,只有Behat拯救我,它有助于很多时候来测试html页面。
但是当谈到测试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"
}
}
},
]
}
}
作为一个体面的人,我有Swagger文档,它声明这个特定的资源应该是这样的,那些字段是可选的,那些是整数类型,你有关系等等等等
可是:
我的想法很少:
如何以不会花费5倍的时间编写生产代码
答案 0 :(得分:0)
我对PHP及其周围的工具堆不太熟悉,但一般来说,对于API测试以及任何测试,它确实远远超过生产代码,并且取决于您的JSON是如何生成,意味着它背后的逻辑,你可以写出非常聪明的测试。
例如,让我们假设您有一个API端点,它获取JSON输入并生成JSON作为输出,这意味着显然,您知道它的逻辑。因此,您可以做的是,在代码中使用一个测试JSON并将测试JSON作为输出进行匹配,并在测试模式下测试调用API并发布JSON并将其与输出JSON断言,在这种情况下,可以匹配所有动态字段。
除此之外,API在哪种语言中无关紧要,为了在测试环境或分段上实时测试,您可以使用REST Assured或Karate之类的工具,或者更多更多。我相信有些工具/框架也可以很好地与PHP集成。
答案 1 :(得分:0)
你可以用apitest测试
{
test1: {
req: {
},
res: {
body: {
"_links": {
"self": {
"href": "/api/v1/conversations"
}
},
"_embedded": {
"items": [ @partial
{
"id": 0, @type
"name": "", @type
"avatarUrl": `/^\/static\/avatars\/\w+\.png$/.test($)`, @eval
"createdAt": "isDate($)", @eval
"updatedAt": "isDate($)", @eval
"_links": {
"self": {
"href": `/^\/api\/v1\/conversations\/\d+/.test($)`, @eval
}
}
},
]
}
}
}
}
}
Apitest 是声明式 api 测试工具,具有类似 JSON 的 DSL。