经过一些谷歌搜索,我决定直接问这个:
是否可以仅基于OpenAPI 3.0规范文件运行REST API端点“构建测试”?
我想将示例请求 - 响应对添加到OpenAPI规范文件中,并使现有的或自编写的库运行所有这些已定义的测试并报告任何失败。
据我了解标准,可以很容易地包含请求示例并以原理图方式测试响应(思考http://json-schema.org/)。但我还没有看到一种方法来结合更具体的测试,例如测试特定响应字段中的数字是一个确切的值。此外,有一种顺序测试请求的方法会很好,但我不希望仅从spec文件中实现这一点。
最佳解决方案将包含在我的存储库中并在localhost上运行测试。非常感谢你们。
答案 0 :(得分:1)
是否可以仅基于OpenAPI 3.0规范文件运行REST API端点“构建测试”?
是的。该规范至少包含两个允许自动生成测试的组件:
但是我还没有找到一种方法来合并更具体的测试,例如将特定响应字段中的数字测试为精确值。
可以使用“枚举”关键字在期望字段的模式列表中使用单个值来完成此操作。与JSON Schema相比,Open API不支持“ const”关键字。
此外,最好有一种顺序测试请求的方法,但我不希望仅从spec文件中实现。
要实现此目的,可以使用Open API links,它允许您指定如何根据对端点A的请求或响应来构造对端点B的请求。例如:
paths:
/users:
post:
summary: Creates a user and returns the user ID
operationId: createUser
responses:
'201':
description: Created
content:
application/json:
schema:
type: object
properties:
id:
type: integer
format: int64
description: ID of the created user.
links:
GetUserByUserId:
operationId: getUser
parameters:
userId: '$response.body#/id'
/users/{userId}:
get:
summary: Gets a user by ID
operationId: getUser
parameters:
- in: path
name: userId
required: true
schema:
type: integer
format: int64
在此示例中,在201对id
的响应中返回的POST /users
值可以用作userId
中的GET /users/{userId}
参数。这样,您可以定义到不同端点的请求序列。
我要注意两个仅可以基于输入的Open API规范生成和执行测试用例的工具:
两者均提供CLI,并且可以通过各种挂钩进行扩展以适合所需的工作流程。